Computes z-scores accounting for sampling variability using de Moivre's
equation. This normalizes observed values by their expected standard error.
Usage
funnel_zscore(observed, expected, sample_size, type = c("count", "proportion"))
Arguments
- observed
Numeric vector of observed counts or rates
- expected
Numeric vector of expected values (e.g., from base rate)
- sample_size
Numeric vector of sample sizes (e.g., population)
- type
Type of data: "count" (Poisson) or "proportion" (binomial)
Value
Numeric vector of z-scores
Details
For count data (Poisson), SE = sqrt(expected).
For proportion data (binomial), SE = sqrt(p * (1-p) / n).
Larger sample sizes result in smaller standard errors, so the same
deviation is more "surprising" for larger samples.
Examples
# Observed crimes vs expected (from overall rate)
observed <- c(50, 100, 150)
expected <- c(45, 95, 160)
sample_size <- c(10000, 50000, 100000)
funnel_zscore(observed, expected, sample_size, type = "count")
#> [1] 0.7453560 0.5129892 -0.7905694