
Fractional Logit Inference for Proportion Responses
Source:R/inference_proportion_fractional_logit.R
InferencePropFractionalLogit.RdFits Papke and Wooldridge's (1996) fractional logistic (quasi-binomial)
regression for proportion responses \(Y_i \in [0, 1]\) (not restricted to
\(\{0, 1\}\)):
\(E[Y_i \mid w_i, x_i] = \mathrm{logit}^{-1}(\beta_0 + \beta_T w_i +
x_i^\top \gamma)\), fit by maximizing the Bernoulli quasi-log-likelihood
\(\sum_i \{Y_i \log \mu_i + (1 - Y_i) \log(1 - \mu_i)\}\) treating
\(Y_i\) as if it were binary (a valid estimating equation for the
conditional mean even though \(Y_i\) is fractional — the Bernoulli
log-likelihood's score is unbiased for the true mean regardless of the
actual distribution of \(Y_i\) on \([0,1]\)). \(\hat\beta_T\) is a
log-odds-ratio on the conditional-mean scale: \(\exp(\hat\beta_T)\) is
the odds ratio for the expected proportion. Standard errors use the
model-based (non-robust/non-sandwich) Fisher information from this
quasi-likelihood, matching pre-migration behavior; only Wald inference is
exposed (private$supports_likelihood_tests() is hard FALSE
here even though likelihood_tier = "full" metadata is set for
component-composition purposes — this class deliberately does not compose
ParametricLikelihoodBootstrap, so no likelihood-ratio/score/gradient
test surface is exposed). Validity requires that the conditional mean is
correctly specified on the logit scale; unlike beta regression, no
assumption is made about the conditional variance or shape of \(Y_i\)'s
distribution.
References
Papke, L. E., and Wooldridge, J. M. (1996). "Econometric Methods for Fractional Response Variables with an Application to 401(K) Plan Participation Rates." Journal of Applied Econometrics, 11(6), 619-632, doi:10.1002/(SICI)1099-1255(199611)11:6<619::AID-JAE418>3.0.CO;2-1 .
See also
InferencePropBetaRegr for
a proportion model that also specifies the conditional variance/shape.
Comparable Python API:
statsmodels GLM
(family=Binomial() on fractional response data). See also:
Logistic
regression (Wikipedia).
Super class
Inference -> InferencePropFractionalLogit
Methods
+ inherited public methods from Inference
Inference$capabilities()Inference$compute_asymp_confidence_interval()Inference$compute_asymp_two_sided_pval()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$is_nonestimable()Inference$set_optimization_alg()Inference$set_seed()Inference$supports()
InferencePropFractionalLogit$new()
Initialize inference for the fractional logit model
\(E[Y_i \mid w_i, x_i] = \mathrm{logit}^{-1}(\beta_0 + \beta_T w_i +
x_i^\top \gamma)\); see
InferencePropFractionalLogit
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
InferencePropFractionalLogit$new(
des_obj,
model_formula = NULL,
verbose = FALSE,
harden = TRUE,
smart_cold_start_default = NULL
)Arguments
des_objA completed
Designobject with a proportion response.model_formulaOptional formula for covariate adjustment. If
NULL(default), the formula from the design object is used and its pre-computed design matrix is reused. If a formula is provided, a new design matrix is constructed from the design's imputed covariates.verboseWhether to print progress messages.
hardenWhether to apply robustness measures.
smart_cold_start_defaultWhether to use smart cold start values.
InferencePropFractionalLogit$compute_estimate()
Fits the fractional logit model by maximizing the Bernoulli
quasi-log-likelihood on the fractional response and returns the
log-odds-ratio estimate \(\hat\beta_T\). When estimate_only =
TRUE and hardening is disabled (harden = FALSE), uses a fast
path via base R's glm.fit(family = quasibinomial()) instead of
the package's own fitting routine; otherwise dispatches through the
shared hardened-fit path.
Arguments
estimate_onlyIf TRUE, skip variance component calculations; when combined with
harden = FALSE, also switches to thequasibinomial()fast path.
InferencePropFractionalLogit$compute_estimate_with_bootstrap_weights()
Refits the fractional logit model with subject/block-level
weights applied to the fitting quasi-log-likelihood (Bayesian-bootstrap
or nonparametric-bootstrap draw weights, expanded to row level via
private$expand_subject_or_block_weights_to_row_weights()), and
returns the reweighted estimate \(\hat\beta_T^{(w)}\). Uses the same
QR column-dropping hardening as compute_estimate()'s hardened
path; a hardened-but-still-unreasonable fit is cached as nonestimable.
Examples
# \donttest{
seq_des = DesignSeqOneByOneBernoulli$new(n = 10, response_type = 'proportion')
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(runif(10))
inf = InferencePropFractionalLogit$new(seq_des)
inf$compute_estimate()
#> [1] -1.681686
# }