MATH AND SIMULATIONS IN R

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

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 <- 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

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

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)

#Enter Answer Here

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

#Enter Answer Here
integrate(function(x) x^2,0,1)
0.3333333 with absolute error < 3.7e-15

Integrate exp(x^2) between 0 and 1

#Enter Answer Here

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

x <- c(1,2,5)
y <- c(5,1,8,9)
union(x,y)
[1] 1 2 5 8 9
intersect(x,y)
[1] 1 5
setdiff(x,y)
[1] 2
setdiff(y,x)
[1] 8 9

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

#Enter Answer Here
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoqKk1BVEggQU5EIFNJTVVMQVRJT05TIElOIFIqKg0KLS0tDQoNClIgY29udGFpbnMgYnVpbHQtaW4gZnVuY3Rpb25zIGZvciB5b3VyIGZhdm9yaXRlIG1hdGggb3BlcmF0aW9ucyBhbmQsIG9mIGNvdXJzZSwgZm9yIHN0YXRpc3RpY2FsIGRpc3RyaWJ1dGlvbnMuDQoNCmBgYHtyfQ0KcGxvdChjYXJzKQ0KYGBgDQoNCkV4dGVuZGVkIEV4YW1wbGU6IENhbGN1bGF0aW5nIGEgUHJvYmFiaWxpdHkNCg0KQXMgb3VyIGZpcnN0IGV4YW1wbGUsIHdl4oCZbGwgd29yayB0aHJvdWdoIGNhbGN1bGF0aW5nIGEgcHJvYmFiaWxpdHkgdXNpbmcgdGhlIHByb2QoKSBmdW5jdGlvbi4gU3VwcG9zZSB3ZSBoYXZlIG4gaW5kZXBlbmRlbnQgZXZlbnRzLCBhbmQgdGhlIGl0aCBldmVudCBoYXMgdGhlIHByb2JhYmlsaXR5IHBpIG9mIG9jY3VycmluZy4gV2hhdCBpcyB0aGUgcHJvYmFiaWxpdHkgb2YgZXhhY3RseSBvbmUgb2YNCnRoZXNlIGV2ZW50cyBvY2N1cnJpbmc/IFN1cHBvc2UgZmlyc3QgdGhhdCBuID0gMyBhbmQgb3VyIGV2ZW50cyBhcmUgbmFtZWQgQSwgQiwgYW5kIEMuIFRoZW4gd2UgYnJlYWsgZG93biB0aGUgY29tcHV0YXRpb24gYXMgZm9sbG93czoNCg0KUChleGFjdGx5IG9uZSBldmVudCBvY2N1cnMpID0gUChBIGFuZCBub3QgQiBhbmQgbm90IEMpICsgUChub3QgQSBhbmQgQiBhbmQgbm90IEMpICsgUChub3QgQSBhbmQgbm90IEIgYW5kIEMpDQoNCkhlcmXigJlzIGNvZGUgdG8gY29tcHV0ZSB0aGlzLCB3aXRoIG91ciBwcm9iYWJpbGl0aWVzIHBpIGNvbnRhaW5lZCBpbiB0aGUgdmVjdG9yIHA6DQoNCmBgYHtyfQ0KZXhhY3RseW9uZSA8LSBmdW5jdGlvbihwKSB7DQpub3RwIDwtIDEgLSBwDQp0b3QgPC0gMC4wDQpmb3IgKGkgaW4gMTpsZW5ndGgocCkpDQp0b3QgPC0gdG90ICsgcFtpXSAqIHByb2Qobm90cFstaV0pDQpyZXR1cm4odG90KQ0KfQ0KYGBgDQoNCg0KSG93IGRvZXMgaXQgd29yaz8gV2VsbCwgdGhlIGFzc2lnbm1lbnQgbm90cCA8LSAxIC0gcCBjcmVhdGVzIGEgdmVjdG9yIG9mIGFsbCB0aGUg4oCcbm90IG9jY3Vy4oCdIHByb2JhYmlsaXRpZXMgMSDiiJIgcGogLCB1c2luZyByZWN5Y2xpbmcuIFRoZSBleHByZXNzaW9uIG5vdHBbLWldIGNvbXB1dGVzIHRoZSBwcm9kdWN0IG9mIGFsbCB0aGUgZWxlbWVudHMgb2Ygbm90cCwgZXhjZXB0IHRoZSBpdGjigJRleGFjdGx5IHdoYXQgd2UgbmVlZC4NCg0KDQoqKkN1bXVsYXRpdmUgU3VtcyBhbmQgUHJvZHVjdHMqKg0KLS0tDQpBcyBtZW50aW9uZWQsIHRoZSBmdW5jdGlvbnMgY3Vtc3VtKCkgYW5kIGN1bXByb2QoKSByZXR1cm4gY3VtdWxhdGl2ZSBzdW1zIGFuZCBwcm9kdWN0cy4NCg0KYGBge3J9DQp4IDwtIGMoMTIsNSwxMykNCmN1bXN1bSh4KQ0KY3VtcHJvZCh4KQ0KYGBgDQoNCkluIHgsIHRoZSBzdW0gb2YgdGhlIGZpcnN0IGVsZW1lbnQgaXMgMTIsIHRoZSBzdW0gb2YgdGhlIGZpcnN0IHR3byBlbGVtZW50cyBpcyAxNywgYW5kIHRoZSBzdW0gb2YgdGhlIGZpcnN0IHRocmVlIGVsZW1lbnRzIGlzIDMwLiBUaGUgZnVuY3Rpb24gY3VtcHJvZCgpIHdvcmtzIHRoZSBzYW1lIHdheSBhcyBjdW1zdW0oKSwgYnV0IHdpdGggdGhlIHByb2R1Y3QgaW5zdGVhZCBvZiB0aGUgc3VtLg0KDQoNCioqTWluaW1hIGFuZCBNYXhpbWEqKg0KDQotLS0NCg0KVGhlcmUgaXMgcXVpdGUgYSBkaWZmZXJlbmNlIGJldHdlZW4gbWluKCkgYW5kIHBtaW4oKS4gVGhlIGZvcm1lciBzaW1wbHkgY29tYmluZXMgYWxsIGl0cyBhcmd1bWVudHMgaW50byBvbmUgbG9uZyB2ZWN0b3IgYW5kIHJldHVybnMgdGhlIG1pbmltdW0gdmFsdWUgaW4gdGhhdCB2ZWN0b3IuIEluIGNvbnRyYXN0LCBpZiBwbWluKCkgaXMgYXBwbGllZCB0byB0d28gb3IgbW9yZSB2ZWN0b3JzLCBpdCByZXR1cm5zIGEgdmVjdG9yIG9mIHRoZSBwYWlyLXdpc2UgbWluaW1hLCBoZW5jZSB0aGUgbmFtZSBwbWluLg0KDQoNCkhlcmXigJlzIGFuIGV4YW1wbGU6DQoNCnoNCiAgICBbLDFdIFssMl0NClsxLF0gIDEgICAgMg0KWzIsXSAgNSAgICAzDQpbMyxdICA2ICAgIDINCg0KbWluKHpbLDFdLHpbLDJdKQ0KWzFdIDENCg0KDQpwbWluKHpbLDFdLHpbLDJdKQ0KWzFdIDEgMyAyDQoNCg0KSW4gdGhlIGZpcnN0IGNhc2UsIG1pbigpIGNvbXB1dGVkIHRoZSBzbWFsbGVzdCB2YWx1ZSBpbiAoMSw1LDYsMiwzLDIpLiBCdXQgdGhlIGNhbGwgdG8gcG1pbigpIGNvbXB1dGVkIHRoZSBzbWFsbGVyIG9mIDEgYW5kIDIsIHlpZWxkaW5nIDE7IHRoZW4gdGhlIHNtYWxsZXIgb2YgNSBhbmQgMywgd2hpY2ggaXMgMzsgdGhlbiBmaW5hbGx5IHRoZSBtaW5pbXVtIG9mIDYgYW5kIDIsIGdpdmluZyAyLiBUaHVzLCB0aGUgY2FsbCByZXR1cm5lZCB0aGUgdmVjdG9yICgxLDMsMikuDQoNCg0KVGhlIG1heCgpIGFuZCBwbWF4KCkgZnVuY3Rpb25zIGFjdCBhbmFsb2dvdXNseSB0byBtaW4oKSBhbmQgcG1pbigpLiBGdW5jdGlvbiBtaW5pbWl6YXRpb24vbWF4aW1pemF0aW9uIGNhbiBiZSBkb25lIHZpYSBubG0oKSBhbmQgb3B0aW0oKS4gRm9yIGV4YW1wbGUsIGxldOKAmXMgZmluZCB0aGUgc21hbGxlc3QgdmFsdWUgb2YgZih4KSA9IHgyIOKIkiBzaW4oeCkuDQoNCg0KYGBge3J9DQpubG0oZnVuY3Rpb24oeCkgcmV0dXJuKHheMi1zaW4oeCkpLDgpDQpgYGANCg0KSGVyZSwgdGhlIG1pbmltdW0gdmFsdWUgd2FzIGZvdW5kIHRvIGJlIGFwcHJveGltYXRlbHkg4oiSMC4yMywgb2NjdXJyaW5nIGF0IHggPSAwLjQ1LiBBIE5ld3Rvbi1SYXBoc29uIG1ldGhvZCAoYSB0ZWNobmlxdWUgZnJvbSBudW1lcmljYWwgYW5hbHlzaXMgZm9yIGFwcHJveGltYXRpbmcgcm9vdHMpIGlzIHVzZWQsIHJ1bm5pbmcgZml2ZSBpdGVyYXRpb25zIGluIHRoaXMgY2FzZS4gVGhlIHNlY29uZCBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGluaXRpYWwgZ3Vlc3MsIHdoaWNoIHdlIHNldCB0byBiZSA4LiAoVGhpcyBzZWNvbmQgYXJndW1lbnQgd2FzIHBpY2tlZCBwcmV0dHkgYXJiaXRyYXJpbHkgaGVyZSwgYnV0IGluIHNvbWUgcHJvYmxlbXMsIHlvdSBtYXkgbmVlZCB0byBleHBlcmltZW50IHRvIGZpbmQgYSB2YWx1ZSB0aGF0IHdpbGwgbGVhZCB0byBjb252ZXJnZW5jZS4pDQoNCg0KUmVjcmVhdGUgYSBzaW1pbGFyIGNhc2Ugc2NlbmFyaW8gc2hvd24gYWJvdmUgYnV0IHRoaXMgdGltZSB1c2luZyB0aGUgZnVuY3Rpb24gKipmKHgpID0gM3gyIOKIkiBjb3MoeCkqKg0KDQpgYGB7cn0NCiNFbnRlciBBbnN3ZXIgSGVyZQ0KYGBgDQoNCg0KKipDYWxjdWx1cyoqDQoNCi0tLQ0KDQpSIGFsc28gaGFzIHNvbWUgY2FsY3VsdXMgY2FwYWJpbGl0aWVzLCBpbmNsdWRpbmcgc3ltYm9saWMgZGlmZmVyZW50aWF0aW9uIGFuZCBudW1lcmljYWwgaW50ZWdyYXRpb24sIGFzIHlvdSBjYW4gc2VlIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZS4NCg0KYGBge3J9DQpEKGV4cHJlc3Npb24oZXhwKHheMikpLCJ4IikgIyBkZXJpdmF0aXZlDQpgYGANCg0KRmluZCB0aGUgZGVyaXZhdGl2ZSBvZiBleHAoeF4zKSt4DQoNCg0KYGBge3J9DQojRW50ZXIgQW5zd2VyIEhlcmUNCmBgYA0KDQoNCg0KYGBge3J9DQppbnRlZ3JhdGUoZnVuY3Rpb24oeCkgeF4yLDAsMSkNCmBgYA0KSW50ZWdyYXRlIGV4cCh4XjIpIGJldHdlZW4gMCBhbmQgMQ0KDQpgYGB7cn0NCiNFbnRlciBBbnN3ZXIgSGVyZQ0KYGBgDQoNCg0KKipTZXQgT3BlcmF0aW9ucyoqDQoNCi0tLQ0KDQpSIGluY2x1ZGVzIHNvbWUgaGFuZHkgc2V0IG9wZXJhdGlvbnMsIGluY2x1ZGluZyB0aGVzZToNCuKAoiB1bmlvbih4LHkpOiBVbmlvbiBvZiB0aGUgc2V0cyB4IGFuZCB5DQrigKIgaW50ZXJzZWN0KHgseSk6IEludGVyc2VjdGlvbiBvZiB0aGUgc2V0cyB4IGFuZCB5DQrigKIgc2V0ZGlmZih4LHkpOiBTZXQgZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHksIGNvbnNpc3Rpbmcgb2YgYWxsIGVsZW1lbnRzIG9mIHggdGhhdCBhcmUgbm90IGluIHkNCuKAoiBzZXRlcXVhbCh4LHkpOiBUZXN0IGZvciBlcXVhbGl0eSBiZXR3ZWVuIHggYW5kIHkNCuKAoiBjICVpbiUgeTogTWVtYmVyc2hpcCwgdGVzdGluZyB3aGV0aGVyIGMgaXMgYW4gZWxlbWVudCBvZiB0aGUgc2V0IHkNCuKAoiBjaG9vc2UobixrKTogTnVtYmVyIG9mIHBvc3NpYmxlIHN1YnNldHMgb2Ygc2l6ZSBrIGNob3NlbiBmcm9tIGEgc2V0IG9mIHNpemUgbg0KDQoNCmBgYHtyfQ0KeCA8LSBjKDEsMiw1KQ0KeSA8LSBjKDUsMSw4LDkpDQpgYGANCg0KDQpgYGB7cn0NCnVuaW9uKHgseSkNCmBgYA0KDQpgYGB7cn0NCmludGVyc2VjdCh4LHkpDQpgYGANCg0KDQpgYGB7cn0NCnNldGRpZmYoeCx5KQ0KYGBgDQoNCg0KYGBge3J9DQpzZXRkaWZmKHkseCkNCmBgYA0KDQpDcmVhdGUgdHdvIHZlY3RvcnMgYW5kIHgxIGFuZCB5MSBhbmQgc2ltdWxhdGUgYSBzaW1pbGFyIGNhc2Ugc2NlbmFyaW8uIA0KDQpgYGB7cn0NCiNFbnRlciBBbnN3ZXIgSGVyZQ0KYGBgDQoNCg0KDQo=