Skip to contents

Fits 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


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_obj

A completed Design object with a count response.

model_formula

Optional formula for the count submodel.

model_formula_zero

Formula for the zero-inflation submodel. If NULL (default), it uses the same formula as model_formula.

use_rcpp

Logical. If TRUE (default), use our internal Rcpp implementation. If FALSE, use glmmTMB.

verbose

Whether to print progress messages.

optimization_alg

Optimization 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.

Usage

InferenceCountZeroInflatedPoisson$compute_estimate(estimate_only = FALSE)

Arguments

estimate_only

If TRUE, skip standard-error computation and cache only the point estimate; used by randomization and bootstrap resampling paths.


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.

Usage

InferenceCountZeroInflatedPoisson$compute_asymp_confidence_interval(
  alpha = 0.05
)

Arguments

alpha

The significance level (default 0.05).


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.

Usage

InferenceCountZeroInflatedPoisson$compute_asymp_two_sided_pval(delta = 0)

Arguments

delta

The null treatment effect under the current estimand (default 0).


InferenceCountZeroInflatedPoisson$clone()

The objects of this class are cloneable with this method.

Usage

InferenceCountZeroInflatedPoisson$clone(deep = FALSE)

Arguments

deep

Whether to make a deep clone.

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
# }