R Functions dnbinom, pnbinom, and rnbinom

Random variable X is distributed X∼NB(r,p) with mean \[μ=\frac{r}{p}\] and variance \[σ2=r(1−p)/p2\] if X is the count of independent Bernoulli trials required to achieve the rth successful trial when the probability of success is constant p.

The probability of X=n trials is

\[ f(X=n)= {n−1 \choose r−1} p^r (1−p)^{n−r} \]

  1. R function dnbinom(x, size, prob) is the probability of x failures prior to the rth success (note the difference) when the probability of success is prob.

  2. R function pgeom(q, prob, lower.tail) is the cumulative probability (lower.tail = TRUE for left tail, lower.tail = FALSE for right tail) of less than or equal to q failures prior to success.

Example

An oil company has a p = 0.20 chance of striking oil when drilling a well. What is the probability the company drills x = 7 wells to strike oil r = 3 times?

r = 3
p = 0.20
n = 7 - r
# exact
dnbinom(x = n, size = r, prob = p)
[1] 0.049152
# simulated
set.seed(1)
mean(rnbinom(n = 10000000, size = r, prob = p) == n)
[1] 0.0491621

library(dplyr)
library(ggplot2)

data.frame(x = 0:25, prob = dnbinom(x = 0:25, size = r, prob = p)) %>%
  mutate(Failures = ifelse(x == n, n, "other")) %>%
ggplot(aes(x = factor(x), y = prob, fill = Failures)) +
  geom_col() +
  geom_text(
    aes(label = round(prob,2), y = prob + 0.01),
    position = position_dodge(0.9),
    size = 3,
    vjust = 0
  ) +
  labs(title = "Probability of r = 3 Successes in X = 7 Trials",
       subtitle = "NB(3,.2)",
       x = "Failed Trials (X - r)",
       y = "Probability") 

#Example

What is the expected number of trials to achieve r = 3 successes when the probability of success is p = 0.2 ?

r = 3
p = 0.20
# mean
# exact
r / p
[1] 15

simulated

mean(rnbinom(n = 1000000, size = 3, prob = p)) + r
[1] 15.00988
# Variance
# exact
r * (1 - p) / p^2
[1] 60

simulated

var(rnbinom(n = 10000000, size = r, prob = p))
[1] 60.03182
library(dplyr)
library(ggplot2)

data.frame(x = 1:20, 
           pmf = dnbinom(x = 1:20, size = r, prob = p),
           cdf = pnbinom(q = 1:20, size = r, prob = p, lower.tail = TRUE)) %>%
ggplot(aes(x = factor(x), y = cdf , fill = cdf)) +
  geom_col() +
  geom_text(
    aes(label = round(cdf,2), y = cdf + 0.01),
    position = position_dodge(0.9),
    size = 3,
    vjust = 0
  ) +
  labs(title = "Cumulative Probability of X = x failed trials to achieve 3rd success",
       subtitle = "NB(3,.2)",
       x = "Failed Trials (x)",
       y = "probability") 

#Question

You are surveying people exiting from a polling booth and asking them if they voted independent. The probability (p) that a person voted independent is 20%. What is the probability that 70 people must be asked before you can find 5 people who voted independent?

Code: We use dnbinom(x, size, prob) - x= number of failures that need to happen before reaching the required number of successes.

p =.2
r = 5 
n = 70 -5

dnbinom(x= fail,size= r, prob = p)
[1] 6.058753e-05

To plot the probability mass function for a negative binomial function in R, we can use the following functions:

x <- 65
size <- 5
prob = .2
dnbinom(x, size, prob) # is used to create the probability mass function
[1] 0.00013892
plot(0:x, dnbinom(0:x, size, prob) , type = 'h') # to plot the probability mass function, specifying the plot to be a histogram (type=’h’)

NA
NA

Referance

https://rpubs.com/mpfoley73/458738

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpSIEZ1bmN0aW9ucyBkbmJpbm9tLCBwbmJpbm9tLCBhbmQgcm5iaW5vbQ0KDQpSYW5kb20gdmFyaWFibGUgWCBpcyBkaXN0cmlidXRlZCBY4oi8TkIocixwKSB3aXRoIG1lYW4gJCTOvD1cZnJhY3tyfXtwfSQkIGFuZCB2YXJpYW5jZSAkJM+DMj1yKDHiiJJwKS9wMiQkDQppZiBYIGlzIHRoZSBjb3VudCBvZiBpbmRlcGVuZGVudCBCZXJub3VsbGkgdHJpYWxzIHJlcXVpcmVkIHRvIGFjaGlldmUgdGhlIHJ0aCBzdWNjZXNzZnVsIHRyaWFsIHdoZW4gdGhlIHByb2JhYmlsaXR5IG9mIHN1Y2Nlc3MgaXMgY29uc3RhbnQgcC4NCiANClRoZSBwcm9iYWJpbGl0eSBvZiBYPW4gdHJpYWxzIGlzDQoNCiAkJCANCiBmKFg9bik9DQoge27iiJIxIFxjaG9vc2UgcuKIkjF9IHBeciAoMeKIknApXntu4oiScn0NCiAkJA0KIA0KDQoxLiBSIGZ1bmN0aW9uICoqZG5iaW5vbSh4LCBzaXplLCBwcm9iKSoqIGlzIHRoZSBwcm9iYWJpbGl0eSBvZiAqKngqKiBmYWlsdXJlcyBwcmlvciB0byB0aGUgcnRoIHN1Y2Nlc3MgKG5vdGUgdGhlIGRpZmZlcmVuY2UpIHdoZW4gdGhlIHByb2JhYmlsaXR5IG9mIHN1Y2Nlc3MgaXMgcHJvYi4NCg0KMi4gUiBmdW5jdGlvbiBwZ2VvbShxLCBwcm9iLCBsb3dlci50YWlsKSBpcyB0aGUgY3VtdWxhdGl2ZSBwcm9iYWJpbGl0eSAobG93ZXIudGFpbCA9IFRSVUUgZm9yIGxlZnQgdGFpbCwgbG93ZXIudGFpbCA9IEZBTFNFIGZvciByaWdodCB0YWlsKSBvZiBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcSBmYWlsdXJlcyBwcmlvciB0byBzdWNjZXNzLg0KIA0KIA0KIyBFeGFtcGxlDQpBbiBvaWwgY29tcGFueSBoYXMgYSAqKnAgPSAwLjIwKiogY2hhbmNlIG9mIHN0cmlraW5nIG9pbCB3aGVuIGRyaWxsaW5nIGEgd2VsbC4gV2hhdCBpcyB0aGUgcHJvYmFiaWxpdHkgdGhlIGNvbXBhbnkgZHJpbGxzICoqeCA9IDcqKg0Kd2VsbHMgdG8gc3RyaWtlIG9pbCAqKnIgPSAzKiogdGltZXM/DQoNCmBgYHtyfQ0KciA9IDMNCnAgPSAwLjIwDQpuID0gNyAtIHINCiMgZXhhY3QNCmRuYmlub20oeCA9IG4sIHNpemUgPSByLCBwcm9iID0gcCkNCmBgYA0KDQogDQpgYGB7cn0NCiMgc2ltdWxhdGVkDQpzZXQuc2VlZCgxKQ0KbWVhbihybmJpbm9tKG4gPSAxMDAwMDAwMCwgc2l6ZSA9IHIsIHByb2IgPSBwKSA9PSBuKQ0KDQpgYGANCg0KYGBge3J9DQoNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGdncGxvdDIpDQoNCmRhdGEuZnJhbWUoeCA9IDA6MTAsIHByb2IgPSBkbmJpbm9tKHggPSAwOjEwLCBzaXplID0gciwgcHJvYiA9IHApKSAlPiUNCiAgbXV0YXRlKEZhaWx1cmVzID0gaWZlbHNlKHggPT0gbiwgbiwgIm90aGVyIikpICU+JQ0KZ2dwbG90KGFlcyh4ID0gZmFjdG9yKHgpLCB5ID0gcHJvYiwgZmlsbCA9IEZhaWx1cmVzKSkgKw0KICBnZW9tX2NvbCgpICsNCiAgZ2VvbV90ZXh0KA0KICAgIGFlcyhsYWJlbCA9IHJvdW5kKHByb2IsMiksIHkgPSBwcm9iICsgMC4wMSksDQogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgwLjkpLA0KICAgIHNpemUgPSAzLA0KICAgIHZqdXN0ID0gMA0KICApICsNCiAgbGFicyh0aXRsZSA9ICJQcm9iYWJpbGl0eSBvZiByID0gMyBTdWNjZXNzZXMgaW4gWCA9IDcgVHJpYWxzIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJOQigzLC4yKSIsDQogICAgICAgeCA9ICJGYWlsZWQgVHJpYWxzIChYIC0gcikiLA0KICAgICAgIHkgPSAiUHJvYmFiaWxpdHkiKSANCg0KYGBgDQojRXhhbXBsZQ0KDQpXaGF0IGlzIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgdHJpYWxzIHRvIGFjaGlldmUgKipyID0gMyoqIHN1Y2Nlc3NlcyB3aGVuIHRoZSBwcm9iYWJpbGl0eSBvZiBzdWNjZXNzIGlzIHAgPSAqKjAuMioqID8NCg0KYGBge3J9DQpyID0gMw0KcCA9IDAuMjANCiMgbWVhbg0KIyBleGFjdA0KciAvIHANCmBgYA0KIyBzaW11bGF0ZWQNCmBgYHtyfQ0KbWVhbihybmJpbm9tKG4gPSAxMDAwMDAwLCBzaXplID0gMywgcHJvYiA9IHApKSArIHINCg0KYGBgDQoNCmBgYHtyfQ0KIyBWYXJpYW5jZQ0KIyBleGFjdA0KciAqICgxIC0gcCkgLyBwXjINCmBgYA0KIyBzaW11bGF0ZWQNCmBgYHtyfQ0KdmFyKHJuYmlub20obiA9IDEwMDAwMDAwLCBzaXplID0gciwgcHJvYiA9IHApKQ0KDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KDQpkYXRhLmZyYW1lKHggPSAxOjIwLCANCiAgICAgICAgICAgcG1mID0gZG5iaW5vbSh4ID0gMToyMCwgc2l6ZSA9IHIsIHByb2IgPSBwKSwNCiAgICAgICAgICAgY2RmID0gcG5iaW5vbShxID0gMToyMCwgc2l6ZSA9IHIsIHByb2IgPSBwLCBsb3dlci50YWlsID0gVFJVRSkpICU+JQ0KZ2dwbG90KGFlcyh4ID0gZmFjdG9yKHgpLCB5ID0gY2RmICwgZmlsbCA9IGNkZikpICsNCiAgZ2VvbV9jb2woKSArDQogIGdlb21fdGV4dCgNCiAgICBhZXMobGFiZWwgPSByb3VuZChjZGYsMiksIHkgPSBjZGYgKyAwLjAxKSwNCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKDAuOSksDQogICAgc2l6ZSA9IDMsDQogICAgdmp1c3QgPSAwDQogICkgKw0KICBsYWJzKHRpdGxlID0gIkN1bXVsYXRpdmUgUHJvYmFiaWxpdHkgb2YgWCA9IHggZmFpbGVkIHRyaWFscyB0byBhY2hpZXZlIDNyZCBzdWNjZXNzIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJOQigzLC4yKSIsDQogICAgICAgeCA9ICJGYWlsZWQgVHJpYWxzICh4KSIsDQogICAgICAgeSA9ICJwcm9iYWJpbGl0eSIpIA0KDQpgYGANCg0KI1F1ZXN0aW9uIA0KDQpZb3UgYXJlIHN1cnZleWluZyBwZW9wbGUgZXhpdGluZyBmcm9tIGEgcG9sbGluZyBib290aCBhbmQgYXNraW5nIHRoZW0gaWYgdGhleSB2b3RlZCBpbmRlcGVuZGVudC4gVGhlIHByb2JhYmlsaXR5IChwKSB0aGF0IGEgcGVyc29uIHZvdGVkIGluZGVwZW5kZW50IGlzIDIwJS4gV2hhdCBpcyB0aGUgcHJvYmFiaWxpdHkgdGhhdCA3MCBwZW9wbGUgbXVzdCBiZSBhc2tlZCBiZWZvcmUgeW91IGNhbiBmaW5kIDUgcGVvcGxlIHdobyB2b3RlZCBpbmRlcGVuZGVudD8NCg0KQ29kZTogV2UgdXNlIGRuYmlub20oeCwgc2l6ZSwgcHJvYikNCi0geD0gbnVtYmVyIG9mIGZhaWx1cmVzIHRoYXQgbmVlZCB0byBoYXBwZW4gYmVmb3JlIHJlYWNoaW5nIHRoZSByZXF1aXJlZCBudW1iZXIgb2Ygc3VjY2Vzc2VzLg0KDQotIHNpemU9IG51bWJlciBvZiBzdWNjZXNzZXMuDQoNCi0gcHJvYj0gdGhlIHByb2JhYmlsaXR5IG9mIHN1Y2Nlc3MgaW4gZWFjaCB0cmlhbC4gSW5maW5pdGUgYW5kIG1pc3NpbmcgdmFsdWVzIGFyZSBub3QgYWxsb3dlZC4NClRvIGFuc3dlciB0aGUgYWJvdmUgcXVlc3Rpb246DQoNCg0KDQpgYGB7cn0NCnAgPS4yDQpyID0gNSANCm4gPSA3MCAtNQ0KDQpkbmJpbm9tKHg9IGZhaWwsc2l6ZT0gciwgcHJvYiA9IHApDQoNCg0KYGBgDQpUbyBwbG90IHRoZSBwcm9iYWJpbGl0eSBtYXNzIGZ1bmN0aW9uIGZvciBhIG5lZ2F0aXZlIGJpbm9taWFsIGZ1bmN0aW9uIGluIFIsIHdlIGNhbiB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6DQoNCmBgYHtyfQ0KeCA8LSA2NQ0Kc2l6ZSA8LSA1DQpwcm9iID0gLjINCmRuYmlub20oeCwgc2l6ZSwgcHJvYikgIyBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgcHJvYmFiaWxpdHkgbWFzcyBmdW5jdGlvbg0KcGxvdCgwOngsIGRuYmlub20oMDp4LCBzaXplLCBwcm9iKSAsIHR5cGUgPSAnaCcpICMgdG8gcGxvdCB0aGUgcHJvYmFiaWxpdHkgbWFzcyBmdW5jdGlvbiwgc3BlY2lmeWluZyB0aGUgcGxvdCB0byBiZSBhIGhpc3RvZ3JhbSAodHlwZT3igJlo4oCZKQ0KDQoNCmBgYA0KDQoNCg0KIyBSZWZlcmFuY2UNCg0KPGh0dHBzOi8vcnB1YnMuY29tL21wZm9sZXk3My80NTg3Mzg+