There are often occasions when it is useful to take a random sample from an already existing vector, or to generate data according to some distribution. We will discuss methods for creating randomly generated vectors in this notebook.

Sampling from a Vector

We can use the sample() function to randomly select some number of elements from a vector. We can control the number of elements selected using the size parameter.

v <- c(71, 58, 38, 99, 48, 55,
       25, 67, 32, 36, 84, 18)

sample(v, size=3)
[1] 99 67 32

Note that we will get a different result each time we run the sample command.

sample(v, size=3)
[1] 32 58 48

By default, the sampling is performed without replacement. We can alter this behavior by setting replace=TRUE.

sample(v, size=6, replace=TRUE)
[1] 25 55 58 84 71 58

Sampling from a Normal Distribution

We can use the rnorm function to generate a random sample according to a normal distribution. In the cell below, we generate 300 values from a normal distribution with a mean of 20 and a standard deviation of 4. We then display the first 10 values in our random sample.

sample_1 <- rnorm(n=300, mean=20, sd=4)
sample_1[1:10]
 [1] 22.08440 22.22782 29.26132 22.82613 15.76703 20.28913 19.45237 17.68621 21.04101 20.24607

It is difficult to tell that our sample is randomly generate just by looking at the values for 10 (or all 300) observations. However, recall that for a normal distribution:

Since we are working with a randomly generated sample, our proportions might vary a bit from this, but they should be similar.

mean((sample_1 > 16) & (sample_1 < 24))
[1] 0.6633333
mean((sample_1 > 12) & (sample_1 < 28))
[1] 0.95
mean((sample_1 > 8) & (sample_1 < 32))
[1] 0.9933333

Sampling from a Uniform Distribution

We can use the function runif to sample from a uniform distribution. In the cell below, we generate 300 observations of a variable that is uniformly distributed on the interval [0, 10]. We then display the first 10 values in our random sample.

sample_2 <- runif(n=300, min=0, max=10)
sample_2[1:10]
 [1] 4.9500507 5.4634748 1.7960568 7.3527347 3.3407961 7.1273173 2.4843037 8.1804876 7.5926185 0.4698487

Since the length of our interval is 10, roughly 70% of our observations should be less than 7.

mean(sample_2 < 7)
[1] 0.75

Roughly 50% of our observations should be between 3 and 8.

mean((sample_2 > 3) & (sample_2 < 8))
[1] 0.51

Roughly 80% of our observations should be greater than 2.

mean(sample_2 > 2)
[1] 0.8033333
LS0tDQp0aXRsZTogIkFwcGVuZGl4IEEuNCAtIFJhbmRvbSBTYW1wbGluZyBpbiBSIg0KYXV0aG9yOiAiUm9iYmllIEJlYW5lIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIHRoZW1lOiBmbGF0bHkNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZGVwdGg6IDQNCi0tLQ0KDQpUaGVyZSBhcmUgb2Z0ZW4gb2NjYXNpb25zIHdoZW4gaXQgaXMgdXNlZnVsIHRvIHRha2UgYSByYW5kb20gc2FtcGxlIGZyb20gYW4gYWxyZWFkeSBleGlzdGluZyB2ZWN0b3IsIG9yIHRvIGdlbmVyYXRlIGRhdGEgYWNjb3JkaW5nIHRvIHNvbWUgZGlzdHJpYnV0aW9uLiBXZSB3aWxsIGRpc2N1c3MgbWV0aG9kcyBmb3IgY3JlYXRpbmcgcmFuZG9tbHkgZ2VuZXJhdGVkIHZlY3RvcnMgaW4gdGhpcyBub3RlYm9vay4NCg0KIyMjICoqU2FtcGxpbmcgZnJvbSBhIFZlY3RvcioqDQoNCldlIGNhbiB1c2UgdGhlIGBzYW1wbGUoKWAgZnVuY3Rpb24gdG8gcmFuZG9tbHkgc2VsZWN0IHNvbWUgbnVtYmVyIG9mIGVsZW1lbnRzIGZyb20gYSB2ZWN0b3IuIFdlIGNhbiBjb250cm9sIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgc2VsZWN0ZWQgdXNpbmcgdGhlIGBzaXplYCBwYXJhbWV0ZXIuIA0KDQpgYGB7cn0NCnYgPC0gYyg3MSwgNTgsIDM4LCA5OSwgNDgsIDU1LA0KICAgICAgIDI1LCA2NywgMzIsIDM2LCA4NCwgMTgpDQoNCnNhbXBsZSh2LCBzaXplPTMpDQpgYGANCg0KTm90ZSB0aGF0IHdlIHdpbGwgZ2V0IGEgZGlmZmVyZW50IHJlc3VsdCBlYWNoIHRpbWUgd2UgcnVuIHRoZSBgc2FtcGxlYCBjb21tYW5kLiANCg0KYGBge3J9DQpzYW1wbGUodiwgc2l6ZT0zKQ0KYGBgDQoNCkJ5IGRlZmF1bHQsIHRoZSBzYW1wbGluZyBpcyBwZXJmb3JtZWQgd2l0aG91dCByZXBsYWNlbWVudC4gV2UgY2FuIGFsdGVyIHRoaXMgYmVoYXZpb3IgYnkgc2V0dGluZyBgcmVwbGFjZT1UUlVFYC4gDQoNCmBgYHtyfQ0Kc2FtcGxlKHYsIHNpemU9NiwgcmVwbGFjZT1UUlVFKQ0KYGBgDQoNCg0KIyMjICoqU2FtcGxpbmcgZnJvbSBhIE5vcm1hbCBEaXN0cmlidXRpb24qKg0KDQpXZSBjYW4gdXNlIHRoZSBgcm5vcm1gIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgcmFuZG9tIHNhbXBsZSBhY2NvcmRpbmcgdG8gYSBub3JtYWwgZGlzdHJpYnV0aW9uLiBJbiB0aGUgY2VsbCBiZWxvdywgd2UgZ2VuZXJhdGUgMzAwIHZhbHVlcyBmcm9tIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbiB3aXRoIGEgbWVhbiBvZiAyMCBhbmQgYSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgNC4gV2UgdGhlbiBkaXNwbGF5IHRoZSBmaXJzdCAxMCB2YWx1ZXMgaW4gb3VyIHJhbmRvbSBzYW1wbGUuIA0KDQpgYGB7cn0NCnNhbXBsZV8xIDwtIHJub3JtKG49MzAwLCBtZWFuPTIwLCBzZD00KQ0Kc2FtcGxlXzFbMToxMF0NCmBgYA0KDQpJdCBpcyBkaWZmaWN1bHQgdG8gdGVsbCB0aGF0IG91ciBzYW1wbGUgaXMgcmFuZG9tbHkgZ2VuZXJhdGUganVzdCBieSBsb29raW5nIGF0IHRoZSB2YWx1ZXMgZm9yIDEwIChvciBhbGwgMzAwKSBvYnNlcnZhdGlvbnMuIEhvd2V2ZXIsIHJlY2FsbCB0aGF0IGZvciBhIG5vcm1hbCBkaXN0cmlidXRpb246DQoNCiogNjguMjYlIG9mIGFsbCBvYnNlcnZhdGlvbnMgYXJlIHdpdGhpbiAxIHN0YW5kYXJkIGRldmlhdGlvbiBmcm9tIHRoZSBtZWFuLg0KKiA5NS40NCUgb2YgYWxsIG9ic2VydmF0aW9ucyBhcmUgd2l0aGluIDEgc3RhbmRhcmQgZGV2aWF0aW9uIGZyb20gdGhlIG1lYW4uIA0KKiA5OS43MyUgb2YgYWxsIG9ic2VydmF0aW9ucyBhcmUgd2l0aGluIDEgc3RhbmRhcmQgZGV2aWF0aW9uIGZyb20gdGhlIG1lYW4uIA0KDQpTaW5jZSB3ZSBhcmUgd29ya2luZyB3aXRoIGEgcmFuZG9tbHkgZ2VuZXJhdGVkIHNhbXBsZSwgb3VyIHByb3BvcnRpb25zIG1pZ2h0IHZhcnkgYSBiaXQgZnJvbSB0aGlzLCBidXQgdGhleSBzaG91bGQgYmUgc2ltaWxhci4gDQoNCmBgYHtyfQ0KbWVhbigoc2FtcGxlXzEgPiAxNikgJiAoc2FtcGxlXzEgPCAyNCkpDQpgYGANCg0KYGBge3J9DQptZWFuKChzYW1wbGVfMSA+IDEyKSAmIChzYW1wbGVfMSA8IDI4KSkNCmBgYA0KDQpgYGB7cn0NCm1lYW4oKHNhbXBsZV8xID4gOCkgJiAoc2FtcGxlXzEgPCAzMikpDQpgYGANCg0KIyMjICoqU2FtcGxpbmcgZnJvbSBhIFVuaWZvcm0gRGlzdHJpYnV0aW9uKioNCg0KV2UgY2FuIHVzZSB0aGUgZnVuY3Rpb24gYHJ1bmlmYCB0byBzYW1wbGUgZnJvbSBhIHVuaWZvcm0gZGlzdHJpYnV0aW9uLiBJbiB0aGUgY2VsbCBiZWxvdywgd2UgZ2VuZXJhdGUgMzAwIG9ic2VydmF0aW9ucyBvZiBhIHZhcmlhYmxlIHRoYXQgaXMgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkIG9uIHRoZSBpbnRlcnZhbCBgWzAsIDEwXWAuIFdlIHRoZW4gZGlzcGxheSB0aGUgZmlyc3QgMTAgdmFsdWVzIGluIG91ciByYW5kb20gc2FtcGxlLiANCg0KYGBge3J9DQpzYW1wbGVfMiA8LSBydW5pZihuPTMwMCwgbWluPTAsIG1heD0xMCkNCnNhbXBsZV8yWzE6MTBdDQpgYGANCg0KU2luY2UgdGhlIGxlbmd0aCBvZiBvdXIgaW50ZXJ2YWwgaXMgMTAsIHJvdWdobHkgNzAlIG9mIG91ciBvYnNlcnZhdGlvbnMgc2hvdWxkIGJlIGxlc3MgdGhhbiA3LiANCg0KYGBge3J9DQptZWFuKHNhbXBsZV8yIDwgNykNCmBgYA0KDQpSb3VnaGx5IDUwJSBvZiBvdXIgb2JzZXJ2YXRpb25zIHNob3VsZCBiZSBiZXR3ZWVuIDMgYW5kIDguIA0KDQpgYGB7cn0NCm1lYW4oKHNhbXBsZV8yID4gMykgJiAoc2FtcGxlXzIgPCA4KSkNCmBgYA0KDQpSb3VnaGx5IDgwJSBvZiBvdXIgb2JzZXJ2YXRpb25zIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMi4gDQoNCmBgYHtyfQ0KbWVhbihzYW1wbGVfMiA+IDIpDQpgYGA=