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=