Poisson Regression — IRR for count outcomes (auto-flags overdispersion)

Verified

Advanced & specialized

Independently verified. Every statistic this test reports has been re-derived against an independent reference — never the library the pipeline itself calls — the rendered output was read back in a browser, and the result is locked with a committed regression suite.

Run this test straight away on a free built-in teaching dataset — no data of your own needed — or bring your own. Either opens the guided workspace: variable setup, assumption diagnostics, results with effect sizes and confidence intervals, figures, and APA-ready reporting.

Loading teaching datasets…

Or use your own dataset

Loading your datasets…

Models a count outcome (non-negative integers) as a function of predictors via the Poisson GLM with log link: log(μ) = β₀ + Σ β_i x_i.

Reports per-predictor incidence rate ratios (IRR = exp(β)) with 95% CI, model fit (deviance, Pearson χ², log-likelihood, AIC, BIC, deviance-based pseudo-R²), and a Pearson dispersion check that auto-flags overdispersion (variance >> mean) and recommends negative-binomial regression as the appropriate next step. Optional exposure offset (person-years, person-time) to model rates rather than raw counts.

Worked example

Does a safety programme reduce workplace-accident counts?

Monthly accident counts across 60 site-months were modelled on programme status (on/off) with Poisson regression; effects read as incidence-rate ratios.

Result

The programme cut the accident rate by 34% (IRR = 0.66, 95% CI [0.51, 0.85], p = .002).

How you'd report it (APA)

A Poisson regression showed the safety programme significantly reduced accident counts, IRR = 0.66, 95% CI [0.51, 0.85], p = .002.

Try it yourself: Load this ready-made sample and follow the run above.

When to use it

  • Event counts per case (equidispersed)
    ED visits per patient per year (n = 5000) ~ age + chronic conditions + insurance status + offset(log(person-years)).
  • Rate modelling with exposure offset
    Insurance claims per policyholder ~ vehicle-age + driver-age + region + offset(log(policy-years)).

When NOT to — use instead

Hypotheses

H₀: β_j = 0 for all predictors (equivalently IRR_j = 1).
Hₐ: at least one β_j ≠ 0.

Parameter tested: vector of population log-rate coefficients β

Assumptions (and what to do if they fail)

Conditional variance ≈ conditional mean (Poisson dispersion = 1). When variance >> mean (overdispersion), Poisson SEs are anti-conservative.high

Check: Pearson dispersion ratio.

If violated: Overdispersion → SEs are too small → spuriously significant predictors.

Observed zero count rate matches Poisson expectation. Excess zeros suggest a separate zero-generating process (zero-inflated Poisson).medium

Check: Observed vs expected zero proportion.

If violated: Excess zeros (e.g., observed 30% zeros vs Poisson-expected 10%) → fit zero-inflated or hurdle model.

No single case dominates the fit (Cook's D for Poisson GLM).high

Check: Max Cook's D.

If violated: Influential cases can flip IRR signs.

VIF for each predictor is moderate (< 5 preferred; < 10 tolerable).medium

Check: Max VIF.

If violated: High VIF inflates IRR standard errors.

Ready to run a Poisson Regression — IRR for count outcomes (auto-flags overdispersion) on your own data?

Guided setup, automatic assumption checks, effect sizes, figures and an APA write-up.

Run this test →