Activity 14

Michael Marx

##MATH AND SIMULATIONS IN R

R contains built-in functions for your favorite math operations and, of course, for statistical distributions.

plot functions returns scatter plot of cars dataframe dist and speed columns

plot(cars)

Extended Example: Calculating a Probability

As our first example, we’ll work through calculating a probability using the prod() function. Suppose we have n independent events, and the ith event has the probability pi of occurring. What is the probability of exactly one of these events occurring? Suppose first that n = 3 and our events are named A, B, and C. Then we break down the computation as follows:

P(exactly one event occurs) = P(A and not B and not C) + P(not A and B and not C) + P(not A and not B and C)

Here’s code to compute this, with our probabilities pi contained in the vector p:

-> exactlyone fucntion takes p as arguement and calculates the probability of excatly one event happening:

exactlyone <- function(p) {
notp <- 1 - p
tot <- 0.0
for (i in 1:length(p))
tot <- tot + p[i] * prod(notp[-i])
return(tot)
}

How does it work? Well, the assignment notp <- 1 - p creates a vector of all the “not occur” probabilities 1 − pj , using recycling. The expression notp[-i] computes the product of all the elements of notp, except the ith—exactly what we need.

## Cumulative Sums and Products

As mentioned, the functions cumsum() and cumprod() return cumulative sums and products.

x <- c(12,5,13)
cumsum(x)
[1] 12 17 30
cumprod(x)
[1]  12  60 780

-> cumsum adds the vector element by element -> cumprod multiples the vector element by element

In x, the sum of the first element is 12, the sum of the first two elements is 17, and the sum of the first three elements is 30. The function cumprod() works the same way as cumsum(), but with the product instead of the sum.

Minima and Maxima

There is quite a difference between min() and pmin(). The former simply combines all its arguments into one long vector and returns the minimum value in that vector. In contrast, if pmin() is applied to two or more vectors, it returns a vector of the pair-wise minima, hence the name pmin.

Here’s an example:

z [,1] [,2] [1,] 1 2 [2,] 5 3 [3,] 6 2

min(z[,1],z[,2]) [1] 1

pmin(z[,1],z[,2]) [1] 1 3 2

In the first case, min() computed the smallest value in (1,5,6,2,3,2). But the call to pmin() computed the smaller of 1 and 2, yielding 1; then the smaller of 5 and 3, which is 3; then finally the minimum of 6 and 2, giving 2. Thus, the call returned the vector (1,3,2).

The max() and pmax() functions act analogously to min() and pmin(). Function minimization/maximization can be done via nlm() and optim(). For example, let’s find the smallest value of f(x) = x2 − sin(x).

nlm(function(x) return(x^2-sin(x)),8)
$minimum
[1] -0.2324656

$estimate
[1] 0.4501831

$gradient
[1] 4.024558e-09

$code
[1] 1

$iterations
[1] 5

nlm takes function as arguments which in turn takes x^2-sin(x) as arguemtn where x =8 -> minimum, estimate, gradient, code, and iterations are returned

Here, the minimum value was found to be approximately −0.23, occurring at x = 0.45. A Newton-Raphson method (a technique from numerical analysis for approximating roots) is used, running five iterations in this case. The second argument specifies the initial guess, which we set to be 8. (This second argument was picked pretty arbitrarily here, but in some problems, you may need to experiment to find a value that will lead to convergence.)

Recreate a similar case scenario shown above but this time using the function f(x) = 3x2 − cos(x)

nlm(function(x) return(3*2 − cos(x)),8)
$minimum
[1] 5

$estimate
[1] 6.283182

$gradient
[1] -1.176099e-07

$code
[1] 1

$iterations
[1] 4

Calculus

R also has some calculus capabilities, including symbolic differentiation and numerical integration, as you can see in the following example.

D(expression(exp(x^2)),"x") # derivative
exp(x^2) * (2 * x)

Find the derivative of exp(x^3)+x

D(expression(exp((x^3)+x)),"x") # derivative
exp((x^3) + x) * (3 * x^2 + 1)
integrate(function(x) x^2,0,1)
0.3333333 with absolute error < 3.7e-15

-> returns integrate with absolute error

Integrate exp(x^2) between 0 and 1

integrate(function(x) exp(x^2),0,1)
1.462652 with absolute error < 1.6e-14

Set Operations


R includes some handy set operations, including these: • union(x,y): Union of the sets x and y • intersect(x,y): Intersection of the sets x and y • setdiff(x,y): Set difference between x and y, consisting of all elements of x that are not in y • setequal(x,y): Test for equality between x and y • c %in% y: Membership, testing whether c is an element of the set y • choose(n,k): Number of possible subsets of size k chosen from a set of size n

Assigning two vectors x and y

x <- c(1,2,5)
y <- c(5,1,8,9)

union vectors:

union(x,y)
[1] 1 2 5 8 9

-> results in concatenation

intersect(x,y)
[1] 1 5

-> returns elements that are present in both vectors

setdiff(x,y)
[1] 2

-> returns what’s in x but not in y

setdiff(y,x)
[1] 8 9

-> returns what’s in y but

Create two vectors and x1 and y1 and simulate a similar case scenario.

x1 <- c(855,227264,652+94,46654,864,2646,24565)
y1 <- c(78424,798777,9222222,189414,29862)

union(x1,y1)
 [1]     855  227264     746   46654     864    2646   24565   78424  798777 9222222  189414   29862
intersect(x,y)
[1] 1 5
setdiff(y,x)
[1] 8 9
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIEFjdGl2aXR5IDE0DQojIyBNaWNoYWVsIE1hcngNCg0KIyNNQVRIIEFORCBTSU1VTEFUSU9OUyBJTiBSDQoNClIgY29udGFpbnMgYnVpbHQtaW4gZnVuY3Rpb25zIGZvciB5b3VyIGZhdm9yaXRlIG1hdGggb3BlcmF0aW9ucyBhbmQsIG9mIGNvdXJzZSwgZm9yIHN0YXRpc3RpY2FsIGRpc3RyaWJ1dGlvbnMuDQoNCnBsb3QgZnVuY3Rpb25zIHJldHVybnMgc2NhdHRlciBwbG90IG9mIGNhcnMgZGF0YWZyYW1lIGRpc3QgYW5kIHNwZWVkIGNvbHVtbnMNCmBgYHtyfQ0KcGxvdChjYXJzKQ0KYGBgDQoNCkV4dGVuZGVkIEV4YW1wbGU6IENhbGN1bGF0aW5nIGEgUHJvYmFiaWxpdHkNCg0KQXMgb3VyIGZpcnN0IGV4YW1wbGUsIHdl4oCZbGwgd29yayB0aHJvdWdoIGNhbGN1bGF0aW5nIGEgcHJvYmFiaWxpdHkgdXNpbmcgdGhlIHByb2QoKSBmdW5jdGlvbi4gU3VwcG9zZSB3ZSBoYXZlIG4gaW5kZXBlbmRlbnQgZXZlbnRzLCBhbmQgdGhlIGl0aCBldmVudCBoYXMgdGhlIHByb2JhYmlsaXR5IHBpIG9mIG9jY3VycmluZy4gV2hhdCBpcyB0aGUgcHJvYmFiaWxpdHkgb2YgZXhhY3RseSBvbmUgb2YNCnRoZXNlIGV2ZW50cyBvY2N1cnJpbmc/IFN1cHBvc2UgZmlyc3QgdGhhdCBuID0gMyBhbmQgb3VyIGV2ZW50cyBhcmUgbmFtZWQgQSwgQiwgYW5kIEMuIFRoZW4gd2UgYnJlYWsgZG93biB0aGUgY29tcHV0YXRpb24gYXMgZm9sbG93czoNCg0KUChleGFjdGx5IG9uZSBldmVudCBvY2N1cnMpID0gUChBIGFuZCBub3QgQiBhbmQgbm90IEMpICsgUChub3QgQSBhbmQgQiBhbmQgbm90IEMpICsgUChub3QgQSBhbmQgbm90IEIgYW5kIEMpDQoNCkhlcmXigJlzIGNvZGUgdG8gY29tcHV0ZSB0aGlzLCB3aXRoIG91ciBwcm9iYWJpbGl0aWVzIHBpIGNvbnRhaW5lZCBpbiB0aGUgdmVjdG9yIHA6DQoNCi0+IGV4YWN0bHlvbmUgZnVjbnRpb24gdGFrZXMgcCBhcyBhcmd1ZW1lbnQgYW5kIGNhbGN1bGF0ZXMgdGhlIHByb2JhYmlsaXR5IG9mIGV4Y2F0bHkgb25lIGV2ZW50IGhhcHBlbmluZzoNCmBgYHtyfQ0KZXhhY3RseW9uZSA8LSBmdW5jdGlvbihwKSB7DQpub3RwIDwtIDEgLSBwDQp0b3QgPC0gMC4wDQpmb3IgKGkgaW4gMTpsZW5ndGgocCkpDQp0b3QgPC0gdG90ICsgcFtpXSAqIHByb2Qobm90cFstaV0pDQpyZXR1cm4odG90KQ0KfQ0KYGBgDQoNCg0KSG93IGRvZXMgaXQgd29yaz8gV2VsbCwgdGhlIGFzc2lnbm1lbnQgbm90cCA8LSAxIC0gcCBjcmVhdGVzIGEgdmVjdG9yIG9mIGFsbCB0aGUg4oCcbm90IG9jY3Vy4oCdIHByb2JhYmlsaXRpZXMgMSDiiJIgcGogLCB1c2luZyByZWN5Y2xpbmcuIFRoZSBleHByZXNzaW9uIG5vdHBbLWldIGNvbXB1dGVzIHRoZSBwcm9kdWN0IG9mIGFsbCB0aGUgZWxlbWVudHMgb2Ygbm90cCwgZXhjZXB0IHRoZSBpdGjigJRleGFjdGx5IHdoYXQgd2UgbmVlZC4NCg0KDQojIyBDdW11bGF0aXZlIFN1bXMgYW5kIFByb2R1Y3RzDQotLS0NCkFzIG1lbnRpb25lZCwgdGhlIGZ1bmN0aW9ucyBjdW1zdW0oKSBhbmQgY3VtcHJvZCgpIHJldHVybiBjdW11bGF0aXZlIHN1bXMgYW5kIHByb2R1Y3RzLg0KDQpgYGB7cn0NCnggPC0gYygxMiw1LDEzKQ0KY3Vtc3VtKHgpDQpjdW1wcm9kKHgpDQpgYGANCi0+IGN1bXN1bSBhZGRzIHRoZSB2ZWN0b3IgZWxlbWVudCBieSBlbGVtZW50DQotPiBjdW1wcm9kIG11bHRpcGxlcyB0aGUgdmVjdG9yIGVsZW1lbnQgYnkgZWxlbWVudA0KDQoNCkluIHgsIHRoZSBzdW0gb2YgdGhlIGZpcnN0IGVsZW1lbnQgaXMgMTIsIHRoZSBzdW0gb2YgdGhlIGZpcnN0IHR3byBlbGVtZW50cyBpcyAxNywgYW5kIHRoZSBzdW0gb2YgdGhlIGZpcnN0IHRocmVlIGVsZW1lbnRzIGlzIDMwLiBUaGUgZnVuY3Rpb24gY3VtcHJvZCgpIHdvcmtzIHRoZSBzYW1lIHdheSBhcyBjdW1zdW0oKSwgYnV0IHdpdGggdGhlIHByb2R1Y3QgaW5zdGVhZCBvZiB0aGUgc3VtLg0KDQoNCiMjIE1pbmltYSBhbmQgTWF4aW1hDQoNCg0KVGhlcmUgaXMgcXVpdGUgYSBkaWZmZXJlbmNlIGJldHdlZW4gbWluKCkgYW5kIHBtaW4oKS4gVGhlIGZvcm1lciBzaW1wbHkgY29tYmluZXMgYWxsIGl0cyBhcmd1bWVudHMgaW50byBvbmUgbG9uZyB2ZWN0b3IgYW5kIHJldHVybnMgdGhlIG1pbmltdW0gdmFsdWUgaW4gdGhhdCB2ZWN0b3IuIEluIGNvbnRyYXN0LCBpZiBwbWluKCkgaXMgYXBwbGllZCB0byB0d28gb3IgbW9yZSB2ZWN0b3JzLCBpdCByZXR1cm5zIGEgdmVjdG9yIG9mIHRoZSBwYWlyLXdpc2UgbWluaW1hLCBoZW5jZSB0aGUgbmFtZSBwbWluLg0KDQoNCkhlcmXigJlzIGFuIGV4YW1wbGU6DQoNCnoNCiAgICBbLDFdIFssMl0NClsxLF0gIDEgICAgMg0KWzIsXSAgNSAgICAzDQpbMyxdICA2ICAgIDINCg0KbWluKHpbLDFdLHpbLDJdKQ0KWzFdIDENCg0KDQpwbWluKHpbLDFdLHpbLDJdKQ0KWzFdIDEgMyAyDQoNCg0KSW4gdGhlIGZpcnN0IGNhc2UsIG1pbigpIGNvbXB1dGVkIHRoZSBzbWFsbGVzdCB2YWx1ZSBpbiAoMSw1LDYsMiwzLDIpLiBCdXQgdGhlIGNhbGwgdG8gcG1pbigpIGNvbXB1dGVkIHRoZSBzbWFsbGVyIG9mIDEgYW5kIDIsIHlpZWxkaW5nIDE7IHRoZW4gdGhlIHNtYWxsZXIgb2YgNSBhbmQgMywgd2hpY2ggaXMgMzsgdGhlbiBmaW5hbGx5IHRoZSBtaW5pbXVtIG9mIDYgYW5kIDIsIGdpdmluZyAyLiBUaHVzLCB0aGUgY2FsbCByZXR1cm5lZCB0aGUgdmVjdG9yICgxLDMsMikuDQoNCg0KVGhlIG1heCgpIGFuZCBwbWF4KCkgZnVuY3Rpb25zIGFjdCBhbmFsb2dvdXNseSB0byBtaW4oKSBhbmQgcG1pbigpLiBGdW5jdGlvbiBtaW5pbWl6YXRpb24vbWF4aW1pemF0aW9uIGNhbiBiZSBkb25lIHZpYSBubG0oKSBhbmQgb3B0aW0oKS4gRm9yIGV4YW1wbGUsIGxldOKAmXMgZmluZCB0aGUgc21hbGxlc3QgdmFsdWUgb2YgZih4KSA9IHgyIOKIkiBzaW4oeCkuDQoNCg0KYGBge3J9DQpubG0oZnVuY3Rpb24oeCkgcmV0dXJuKHheMi1zaW4oeCkpLDgpDQpgYGANCm5sbSB0YWtlcyBmdW5jdGlvbiBhcyBhcmd1bWVudHMgd2hpY2ggaW4gdHVybiB0YWtlcyB4XjItc2luKHgpIGFzIGFyZ3VlbXRuIHdoZXJlIHggPTgNCi0+IG1pbmltdW0sIGVzdGltYXRlLCBncmFkaWVudCwgY29kZSwgYW5kIGl0ZXJhdGlvbnMgYXJlIHJldHVybmVkDQoNCg0KSGVyZSwgdGhlIG1pbmltdW0gdmFsdWUgd2FzIGZvdW5kIHRvIGJlIGFwcHJveGltYXRlbHkg4oiSMC4yMywgb2NjdXJyaW5nIGF0IHggPSAwLjQ1LiBBIE5ld3Rvbi1SYXBoc29uIG1ldGhvZCAoYSB0ZWNobmlxdWUgZnJvbSBudW1lcmljYWwgYW5hbHlzaXMgZm9yIGFwcHJveGltYXRpbmcgcm9vdHMpIGlzIHVzZWQsIHJ1bm5pbmcgZml2ZSBpdGVyYXRpb25zIGluIHRoaXMgY2FzZS4gVGhlIHNlY29uZCBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGluaXRpYWwgZ3Vlc3MsIHdoaWNoIHdlIHNldCB0byBiZSA4LiAoVGhpcyBzZWNvbmQgYXJndW1lbnQgd2FzIHBpY2tlZCBwcmV0dHkgYXJiaXRyYXJpbHkgaGVyZSwgYnV0IGluIHNvbWUgcHJvYmxlbXMsIHlvdSBtYXkgbmVlZCB0byBleHBlcmltZW50IHRvIGZpbmQgYSB2YWx1ZSB0aGF0IHdpbGwgbGVhZCB0byBjb252ZXJnZW5jZS4pDQoNCg0KUmVjcmVhdGUgYSBzaW1pbGFyIGNhc2Ugc2NlbmFyaW8gc2hvd24gYWJvdmUgYnV0IHRoaXMgdGltZSB1c2luZyB0aGUgZnVuY3Rpb24gKipmKHgpID0gM3gyIOKIkiBjb3MoeCkqKg0KDQpgYGB7cn0NCm5sbShmdW5jdGlvbih4KSByZXR1cm4oMyoyIOKIkiBjb3MoeCkpLDgpDQpgYGANCg0KDQojIyBDYWxjdWx1cw0KDQoNClIgYWxzbyBoYXMgc29tZSBjYWxjdWx1cyBjYXBhYmlsaXRpZXMsIGluY2x1ZGluZyBzeW1ib2xpYyBkaWZmZXJlbnRpYXRpb24gYW5kIG51bWVyaWNhbCBpbnRlZ3JhdGlvbiwgYXMgeW91IGNhbiBzZWUgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLg0KDQpgYGB7cn0NCkQoZXhwcmVzc2lvbihleHAoeF4yKSksIngiKSAjIGRlcml2YXRpdmUNCmBgYA0KDQpGaW5kIHRoZSBkZXJpdmF0aXZlIG9mIGV4cCh4XjMpK3gNCg0KDQpgYGB7cn0NCkQoZXhwcmVzc2lvbihleHAoKHheMykreCkpLCJ4IikgIyBkZXJpdmF0aXZlDQpgYGANCg0KDQoNCmBgYHtyfQ0KaW50ZWdyYXRlKGZ1bmN0aW9uKHgpIHheMiwwLDEpDQpgYGANCi0+IHJldHVybnMgaW50ZWdyYXRlIHdpdGggYWJzb2x1dGUgZXJyb3INCg0KDQpJbnRlZ3JhdGUgZXhwKHheMikgYmV0d2VlbiAwIGFuZCAxDQoNCmBgYHtyfQ0KaW50ZWdyYXRlKGZ1bmN0aW9uKHgpIGV4cCh4XjIpLDAsMSkNCmBgYA0KDQoNCiMjIFNldCBPcGVyYXRpb25zDQoNCi0tLQ0KDQpSIGluY2x1ZGVzIHNvbWUgaGFuZHkgc2V0IG9wZXJhdGlvbnMsIGluY2x1ZGluZyB0aGVzZToNCuKAoiB1bmlvbih4LHkpOiBVbmlvbiBvZiB0aGUgc2V0cyB4IGFuZCB5DQrigKIgaW50ZXJzZWN0KHgseSk6IEludGVyc2VjdGlvbiBvZiB0aGUgc2V0cyB4IGFuZCB5DQrigKIgc2V0ZGlmZih4LHkpOiBTZXQgZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHksIGNvbnNpc3Rpbmcgb2YgYWxsIGVsZW1lbnRzIG9mIHggdGhhdCBhcmUgbm90IGluIHkNCuKAoiBzZXRlcXVhbCh4LHkpOiBUZXN0IGZvciBlcXVhbGl0eSBiZXR3ZWVuIHggYW5kIHkNCuKAoiBjICVpbiUgeTogTWVtYmVyc2hpcCwgdGVzdGluZyB3aGV0aGVyIGMgaXMgYW4gZWxlbWVudCBvZiB0aGUgc2V0IHkNCuKAoiBjaG9vc2UobixrKTogTnVtYmVyIG9mIHBvc3NpYmxlIHN1YnNldHMgb2Ygc2l6ZSBrIGNob3NlbiBmcm9tIGEgc2V0IG9mIHNpemUgbg0KDQoNCkFzc2lnbmluZyB0d28gdmVjdG9ycyB4IGFuZCB5DQpgYGB7cn0NCnggPC0gYygxLDIsNSkNCnkgPC0gYyg1LDEsOCw5KQ0KYGBgDQoNCnVuaW9uIHZlY3RvcnM6DQpgYGB7cn0NCnVuaW9uKHgseSkNCmBgYA0KLT4gcmVzdWx0cyBpbiBjb25jYXRlbmF0aW9uDQoNCg0KYGBge3J9DQppbnRlcnNlY3QoeCx5KQ0KYGBgDQotPiByZXR1cm5zIGVsZW1lbnRzIHRoYXQgYXJlIHByZXNlbnQgaW4gYm90aCB2ZWN0b3JzDQoNCmBgYHtyfQ0Kc2V0ZGlmZih4LHkpDQpgYGANCi0+IHJldHVybnMgd2hhdCdzIGluIHggYnV0IG5vdCBpbiB5DQoNCmBgYHtyfQ0Kc2V0ZGlmZih5LHgpDQpgYGANCi0+IHJldHVybnMgd2hhdCdzIGluIHkgYnV0IA0KDQoNCkNyZWF0ZSB0d28gdmVjdG9ycyBhbmQgeDEgYW5kIHkxIGFuZCBzaW11bGF0ZSBhIHNpbWlsYXIgY2FzZSBzY2VuYXJpby4gDQoNCmBgYHtyfQ0KeDEgPC0gYyg4NTUsMjI3MjY0LDY1Mis5NCw0NjY1NCw4NjQsMjY0NiwyNDU2NSkNCnkxIDwtIGMoNzg0MjQsNzk4Nzc3LDkyMjIyMjIsMTg5NDE0LDI5ODYyKQ0KDQp1bmlvbih4MSx5MSkNCmludGVyc2VjdCh4LHkpDQpzZXRkaWZmKHkseCkNCmBgYA0KDQoNCg0K