
Probit Regression Inference for Incidence Responses
Source:R/inference_incidence_probit.R
InferenceIncidProbitRegr.RdFits a probit regression model for binary (incidence) responses:
\(\Phi^{-1}(P(Y_i = 1)) = \beta_0 + \beta_T W_i + X_i^\top \gamma\),
where \(\Phi\) is the standard normal CDF, \(W_i\) is the treatment
indicator, and \(X_i\) are optional recorded covariates, by maximum
likelihood (fast_probit_regression_cpp/
fast_probit_regression_weighted_cpp). Unlike
InferenceIncidLogRegr's logit
link, \(\hat\beta_T\) here is not an odds-ratio scale parameter: it is
the treatment's additive effect on the latent standard-normal index
underlying the binary outcome. 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. A fit whose coefficients exceed
max_abs_reasonable_coef in magnitude (a proxy for near-perfect
separation) is cached as nonestimable rather than returned. Validity
requires the usual probit assumptions: correctly specified linear
predictor on the latent-normal scale, independence across subjects
conditional on covariates, and no perfect/quasi-complete separation.
References
McCullagh, P., and Nelder, J. A. (1989). Generalized Linear Models (2nd ed.). Chapman and Hall/CRC, for the binomial GLM family and probit link.
See also
InferenceIncidLogRegr
for the logit-link alternative with a log-odds-ratio estimand.
Comparable Python API:
statsmodels GLM
(family=Binomial(link=probit())). See also:
Probit model
(Wikipedia).
Super class
Inference -> InferenceIncidProbitRegr
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 = InferenceIncidProbitRegr$new(seq_des)
inf$compute_estimate()
#> [1] 0.7042166
# }