Poisson Rate Confidence Interval
Menu locations:
Analysis_Rates_Poisson Rate CI;
Analysis_Exact_Poisson Rate CI.
Uncommon events in populations, such as the occurrence of specific diseases, are usefully modelled using a Poisson distribution. A common application of Poisson confidence intervals is to incidence rates of diseases (Gail and Benichou, 2000; Rothman and Greenland, 1998; Selvin, 1996).
The incidence rate is estimated as the number of events observed divided by the time at risk of event during the observation period.
Technical validation
Exact Poisson confidence limits for the estimated rate are found as the Poisson means, for distributions with the observed number of events and probabilities relevant to the chosen confidence level, divided by time at risk. The relationship between the Poisson and chi-square distributions is employed here (Ulm, 1990):
- where Y is the observed number of events, Yl and Yu are lower and upper confidence limits for Y respectively, χ2ν,a is the chi-square quantile for lower tail probability a on ν degrees of freedom.
Example
Say that 14 events are observed in 200 people studied for 1 year and 100 people studied for 2 years.
The person time at risk is 200 + 100 x 2 = 400 person years
For this example:
Events observed = 14
Time spent at risk of event = 400
Poisson (e.g. incidence) rate estimate = 0.035
Exact 95% confidence interval = 0.019135 to 0.058724
Here we can say with 95% confidence that the true population incidence rate for this event lies between 0.02 and 0.06 events per person year.
See also incidence rate comparisons
R code
This R code reproduces the example above. It needs no packages and was checked with R 4.6.1. Paste it into R, or save it as a script and run it.
# Poisson rate confidence interval: the StatsDirect help example (14 events in 400
# person-years of observation, an incidence rate) in R
events <- 14
time_at_risk <- 400 # 200 people for 1 year and 100 for 2 years
# poisson.test gives the exact limits for the rate (a whole number of events), the
# same as the chi-square quantile formulae above: its estimate is events / time
print(poisson.test(events, time_at_risk, conf.level = 0.95))
# The report's lines to 6 places. The limits are also the Poisson means whose
# cumulative probabilities reach the tails: qgamma(alpha / 2, events) and
# qgamma(1 - alpha / 2, events + 1), divided by the time at risk. With no events the
# lower limit is 0.
six <- function(x) formatC(x, digits = 6, format = "f", drop0trailing = TRUE)
alpha <- 0.05
rate <- events / time_at_risk
lower <- if (events == 0) 0 else qgamma(alpha / 2, events) / time_at_risk
upper <- qgamma(1 - alpha / 2, events + 1) / time_at_risk
cat("Events observed =", events, "\n")
cat("Time spent at risk of event =", time_at_risk, "\n")
cat("Poisson (e.g. incidence) rate estimate =", six(rate), "\n")
cat("Exact 95% confidence interval =", six(lower), "to", six(upper), "\n")