
KK Hurdle-Poisson Combined-Likelihood Inference for Count Responses
Source:R/inference_count_KK_cond_poisson.R
InferenceCountKKHurdlePoissonOneLik.RdFits a two-part hurdle-Poisson model to a KK matching-on-the-fly count
design by maximizing a single combined likelihood over the matched pairs
and reservoir subjects jointly, rather than fitting matched and reservoir
submodels separately and combining them afterward (contrast with the
inverse-variance-weighted-combination sibling,
InferenceCountKKHurdlePoissonIVWC).
Computes the randomization distribution of the treatment effect estimate under the sharp null.
Whether compute_rand_two_sided_pval() is actually
usable on this instance right now – FALSE exactly when it
would stop(): an incidence-response instance with no
custom randomization statistic and a design not eligible for
design-randomization-based incidence inference (see
private$should_use_design_randomization_for_incidence()).
TRUE for every other case, including every non-incidence
response type. Public, self-contained (only reads already-set
instance state, no side effects), so InferenceSuite can
check this before attempting the sentinel instead of relying on
the stop() being silently swallowed into a pval = NA
"ok" row – the single source of truth for both this check and
compute_rand_two_sided_pval()'s own guard, so the two can
never drift apart.
Computes a randomization-based p-value.
Value
When debug = FALSE (default), a numeric vector of length r. When
debug = TRUE, a list with: values, errors (list of character
vectors, one per iteration), warnings (list of character vectors, one per
iteration), num_errors, num_warnings,
prop_iterations_with_errors, prop_iterations_with_warnings, and
prop_illegal_values.
A single logical.
Randomization p-value.
Details
Model. For subject \(i\) with count response \(Y_i \ge 0\), a
hurdle model factors the likelihood into (1) a binary zero-vs-positive part
\(P(Y_i = 0) = 1 - \pi_i\), \(\mathrm{logit}(\pi_i) = X_i'\gamma\), and
(2) a zero-truncated Poisson part for the positive counts,
\(Y_i \mid Y_i > 0 \sim \text{Poisson}_{+}(\lambda_i)\),
\(\log \lambda_i = X_i'\beta + \beta_T W_i\), where \(W_i\) is the
treatment indicator and \(\beta_T\) is the treatment log-rate coefficient
for the positive-count submodel (the estimand returned by
compute_estimate()). Unlike a standard hurdle model fit by maximum
likelihood on i.i.d. rows, this class's negative log-likelihood combines
the matched-pair rows and reservoir rows of a KK design into one objective
(see private$fit_combined_hurdle()), so the fitted \(\beta_T\)
and its curvature already reflect the design's matched/reservoir
structure rather than treating all subjects as exchangeable.
Likelihood tier. likelihood_tier = "full": Wald, score,
likelihood-ratio, and gradient testing types are all available (see
get_testing_type()). Because a hurdle-Poisson combined likelihood
does not by itself encode the KK design's finite-sample matched-pair
randomization distribution, the score/likelihood-ratio/gradient
confidence intervals and p-values are computed twice — once from this
class's design-aware asymptotic variance (the same Wald-type calculation
used by compute_wald_confidence_interval()) and once from the
generic likelihood-based calculation inherited from
InferenceAsympLik — and the wider
interval / larger p-value of the two is returned (see
.conservative_kk_onelik_ci()/.conservative_kk_onelik_pval()),
so the model-based test is never anti-conservative relative to the design.
The Wald confidence interval and p-value fall back to the
BayesianBootstrap component's
bootstrap distribution when the model-based standard error is unavailable
or non-finite (e.g. a boundary/separation fit).
Assumptions. Independence across matched pairs and reservoir
subjects conditional on covariates; correct specification of the
logistic hurdle and log-linear positive-count submodels; a KK
matching-on-the-fly design (DesignSeqOneByOneKK14
or subclass) supplying the matched/reservoir partition. No response
censoring is supported (checked at construction via
assertNoCensoring()).
References
Mullahy, J. (1986). "Specification and Testing of Some Modified Count
Data Models." Journal of Econometrics, 33(3), 341-365.
doi:10.1016/0304-4076(86)90002-3
. (Mullahy1986 in REFERENCES.md.)
See also
Analogous Python API for hurdle/zero-truncated count models:
statsmodels
discrete models (HurdleCountModel).
Poisson
regression (orientation).
Super class
Inference -> InferenceCountKKHurdlePoissonOneLik
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()
InferenceCountKKHurdlePoissonOneLik$approximate_randomization_distribution_beta_hat_T()
Usage
InferenceCountKKHurdlePoissonOneLik$approximate_randomization_distribution_beta_hat_T(
r = 501,
delta = 0,
transform_responses = "none",
show_progress = TRUE,
permutations = NULL,
debug = FALSE,
zero_one_logit_clamp = .Machine$double.eps
)Arguments
rNumber of randomization vectors. Default 501.
rNumber of randomization vectors.
deltaThe null difference. Default 0.
deltaNull difference.
transform_responsesType of transformation. Default "none".
transform_responsesTransformation.
show_progressShow progress bar. Default TRUE.
show_progressShow progress.
permutationsPre-computed permutations. Default NULL.
permutationsPre-computed permutations.
debugIf
TRUE, return a list with the distribution values and per-iteration diagnostics including error messages, warning messages, counts of each, and summary proportions for iterations with errors, warnings, and illegal (non-finite) values. Runs serially. DefaultFALSE.zero_one_logit_clampThe clamping amount for exact 0 and 1 values when logging
zero_one_logit_clampThe clamping amount for exact 0 and 1 values when logging
InferenceCountKKHurdlePoissonOneLik$compute_rand_two_sided_pval()
Usage
InferenceCountKKHurdlePoissonOneLik$compute_rand_two_sided_pval(
r = 501,
delta = 0,
transform_responses = "none",
na.rm = TRUE,
show_progress = TRUE,
permutations = NULL,
zero_one_logit_clamp = .Machine$double.eps
)Arguments
rNumber of randomization vectors. Default 501.
rNumber of randomization vectors.
deltaThe null difference. Default 0.
deltaNull difference.
transform_responsesType of transformation. Default "none".
transform_responsesTransformation.
na.rmRemove NAs.
show_progressShow progress bar. Default TRUE.
show_progressShow progress.
permutationsPre-computed permutations. Default NULL.
permutationsPre-computed permutations.
zero_one_logit_clampThe clamping amount for exact 0 and 1 values when logging
zero_one_logit_clampThe clamping amount for exact 0 and 1 values when logging