Initial Description: Four Distribution Letters

The different probability distribution functions all start with one of the following 4 letters:

  1. d \(\rightarrow\) density: Find the probability for a specific value: \(P(Y=a)\)

  2. p \(\rightarrow\) Find the probability for the specific value and all values less than it (aka, cumulative probability): \(P(Y \le a)\)

  3. q \(\rightarrow\) quantile: Finds the smallest value of the random variable, \(a\), so that \(P(Y \le a) \ge p\)

  1. r \(\rightarrow\) generate a value of the random variable Y given the parameters

Poisson Distribution

The Poisson distribution is used for unbounded count data, similar to a negative binomial.

But it is often used when counting how often a certain outcome occurs during an event.

  • Number of eggs by a mosquito
  • Number of cars that pass through an intersection during rush hour
  • Number of customers at a drive-thru in a day

Unlike the other 3 distributions, a Poisson only has 1 parameter: The average number of occurrences during the event

  • 250 eggs laid on average
  • 1750 cars on averate during rush hour
  • 123 customers on a typical day

The parameter is often denoted by \(\lambda\), although the letter \(\mu\) is occasionally used since it is an average.

The equation to calculate the probability is:

\[P(Y = a) = \frac{\lambda^a}{a!} e^{-\lambda} \]

1) dpois()

dpois() has 2 arguments:

  1. x = the value of the random variable

  2. lambda = the mean of the Poisson distribution

Let’s look at an example with \(\lambda = 4\) and \(a = 5\).

# P(Y = 5 | lambda = 4)
lambda <- 4; a <- 5

# Manual probability:
lambda ^ a / gamma(a + 1) * exp(-lambda)
## [1] 0.1562935
# Using the function
dpois(x = 5, lambda = 4)
## [1] 0.1562935
# Let's look at values of 0 to 20 and find their probabilities
pois_df <- 
  tibble(
    Y = 0:20,
    `P(Y = a)` = dpois(x = Y, lambda = lambda)
    )

pois_df |> 
  round(digits = 4)
## # A tibble: 21 × 2
##        Y `P(Y = a)`
##    <dbl>      <dbl>
##  1     0     0.0183
##  2     1     0.0733
##  3     2     0.146 
##  4     3     0.195 
##  5     4     0.195 
##  6     5     0.156 
##  7     6     0.104 
##  8     7     0.0595
##  9     8     0.0298
## 10     9     0.0132
## # ℹ 11 more rows
ggplot(
  data = pois_df,
       mapping = aes(x = Y, y = `P(Y = a)`)
  ) + 
  
  geom_col(fill = "steelblue") + 
  
  labs(
    title = 'Poisson(lambda = 4)',
    x = "a",
       y = "P(Y = a)"
    ) +
  theme(plot.title = element_text(hjust = 0.5, size = 16)) +
  
  scale_y_continuous(expand = c(0, 0, 0.05, 0))

2) ppois()

ppois() is used to find \(P(Y \le a)\) or can be used to find \(P(Y > a)\) if lower = F is included

# P(Y <= 5 | lambda = 4)
ppois(q = 5, lambda = 4)
## [1] 0.7851304
# P(Y > 5 | lambda = 4)
ppois(q = 5, lambda = 4, lower = F)
## [1] 0.2148696
# P(Y >= 5 | lambda = 4)
ppois(q = 5 - 1, lambda = 4, lower = F)
## [1] 0.3711631
# adding the cumulative probabilities to the data frame
pois_df <- 
  pois_df |> 
  mutate(
    `P(Y <= a)` = ppois(q = Y, lambda = 4)
    )

pois_df |> 
  round(digits = 4)
## # A tibble: 21 × 3
##        Y `P(Y = a)` `P(Y <= a)`
##    <dbl>      <dbl>       <dbl>
##  1     0     0.0183      0.0183
##  2     1     0.0733      0.0916
##  3     2     0.146       0.238 
##  4     3     0.195       0.434 
##  5     4     0.195       0.629 
##  6     5     0.156       0.785 
##  7     6     0.104       0.889 
##  8     7     0.0595      0.949 
##  9     8     0.0298      0.979 
## 10     9     0.0132      0.992 
## # ℹ 11 more rows

3) qpois()

qpois() can be used to find the smallest \(a\) where \(P(Y \le a) \ge p\)

For instance, a drive-thru averages of 20 customers per hour. What is the 90th percentile for the number of customers in an hour?

qpois(p = 0.90, lambda = 20)
## [1] 26
# Let's look at the table of probabilities for Y with probability +-5% from 90%
tibble(
  Y = 10:30,
  `P(Y <= a)` = ppois(q = Y, lambda = 20)
  ) |> 
  
  filter(between(`P(Y <= a)`, 0.85, 0.95))
## # A tibble: 3 × 2
##       Y `P(Y <= a)`
##   <int>       <dbl>
## 1    25       0.888
## 2    26       0.922
## 3    27       0.948

So 25 is the 88.8th percentile and 26 is the 92.2nd percentile

4) rpois()

rpois() can be used to generate random Poisson variables with a certain mean, \(\lambda\)

# Generating 20 Poisson R.V. with lambda = 4
rpois(n = 20, lambda = 4)
##  [1]  3  5  3  3  4  4  1 10  3  8  4  3  2  5  2  4  1  0  6  7

Let’s generate 10,000 Poisson RVs and plot them:

N = 1e5
tibble(
  Y = rpois(n = N, lambda = 4)
  ) |> 
  
  # Counting how often each Y occurs
  count(Y) |> 
  
  # Creating the graph
  ggplot(
    mapping = aes(x = factor(Y), y = n/N)
  ) + 
  
  geom_col(fill = "steelblue") + 
  
  labs(
    x = "Randomly Generated Poisson",
       y = "Probability"
    ) + 
  
  scale_y_continuous(expand = c(0, 0, 0.05, 0))

LS0tDQp0aXRsZTogIlBvaXNzb24gRGlzdHJpYnV0aW9uIGluIFIiDQphdXRob3I6ICJDaGFwdGVyIDE6IFByb2JhYmlsaXR5IERpc3RyaWJ1dGlvbnMiDQpkYXRlOiAiU1RBIDQ1MDQiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgZmlnX3dpZHRoOiA2DQogICAgZmlnX2hlaWdodDogNg0KICAgIGZpZ19jYXB0aW9uOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IG5vDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgc21vb3RoX3Njcm9sbDogeWVzDQotLS0NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgZmlnLmFsaWduID0gJ2NlbnRlcicpDQoNCiMgTG9hZGluZyBpbiB0aGUgdGlkeXZlcnNlDQpwYWNtYW46OnBfbG9hZCh0aWR5dmVyc2UpDQoNCiMgQ2hhbmdpbmcgdGhlIGRlZmF1bHQgdGhlbWUgdG8gdGhlbWVfYncoKSB1c2luZyB0aGVtZV9zZXQoKQ0KdGhlbWVfc2V0KHRoZW1lX2J3KCkpDQoNCmBgYA0KDQoNCg0KIyMgSW5pdGlhbCBEZXNjcmlwdGlvbjogRm91ciBEaXN0cmlidXRpb24gTGV0dGVycw0KDQpUaGUgZGlmZmVyZW50IHByb2JhYmlsaXR5IGRpc3RyaWJ1dGlvbiBmdW5jdGlvbnMgYWxsIHN0YXJ0IHdpdGggb25lIG9mIHRoZSBmb2xsb3dpbmcgNCBsZXR0ZXJzOg0KDQoxKSBkICRccmlnaHRhcnJvdyQgZGVuc2l0eTogRmluZCB0aGUgcHJvYmFiaWxpdHkgZm9yIGEgc3BlY2lmaWMgdmFsdWU6ICAkUChZPWEpJA0KDQoyKSBwICRccmlnaHRhcnJvdyQgRmluZCB0aGUgcHJvYmFiaWxpdHkgZm9yIHRoZSBzcGVjaWZpYyB2YWx1ZSBhbmQgYWxsIHZhbHVlcyBsZXNzIHRoYW4gaXQgKGFrYSwgY3VtdWxhdGl2ZSBwcm9iYWJpbGl0eSk6ICRQKFkgXGxlIGEpJA0KDQozKSBxICRccmlnaHRhcnJvdyQgcXVhbnRpbGU6IEZpbmRzIHRoZSBzbWFsbGVzdCB2YWx1ZSBvZiB0aGUgcmFuZG9tIHZhcmlhYmxlLCAkYSQsIHNvIHRoYXQgJFAoWSBcbGUgYSkgXGdlIHAkDQogIC0gSXQncyBiYXNpY2FsbHkgcCBpbiByZXZlcnNlOiBJZiB3ZSBrbm93IHRoZSBwcm9iYWJpbGl0eSwgd2hhdCBpcyB0aGUgdmFsdWUgb2YgdGhlIHJhbmRvbSB2YXJpYWJsZT8NCg0KNCkgciAkXHJpZ2h0YXJyb3ckIGdlbmVyYXRlIGEgdmFsdWUgb2YgdGhlIHJhbmRvbSB2YXJpYWJsZSBZIGdpdmVuIHRoZSBwYXJhbWV0ZXJzDQoNCg0KDQoNCg0KIyMjIFBvaXNzb24gRGlzdHJpYnV0aW9uIA0KDQpUaGUgUG9pc3NvbiBkaXN0cmlidXRpb24gaXMgdXNlZCBmb3IgdW5ib3VuZGVkIGNvdW50IGRhdGEsIHNpbWlsYXIgdG8gYSBuZWdhdGl2ZSBiaW5vbWlhbC4gDQoNCkJ1dCBpdCBpcyBvZnRlbiB1c2VkIHdoZW4gY291bnRpbmcgaG93IG9mdGVuIGEgY2VydGFpbiBvdXRjb21lIG9jY3VycyBkdXJpbmcgYW4gZXZlbnQuDQoNCi0gTnVtYmVyIG9mIGVnZ3MgYnkgYSBtb3NxdWl0bw0KLSBOdW1iZXIgb2YgY2FycyB0aGF0IHBhc3MgdGhyb3VnaCBhbiBpbnRlcnNlY3Rpb24gZHVyaW5nIHJ1c2ggaG91cg0KLSBOdW1iZXIgb2YgY3VzdG9tZXJzIGF0IGEgZHJpdmUtdGhydSBpbiBhIGRheQ0KDQpVbmxpa2UgdGhlIG90aGVyIDMgZGlzdHJpYnV0aW9ucywgYSBQb2lzc29uIG9ubHkgaGFzIDEgcGFyYW1ldGVyOiBUaGUgYXZlcmFnZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgZHVyaW5nIHRoZSBldmVudA0KDQotIDI1MCBlZ2dzIGxhaWQgb24gYXZlcmFnZQ0KLSAxNzUwIGNhcnMgb24gYXZlcmF0ZSBkdXJpbmcgcnVzaCBob3VyDQotIDEyMyBjdXN0b21lcnMgb24gYSB0eXBpY2FsIGRheQ0KDQpUaGUgcGFyYW1ldGVyIGlzIG9mdGVuIGRlbm90ZWQgYnkgJFxsYW1iZGEkLCBhbHRob3VnaCB0aGUgbGV0dGVyICRcbXUkIGlzIG9jY2FzaW9uYWxseSB1c2VkIHNpbmNlIGl0IGlzIGFuIGF2ZXJhZ2UuDQoNClRoZSBlcXVhdGlvbiB0byBjYWxjdWxhdGUgdGhlIHByb2JhYmlsaXR5IGlzOg0KDQokJFAoWSA9IGEpID0gXGZyYWN7XGxhbWJkYV5hfXthIX0gZV57LVxsYW1iZGF9ICQkDQoNCg0KIyMjIDEpIGBkcG9pcygpYA0KDQpgZHBvaXMoKWAgaGFzIDIgYXJndW1lbnRzOg0KDQoxKSBgeCA9IGAgdGhlIHZhbHVlIG9mIHRoZSByYW5kb20gdmFyaWFibGUNCg0KMikgYGxhbWJkYSA9IGAgdGhlIG1lYW4gb2YgdGhlIFBvaXNzb24gZGlzdHJpYnV0aW9uDQoNCkxldCdzIGxvb2sgYXQgYW4gZXhhbXBsZSB3aXRoICRcbGFtYmRhID0gNCQgYW5kICRhID0gNSQuDQoNCmBgYHtyIGRwb2lzfQ0KIyBQKFkgPSA1IHwgbGFtYmRhID0gNCkNCmxhbWJkYSA8LSA0OyBhIDwtIDUNCg0KIyBNYW51YWwgcHJvYmFiaWxpdHk6DQpsYW1iZGEgXiBhIC8gZ2FtbWEoYSArIDEpICogZXhwKC1sYW1iZGEpDQoNCg0KIyBVc2luZyB0aGUgZnVuY3Rpb24NCmRwb2lzKHggPSA1LCBsYW1iZGEgPSA0KQ0KDQoNCiMgTGV0J3MgbG9vayBhdCB2YWx1ZXMgb2YgMCB0byAyMCBhbmQgZmluZCB0aGVpciBwcm9iYWJpbGl0aWVzDQpwb2lzX2RmIDwtIA0KICB0aWJibGUoDQogICAgWSA9IDA6MjAsDQogICAgYFAoWSA9IGEpYCA9IGRwb2lzKHggPSBZLCBsYW1iZGEgPSBsYW1iZGEpDQogICAgKQ0KDQpwb2lzX2RmIHw+IA0KICByb3VuZChkaWdpdHMgPSA0KQ0KDQoNCmdncGxvdCgNCiAgZGF0YSA9IHBvaXNfZGYsDQogICAgICAgbWFwcGluZyA9IGFlcyh4ID0gWSwgeSA9IGBQKFkgPSBhKWApDQogICkgKyANCiAgDQogIGdlb21fY29sKGZpbGwgPSAic3RlZWxibHVlIikgKyANCiAgDQogIGxhYnMoDQogICAgdGl0bGUgPSAnUG9pc3NvbihsYW1iZGEgPSA0KScsDQogICAgeCA9ICJhIiwNCiAgICAgICB5ID0gIlAoWSA9IGEpIg0KICAgICkgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBzaXplID0gMTYpKSArDQogIA0KICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLCAwLCAwLjA1LCAwKSkNCg0KDQoNCmBgYA0KDQoNCiMjIyAyKSBgcHBvaXMoKWANCg0KYHBwb2lzKClgIGlzIHVzZWQgdG8gZmluZCAkUChZIFxsZSBhKSQgb3IgY2FuIGJlIHVzZWQgdG8gZmluZCAkUChZID4gYSkkIGlmIGBsb3dlciA9IEZgIGlzIGluY2x1ZGVkDQoNCmBgYHtyIHBwb2lzfQ0KIyBQKFkgPD0gNSB8IGxhbWJkYSA9IDQpDQpwcG9pcyhxID0gNSwgbGFtYmRhID0gNCkNCg0KIyBQKFkgPiA1IHwgbGFtYmRhID0gNCkNCnBwb2lzKHEgPSA1LCBsYW1iZGEgPSA0LCBsb3dlciA9IEYpDQoNCiMgUChZID49IDUgfCBsYW1iZGEgPSA0KQ0KcHBvaXMocSA9IDUgLSAxLCBsYW1iZGEgPSA0LCBsb3dlciA9IEYpDQoNCiMgYWRkaW5nIHRoZSBjdW11bGF0aXZlIHByb2JhYmlsaXRpZXMgdG8gdGhlIGRhdGEgZnJhbWUNCnBvaXNfZGYgPC0gDQogIHBvaXNfZGYgfD4gDQogIG11dGF0ZSgNCiAgICBgUChZIDw9IGEpYCA9IHBwb2lzKHEgPSBZLCBsYW1iZGEgPSA0KQ0KICAgICkNCg0KcG9pc19kZiB8PiANCiAgcm91bmQoZGlnaXRzID0gNCkNCmBgYA0KDQoNCg0KIyMjIDMpIGBxcG9pcygpYA0KDQpgcXBvaXMoKWAgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgc21hbGxlc3QgJGEkIHdoZXJlICRQKFkgXGxlIGEpIFxnZSBwJA0KDQpGb3IgaW5zdGFuY2UsIGEgZHJpdmUtdGhydSBhdmVyYWdlcyBvZiAyMCBjdXN0b21lcnMgcGVyIGhvdXIuIFdoYXQgaXMgdGhlIDkwdGggcGVyY2VudGlsZSBmb3IgdGhlIG51bWJlciBvZiBjdXN0b21lcnMgaW4gYW4gaG91cj8NCg0KYGBge3IgcXBvaXN9DQpxcG9pcyhwID0gMC45MCwgbGFtYmRhID0gMjApDQoNCiMgTGV0J3MgbG9vayBhdCB0aGUgdGFibGUgb2YgcHJvYmFiaWxpdGllcyBmb3IgWSB3aXRoIHByb2JhYmlsaXR5ICstNSUgZnJvbSA5MCUNCnRpYmJsZSgNCiAgWSA9IDEwOjMwLA0KICBgUChZIDw9IGEpYCA9IHBwb2lzKHEgPSBZLCBsYW1iZGEgPSAyMCkNCiAgKSB8PiANCiAgDQogIGZpbHRlcihiZXR3ZWVuKGBQKFkgPD0gYSlgLCAwLjg1LCAwLjk1KSkNCg0KDQpgYGANCg0KU28gMjUgaXMgdGhlIDg4Ljh0aCBwZXJjZW50aWxlIGFuZCAyNiBpcyB0aGUgOTIuMm5kIHBlcmNlbnRpbGUNCg0KDQoNCg0KDQojIyMgNCkgYHJwb2lzKClgDQoNCmBycG9pcygpYCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSByYW5kb20gUG9pc3NvbiB2YXJpYWJsZXMgd2l0aCBhIGNlcnRhaW4gbWVhbiwgJFxsYW1iZGEkDQoNCmBgYHtyIHJwb2lzfQ0KIyBHZW5lcmF0aW5nIDIwIFBvaXNzb24gUi5WLiB3aXRoIGxhbWJkYSA9IDQNCnJwb2lzKG4gPSAyMCwgbGFtYmRhID0gNCkNCmBgYA0KDQoNCkxldCdzIGdlbmVyYXRlIDEwLDAwMCBQb2lzc29uIFJWcyBhbmQgcGxvdCB0aGVtOg0KDQpgYGB7cn0NCk4gPSAxZTUNCnRpYmJsZSgNCiAgWSA9IHJwb2lzKG4gPSBOLCBsYW1iZGEgPSA0KQ0KICApIHw+IA0KICANCiAgIyBDb3VudGluZyBob3cgb2Z0ZW4gZWFjaCBZIG9jY3Vycw0KICBjb3VudChZKSB8PiANCiAgDQogICMgQ3JlYXRpbmcgdGhlIGdyYXBoDQogIGdncGxvdCgNCiAgICBtYXBwaW5nID0gYWVzKHggPSBmYWN0b3IoWSksIHkgPSBuL04pDQogICkgKyANCiAgDQogIGdlb21fY29sKGZpbGwgPSAic3RlZWxibHVlIikgKyANCiAgDQogIGxhYnMoDQogICAgeCA9ICJSYW5kb21seSBHZW5lcmF0ZWQgUG9pc3NvbiIsDQogICAgICAgeSA9ICJQcm9iYWJpbGl0eSINCiAgICApICsgDQogIA0KICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLCAwLCAwLjA1LCAwKSkNCmBgYA0KDQoNCg0KDQoNCg0K