
One-Likelihood Conditional-Poisson Inference for KK Count Designs
Source:R/inference_count_KK_cond_poisson.R
InferenceCountKKCondPoissonOneLik.RdEstimates a treatment log-rate-ratio \(\beta_T\) for count outcomes
collected under a KK matching-on-the-fly design
(DesignSeqOneByOneKK14 or
subclass) by maximizing a single combined likelihood that couples a
conditional (within-matched-pair, intercept-free) Poisson likelihood for
matched subjects with an ordinary Poisson likelihood for reservoir
subjects, sharing one treatment coefficient across both pieces. This is
the "one-likelihood" alternative to the inverse-variance-weighted
combination
(...IVWC pattern used
elsewhere in the KK family): rather than fitting matched and reservoir
models separately and pooling by inverse-variance weights, the treatment
coefficient here is estimated jointly from the full combined
log-likelihood, and its standard error, score, likelihood-ratio, and
gradient statistics are all "design-conservative" – each is the
pointwise-wider of the model-based asymptotic quantity and a
design-based quantity computed by treating the estimate as a plug-in
statistic under InferenceAsymp's
\(z\)/\(t\) machinery, so inference never overstates precision
relative to the design alone.
Details
Estimand. \(\beta_T\), the treatment coefficient in a log-linear (Poisson) mean model \(E[Y \mid w, x] = \exp(\beta_0 + \beta_T w + x\beta)\), interpreted as a log rate ratio (equivalently, \(\exp(\hat\beta_T)\) is the treatment-vs-control incidence rate ratio).
Model. Matched subjects contribute a conditional-Poisson term
that eliminates the pair-specific nuisance intercept by conditioning on
the pair total count (removing the need to estimate one intercept per
pair); reservoir subjects contribute an ordinary Poisson log-likelihood
with a single shared intercept. Both pieces are summed into one
combined negative log-likelihood and maximized jointly in
\((\beta_0, \beta_T, \beta)\) (see get_cpoisson_combined_hessian_cpp
and fast_cpoisson_combined_with_var_cpp for the backend fitting
contract). likelihood_tier = "full", so likelihood-ratio, score,
and gradient tests and a parametric likelihood bootstrap are all
available in addition to the design-conservative Wald path.
Assumptions. Independence of counts across matched pairs and
reservoir subjects given covariates; correct log-linear mean
specification; a KK matching-on-the-fly design supplying the
matched/reservoir partition. No response censoring is supported (checked
at construction via assertNoCensoring()).
References
Kapelner, A. and Krieger, A. (2014). "Matching on-the-fly: A group
sequential covariate balanced randomization procedure." arXiv
preprint arXiv:1305.6259. (KK14 in REFERENCES.md.)
See also
Analogous Python API for count models:
statsmodels
discrete models (ConditionalPoisson, Poisson).
Poisson
regression (orientation).
Super class
Inference -> InferenceCountKKCondPoissonOneLik
Methods
Public methods
InferenceCountKKCondPoissonOneLik$set_custom_randomization_statistic_function()InferenceCountKKCondPoissonOneLik$set_custom_randomization_statistic_cpp()InferenceCountKKCondPoissonOneLik$approximate_randomization_distribution_beta_hat_T()InferenceCountKKCondPoissonOneLik$supports_rand_pval_for_incidence()InferenceCountKKCondPoissonOneLik$compute_rand_two_sided_pval()
+ 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()