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