
Modified Poisson Regression Inference for Incidence Responses
Source:R/inference_incidence_modified_poisson.R
InferenceIncidModifiedPoisson.RdFits Zou's (2004) modified Poisson regression for binary (incidence)
responses: \(\log E[Y_i \mid w_i, x_i] = \beta_0 + \beta_T w_i +
x_i^\top \gamma\), fit by maximizing the ordinary Poisson log-likelihood
treating the binary \(Y_i\) as if it were Poisson-distributed (a valid
estimating equation for the conditional mean regardless of the true
outcome distribution, exactly as
InferencePropFractionalLogit's
quasi-binomial fit is for fractional responses). \(\hat\beta_T\) is a
log risk ratio: \(\exp(\hat\beta_T)\) is the estimated treatment
relative risk, the same estimand as
InferenceIncidLogBinomial's
log-binomial model, but modified Poisson never produces a fit failure from
the \([0,1]\)-probability constraint that a genuine binomial log-link
model can hit. Caveat: this implementation's standard error comes
from the ordinary (model-based) Poisson Fisher information
(fast_poisson_regression_with_var_cpp's ssq_b_j), not
a robust/sandwich correction — Zou's (2004) original proposal specifically
pairs the misspecified Poisson working model with a robust sandwich
variance estimator to obtain valid standard errors under the resulting
overdispersion; users needing the fully robust modified-Poisson variance
should treat this class's standard errors/CIs/p-values as approximate.
likelihood_tier = "full" metadata is set for component-composition
purposes, but private$supports_likelihood_tests() is hard
FALSE — only Wald inference is exposed
(get_supported_testing_types_impl() returns "wald" only), not
likelihood-ratio/score/gradient tests. Fits with implausible coefficients
or fitted linear predictors (checked via
private$is_modified_poisson_fit_reasonable(), capped by
max_abs_reasonable_coef/max_abs_reasonable_linear_predictor)
are cached as nonestimable rather than returned.
References
Zou, G. (2004). "A Modified Poisson Regression Approach to Prospective Studies with Binary Data." American Journal of Epidemiology, 159(7), 702-706, doi:10.1093/aje/kwh090 .
See also
InferenceIncidLogBinomial
for the genuine log-binomial alternative with the same log-risk-ratio
estimand. Comparable Python API:
statsmodels
discrete models (Poisson family on binary data). See also:
Poisson
regression (Wikipedia).
Super class
Inference -> InferenceIncidModifiedPoisson
Methods
Public methods
+ inherited public methods from Inference
Inference$capabilities()Inference$compute_asymp_confidence_interval()Inference$compute_asymp_two_sided_pval()Inference$compute_estimate()Inference$compute_exact_confidence_interval()Inference$compute_exact_two_sided_pval_for_treatment_effect()Inference$duplicate()Inference$get_analysis_data()Inference$get_covariates()Inference$get_design_object()Inference$get_model_formula()Inference$get_nonestimable_reason()Inference$get_nonestimable_stage()Inference$get_optimization_alg()Inference$get_response()Inference$get_response_type()Inference$get_treatment()Inference$initialize()Inference$is_nonestimable()Inference$set_optimization_alg()Inference$set_seed()Inference$supports()
Examples
# \donttest{
seq_des = DesignSeqOneByOneBernoulli$new(n = 10, response_type = 'incidence')
for (i in 1:10) {
seq_des$add_one_subject_to_experiment_and_assign(data.frame(x1 = rnorm(1)))
}
seq_des$add_all_subject_responses(rbinom(10, 1, 0.5))
inf = InferenceIncidModifiedPoisson$new(seq_des)
inf$compute_estimate()
#> [1] -0.004776953
# }