Method for glm that tests for data separation and finds which parameters have infinite maximum likelihood estimates in generalized linear models with binomial responses
detect_separation
is a method for glm
that tests for the occurrence of complete or quasi-complete
separation in datasets for binomial response generalized linear
models, and finds which of the parameters will have infinite
maximum likelihood estimates. detect_separation
relies on the linear programming methods developed in Konis (2007).
detect_separation( x, y, weights = rep(1, nobs), start = NULL, etastart = NULL, mustart = NULL, offset = rep(0, nobs), family = gaussian(), control = list(), intercept = TRUE, singular.ok = TRUE ) detectSeparation( x, y, weights = rep(1, nobs), start = NULL, etastart = NULL, mustart = NULL, offset = rep(0, nobs), family = gaussian(), control = list(), intercept = TRUE, singular.ok = TRUE )
x |
|
y |
|
weights |
an optional vector of ‘prior weights’ to be used
in the fitting process. Should be |
start |
currently not used. |
etastart |
currently not used. |
mustart |
currently not used. |
offset |
this can be used to specify an a priori known
component to be included in the linear predictor during fitting.
This should be |
family |
a description of the error distribution and link
function to be used in the model. For |
control |
a list of parameters controlling separation
detection. See |
intercept |
logical. Should an intercept be included in the null model? |
singular.ok |
logical. If |
For the definition of complete and quasi-complete separation, see Albert and Anderson (1984).
detect_separation
is a wrapper to the separator
function from the **safeBinaryRegression** R package, that can be
passed directly as a method to the glm
function. See,
examples.
The interface to separator
was designed by Ioannis Kosmidis
after correspondence with Kjell Konis, and a port of
separator
has been included in **brglm2** under the
permission of Kjell Konis.
detectSeparation
is an alias for detect_separation
.
detect_separation
will be removed from brglm2 at
version 0.8. A new version of detect_separation
is now
maintained in the detectseparation R package at
https://cran.r-project.org/package=detectseparation. In order
to use the version in detect_separation
load first
brglm2 and then detectseparation, i.e.
library(brglm2); library(detectseparation)
.
Ioannis Kosmidis [aut, cre] ioannis.kosmidis@warwick.ac.uk, Kjell Konis [ctb] kjell.konis@me.com
Konis K (2007). *Linear Programming Algorithms for Detecting Separated Data in Binary Logistic Regression Models*. DPhil. University of Oxford. https://ora.ox.ac.uk/objects/uuid:8f9ee0d0-d78e-4101-9ab4-f9cbceed2a2a
Konis K (2013). safeBinaryRegression: Safe Binary Regression. R package version 0.1-3. https://CRAN.R-project.org/package=safeBinaryRegression
Kosmidis I, Firth D (2020). Jeffreys-prior penalty, finiteness and shrinkage in binomial-response generalized linear models. *Biometrika* doi: 10.1093/biomet/asaa052
## endometrial data from Heinze \& Schemper (2002) (see ?endometrial) data("endometrial", package = "brglm2") endometrial_sep <- glm(HG ~ NV + PI + EH, data = endometrial, family = binomial("logit"), method = "detect_separation") endometrial_sep ## The maximum likelihood estimate for NV is infinite summary(update(endometrial_sep, method = "glm.fit")) ## Not run: ## Example inspired by unpublished microeconometrics lecture notes by ## Achim Zeileis https://eeecon.uibk.ac.at/~zeileis/ ## The maximum likelihood estimate of sourhernyes is infinite data("MurderRates", package = "AER") murder_sep <- glm(I(executions > 0) ~ time + income + noncauc + lfp + southern, data = MurderRates, family = binomial(), method = "detect_separation") murder_sep ## which is also evident by the large estimated standard error for NV murder_glm <- update(murder_sep, method = "glm.fit") summary(murder_glm) ## and is also reveal by the divergence of the NV column of the ## result from the more computationally intensive check check_infinite_estimates(murder_glm) ## Mean bias reduction via adjusted scores results in finite estimates update(murder_glm, method = "brglm_fit") ## End(Not run)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.