
Log-Binomial Regression Inference for Incidence Responses
Source:R/inference_incidence_log_binomial.R
InferenceIncidLogBinomial.RdFits a binomial regression with the log link for binary
(incidence) responses: \(\log P(Y_i = 1) = \beta_0 + \beta_T W_i +
X_i^\top \gamma\), where \(W_i\) is the treatment indicator and \(X_i\)
are optional recorded covariates, by maximum likelihood
(fast_log_binomial_regression_cpp/
fast_log_binomial_regression_weighted_cpp). \(\hat\beta_T\)
is a log risk ratio: \(\exp(\hat\beta_T)\) is the estimated
treatment risk ratio (relative risk) directly, unlike the log-odds-ratio
from InferenceIncidLogRegr's logit
link. likelihood_tier = "full": Wald, score, gradient, and
likelihood-ratio tests are all available when the model converges, plus
parametric-likelihood-bootstrap calibration of the likelihood-ratio test.
Because the log link does not constrain fitted probabilities to
\([0,1]\) (only to \([0,\infty)\)), fits are hardened by QR
column-dropping and a coefficient-magnitude cap
(max_abs_reasonable_coef) and rejected as nonestimable when the fit
is implausible — the same practical limitation as the identity-link
sibling
InferenceIncidBinomialIdentityRiskDiff, here applying to the upper rather
than both tails of the probability scale. Validity requires the
multiplicative log-linear risk model to be correctly specified over the
covariate range observed.
References
McCullagh, P., and Nelder, J. A. (1989). Generalized Linear Models (2nd ed.). Chapman and Hall/CRC, for the binomial GLM family and log-link relative-risk parameterization.
See also
InferenceIncidLogRegr
(logit link, log-odds-ratio estimand),
InferenceIncidBinomialIdentityRiskDiff (identity link, risk-difference
estimand) for alternative link/estimand choices on the same response
type. Comparable Python API:
statsmodels GLM
(family=Binomial(link=log())). See also:
Generalized
linear model (Wikipedia).
Super class
Inference -> InferenceIncidLogBinomial
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 = InferenceIncidLogBinomial$new(seq_des)
inf$compute_estimate()
#> [1] NA
# }