
Zero-Inflated Poisson Regression Inference for Count Responses
Source:R/inference_count_zero_inflated.R
InferenceCountZeroInflatedPoisson.RdFits a zero-inflated Poisson regression for count responses: a binary
excess-zero submodel \(P(\text{structural zero}_i) =
\mathrm{logit}^{-1}(X_i^{h\top} \gamma^h)\) mixed with a (non-truncated)
Poisson count submodel \(\log E[Y_i \mid \text{not structural zero},
w_i, x_i] = \beta_0 + \beta_T w_i + x_i^\top \gamma\). Unlike a hurdle
model, zero counts can arise from either the structural-zero mechanism or
from an ordinary Poisson draw of \(0\), so the two mixture components are
not identified by disjoint support. The hurdle and count submodels may use
different covariate formulas (model_formula/model_formula_zero).
The reported treatment effect is the coefficient from the conditional count
component, on the log-rate scale, conditional on the response
coming from the count process, not the excess-zero-inflation mechanism:
it is not the effect on the unconditional mean \(E[Y]\), which also
depends on how treatment shifts the excess-zero probability, under the
default estimand = "conditional". likelihood_tier = "full":
Wald, gradient, and (bootstrap-calibrated) likelihood-ratio tests are
available for the count submodel's treatment coefficient under that
estimand; a plain score test is not exposed. Jackknife inference
is not supported: delete-one refits of this two-part mixture model are
numerically unstable, so compute_jackknife_estimate() and related
methods report explicit non-estimability rather than attempting
delete-one refits.
Marginal (unconditional-mean) estimand. Via
set_estimand(), this class
also supports estimand = "marginal_mean_diff" and
"marginal_ratio": the g-computation average, over the empirical
covariate distribution, of the model-implied unconditional mean
\(E[Y_i \mid w_i, x_i] = (1 - \pi(x_i)) \lambda(x_i)\) (the untruncated
Poisson mean weighted by the non-structural-zero probability) at
\(w_i = 1\) vs. \(w_i = 0\) — a mean difference or, on the log scale,
a mean ratio. This is a pure post-fit transform of the same maximum-
likelihood fit (no refit), with a delta-method standard error computed
against the sandwich-robust covariance matrix already used for this
class's conditional Wald inference. Only "wald"-type inference is
available under a marginal estimand (no likelihood-ratio/score/gradient
test, since the marginal quantity is a functional of the fitted
parameters, not itself a likelihood).
References
Lambert, D. (1992). "Zero-Inflated Poisson Regression, with an Application to Defects in Manufacturing." Technometrics, 34(1), 1-14, doi:10.2307/1269547 , for the zero-inflated count-model framework.
See also
InferenceCountPoisson for
the single-part Poisson model this class's count submodel generalizes;
InferenceCountHurdlePoisson
for the related hurdle (disjoint-support) variant;
InferenceCountZeroInflatedNegBin
for the overdispersion-robust negative-binomial variant (does not
support a marginal estimand — the mean-function derivation here is
Poisson-specific).
Super classes
Inference -> InferenceCountZeroAugmentedPoissonAbstract -> InferenceCountZeroInflatedPoisson
Methods
+ inherited public methods from InferenceCountZeroAugmentedPoissonAbstract
InferenceCountZeroAugmentedPoissonAbstract$approximate_bayesian_bootstrap_distribution_beta_hat_T()InferenceCountZeroAugmentedPoissonAbstract$approximate_bootstrap_distribution_beta_hat_T()InferenceCountZeroAugmentedPoissonAbstract$approximate_jackknife_distribution_beta_hat_T()InferenceCountZeroAugmentedPoissonAbstract$approximate_m_out_of_n_bootstrap_distribution_beta_hat_T()InferenceCountZeroAugmentedPoissonAbstract$approximate_rand_bootstrap_distribution_beta_hat_T()InferenceCountZeroAugmentedPoissonAbstract$approximate_randomization_distribution_beta_hat_T()InferenceCountZeroAugmentedPoissonAbstract$approximate_subsampling_distribution_beta_hat_T()InferenceCountZeroAugmentedPoissonAbstract$compute_bayesian_bootstrap_confidence_interval()InferenceCountZeroAugmentedPoissonAbstract$compute_bayesian_bootstrap_two_sided_pval()InferenceCountZeroAugmentedPoissonAbstract$compute_bootstrap_confidence_interval()InferenceCountZeroAugmentedPoissonAbstract$compute_bootstrap_two_sided_pval()InferenceCountZeroAugmentedPoissonAbstract$compute_estimate_with_bootstrap_weights()InferenceCountZeroAugmentedPoissonAbstract$compute_gradient_confidence_interval()InferenceCountZeroAugmentedPoissonAbstract$compute_gradient_two_sided_pval()InferenceCountZeroAugmentedPoissonAbstract$compute_jackknife_bias_estimate()InferenceCountZeroAugmentedPoissonAbstract$compute_jackknife_estimate()InferenceCountZeroAugmentedPoissonAbstract$compute_jackknife_std_error()InferenceCountZeroAugmentedPoissonAbstract$compute_jackknife_wald_confidence_interval()InferenceCountZeroAugmentedPoissonAbstract$compute_jackknife_wald_two_sided_pval()InferenceCountZeroAugmentedPoissonAbstract$compute_lik_ratio_bartlett_approx_confidence_interval()InferenceCountZeroAugmentedPoissonAbstract$compute_lik_ratio_bartlett_approx_two_sided_pval()InferenceCountZeroAugmentedPoissonAbstract$compute_lik_ratio_bartlett_confidence_interval()InferenceCountZeroAugmentedPoissonAbstract$compute_lik_ratio_bartlett_exact_confidence_interval()InferenceCountZeroAugmentedPoissonAbstract$compute_lik_ratio_bartlett_exact_two_sided_pval()InferenceCountZeroAugmentedPoissonAbstract$compute_lik_ratio_bartlett_two_sided_pval()InferenceCountZeroAugmentedPoissonAbstract$compute_lik_ratio_bootstrap_confidence_interval()InferenceCountZeroAugmentedPoissonAbstract$compute_lik_ratio_bootstrap_two_sided_pval()InferenceCountZeroAugmentedPoissonAbstract$compute_lik_ratio_confidence_interval()InferenceCountZeroAugmentedPoissonAbstract$compute_lik_ratio_two_sided_pval()InferenceCountZeroAugmentedPoissonAbstract$compute_m_out_of_n_bootstrap_confidence_interval()InferenceCountZeroAugmentedPoissonAbstract$compute_m_out_of_n_bootstrap_two_sided_pval()InferenceCountZeroAugmentedPoissonAbstract$compute_param_bootstrap_confidence_interval()InferenceCountZeroAugmentedPoissonAbstract$compute_param_bootstrap_estimate()InferenceCountZeroAugmentedPoissonAbstract$compute_param_bootstrap_pval()InferenceCountZeroAugmentedPoissonAbstract$compute_rand_bootstrap_confidence_interval()InferenceCountZeroAugmentedPoissonAbstract$compute_rand_bootstrap_two_sided_pval()InferenceCountZeroAugmentedPoissonAbstract$compute_rand_confidence_interval()InferenceCountZeroAugmentedPoissonAbstract$compute_rand_two_sided_pval()InferenceCountZeroAugmentedPoissonAbstract$compute_score_confidence_interval()InferenceCountZeroAugmentedPoissonAbstract$compute_score_two_sided_pval()InferenceCountZeroAugmentedPoissonAbstract$compute_subsampling_confidence_interval()InferenceCountZeroAugmentedPoissonAbstract$compute_subsampling_sensitivity()InferenceCountZeroAugmentedPoissonAbstract$compute_subsampling_two_sided_pval()InferenceCountZeroAugmentedPoissonAbstract$compute_wald_confidence_interval()InferenceCountZeroAugmentedPoissonAbstract$compute_wald_two_sided_pval()InferenceCountZeroAugmentedPoissonAbstract$get_information_preference()InferenceCountZeroAugmentedPoissonAbstract$get_information_source_used()InferenceCountZeroAugmentedPoissonAbstract$get_last_param_bootstrap_diagnostics()InferenceCountZeroAugmentedPoissonAbstract$get_last_param_bootstrap_estimate_diagnostics()InferenceCountZeroAugmentedPoissonAbstract$get_mod()InferenceCountZeroAugmentedPoissonAbstract$get_summary()InferenceCountZeroAugmentedPoissonAbstract$get_supported_bayesian_bootstrap_ci_types()InferenceCountZeroAugmentedPoissonAbstract$get_supported_bayesian_bootstrap_pval_types()InferenceCountZeroAugmentedPoissonAbstract$get_supported_bootstrap_ci_types()InferenceCountZeroAugmentedPoissonAbstract$get_supported_bootstrap_pval_types()InferenceCountZeroAugmentedPoissonAbstract$get_supported_information_preferences()InferenceCountZeroAugmentedPoissonAbstract$get_supported_rand_bootstrap_ci_types()InferenceCountZeroAugmentedPoissonAbstract$get_supported_rand_bootstrap_pval_types()InferenceCountZeroAugmentedPoissonAbstract$get_supported_testing_types()InferenceCountZeroAugmentedPoissonAbstract$get_testing_type()InferenceCountZeroAugmentedPoissonAbstract$select_optimal_b_subsampling()InferenceCountZeroAugmentedPoissonAbstract$select_optimal_m_out_of_n_bootstrap()InferenceCountZeroAugmentedPoissonAbstract$set_custom_randomization_statistic_cpp()InferenceCountZeroAugmentedPoissonAbstract$set_custom_randomization_statistic_function()InferenceCountZeroAugmentedPoissonAbstract$set_information_preference()InferenceCountZeroAugmentedPoissonAbstract$set_testing_type()InferenceCountZeroAugmentedPoissonAbstract$supports_rand_pval_for_incidence()+ inherited public methods from Inference
Inference$capabilities()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$is_nonestimable()Inference$set_optimization_alg()Inference$set_seed()Inference$supports()
InferenceCountZeroInflatedPoisson$new()
Initialize inference for the zero-inflated Poisson model
(binary excess-zero submodel mixed with a Poisson count submodel); see
InferenceCountZeroInflatedPoisson
for the model form. Does not fit the model; the fit is deferred to the
first call to compute_estimate() or a method that requires it.
Usage
InferenceCountZeroInflatedPoisson$new(
des_obj,
model_formula = NULL,
model_formula_zero = NULL,
use_rcpp = TRUE,
verbose = FALSE,
optimization_alg = NULL
)Arguments
des_objA completed
Designobject with a count response.model_formulaOptional formula for the count submodel.
model_formula_zeroFormula for the zero-inflation submodel. If
NULL(default), it uses the same formula asmodel_formula.use_rcppLogical. If
TRUE(default), use our internal Rcpp implementation. IfFALSE, use glmmTMB.verboseWhether to print progress messages.
optimization_algOptimization algorithm. Default is dispatched via policy.
InferenceCountZeroInflatedPoisson$compute_estimate()
Fits the zero-inflated Poisson model. Under the default
estimand = "conditional", returns \(\hat\beta_T\), the
treatment log-rate coefficient from the conditional count submodel
(see the class-level caveat that this is conditional on the response
coming from the count process, not an unconditional-mean effect).
Under estimand = "marginal_mean_diff" or
"marginal_ratio" (set via set_estimand()), returns the
g-computation marginal mean difference or log-scale marginal ratio
of the unconditional mean \(E[Y \mid w, x] = (1-\pi(x))\lambda(x)\)
instead — a pure post-fit transform of the same cached fit, no refit.
InferenceCountZeroInflatedPoisson$compute_asymp_confidence_interval()
Asymptotic confidence interval. Under the conditional
estimand, delegates to the shared zero-augmented count-model Wald/
bootstrap-fallback contract; under a marginal estimand, the
delta-method interval computed by compute_estimate(). Calls
self$compute_estimate() first (not private$shared()
directly) so the estimand-aware cache is always current regardless
of call order.
InferenceCountZeroInflatedPoisson$compute_asymp_two_sided_pval()
Asymptotic two-sided p-value, dispatched exactly as
compute_asymp_confidence_interval(); see that method's
description for the marginal-estimand path.
Examples
# \donttest{
seq_des = DesignSeqOneByOneBernoulli$new(n = 10, response_type = 'count')
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(rpois(10, 2))
inf = InferenceCountZeroInflatedPoisson$new(seq_des)
inf$compute_estimate()
#> [1] -0.1042125
# }