¿Por qué es que la regresión logística se vuelve inestable cuando las clases están bien separados? Qué bien separada de las clases media? Yo realmente apreciaría si alguien puede explicar con un ejemplo.
Respuestas
¿Demasiados anuncios?No es correcto que la regresión logística en sí mismo se vuelve inestable cuando hay separación. La separación significa que hay algunas variables que son muy buenos predictores, lo cual es bueno, o bien, la separación puede ser un artefacto de muy pocas observaciones/demasiadas variables. Si ese es el caso, la solución podría ser la de obtener más datos. Pero la separación en sí, entonces, es sólo un síntoma, y no un problema en sí mismo.
Así que no son muy diferentes de los casos a tratar. En primer lugar, ¿cuál es el objetivo de los análisis? Si el resultado final del análisis es que algunos la clasificación de los casos, la separación no es problema en absoluto, realmente significa que hay muy buenas las variables dando muy buena clasificación. Pero si el objetivo es la estimación del riesgo, necesitamos que las estimaciones de los parámetros, y con la separación de la habitual mle (máxima verosimilitud) estima que no existen. Así que debemos cambiar método de estimación, tal vez. Hay varias propuestas en la literatura, voy a volver a eso.
Entonces hay (como dijeron arriba) dos diferentes posibles causas de la separación. Podría ser la separación en el total de la población, o la separación puede ser causado por los pocos casos observados/demasiadas variables.
Lo que rompe con la separación, es el de máxima verosimilitud, el procedimiento de estimación. El mle estimaciones de los parámetros (o al menos algunos de ellos) se convierte en infinito. Me dijo que en la primera versión de esta respuesta que puede ser resuelto fácilmente, tal vez con el "bootstrapping", pero que no funciona, ya no habrá separación en cada uno de remuestreo bootstrap, al menos con la costumbre de los casos de arranque procedimiento. Pero la regresión logística es todavía un modelo válido, pero necesitamos algún otro procedimiento de estimación. Algunas propuestas han sido:
- de regularización, como ridge o lazo, tal vez combinado con bootstrap.
- exacto regresión logística condicional.
- pruebas de permutación, ver https://www.ncbi.nlm.nih.gov/pubmed/15515134
- Firths sesgo reducido procedimiento de estimación, véase el modelo de regresión Logística no converge
- seguramente otros ...
Si utiliza R, hay un paquete en CRAN, SafeBinaryRegression
, lo que ayuda a diagnosticar problemas con la separación, matemáticos mediante la optimización de los métodos de verificación para asegurarse de si hay una separación o quasiseparation! En la siguiente me va a dar una simulación de ejemplo de uso de este paquete, y el elrm
paquete por el valor aproximado de regresión logística condicional.
En primer lugar, un ejemplo sencillo con el safeBinaryRegression
paquete. Este paquete sólo redefine el glm
función, la sobrecarga con una prueba de la separación, el uso de métodos de programación lineal. Si se detecta la separación, se sale con una condición de error, declarando que el mle no existe. De lo contrario, simplemente ejecuta el ordinario glm
función de stats
. El ejemplo es de sus páginas de ayuda:
library(safeBinaryRegression) # Some testing of that package,
# based on its examples
# complete separation:
x <- c(-2, -1, 1, 2)
y <- c(0, 0, 1, 1)
glm(y ~ x, family=binomial)
glm(y ~ x, family=binomial, separation="test")
stats::glm(y~ x, family=binomial)
# Quasicomplete separation:
x <- c(-2, 0, 0, 2)
y <- c(0, 0, 1, 1)
glm(y ~ x, family=binomial)
glm(y ~ x, family=binomial, separation="test")
stats::glm(y~ x, family=binomial)
El resultado de la ejecución:
> # complete separation:
> x <- c(-2, -1, 1, 2)
> y <- c(0, 0, 1, 1)
> glm(y ~ x, family=binomial)
Error in glm(y ~ x, family = binomial) :
The following terms are causing separation among the sample points: (Intercept), x
> glm(y ~ x, family=binomial, separation="test")
Error in glm(y ~ x, family = binomial, separation = "test") :
Separation exists among the sample points.
This model cannot be fit by maximum likelihood.
> stats::glm(y~ x, family=binomial)
Call: stats::glm(formula = y ~ x, family = binomial)
Coefficients:
(Intercept) x
-9.031e-08 2.314e+01
Degrees of Freedom: 3 Total (i.e. Null); 2 Residual
Null Deviance: 5.545
Residual Deviance: 3.567e-10 AIC: 4
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred
> # Quasicomplete separation:
> x <- c(-2, 0, 0, 2)
> y <- c(0, 0, 1, 1)
> glm(y ~ x, family=binomial)
Error in glm(y ~ x, family = binomial) :
The following terms are causing separation among the sample points: x
> glm(y ~ x, family=binomial, separation="test")
Error in glm(y ~ x, family = binomial, separation = "test") :
Separation exists among the sample points.
This model cannot be fit by maximum likelihood.
> stats::glm(y~ x, family=binomial)
Call: stats::glm(formula = y ~ x, family = binomial)
Coefficients:
(Intercept) x
5.009e-17 9.783e+00
Degrees of Freedom: 3 Total (i.e. Null); 2 Residual
Null Deviance: 5.545
Residual Deviance: 2.773 AIC: 6.773
Ahora podemos simular a partir de un modelo que puede ser de cerca de forma aproximada mediante un modelo logístico, salvo que por encima de una determinada frecuencia de corte de la probabilidad de eventos es exactamente 1.0. Pensar acerca de un bioensayo problema, pero por encima de la frecuencia de corte el veneno siempre mata:
pl <- function(a, b, x) 1/(1+exp(-a-b*x))
a <- 0
b <- 1.5
x_cutoff <- uniroot(function(x) pl(0,1.5,x)-0.98,lower=1,upper=3.5)$root
### circa 2.6
pltrue <- function(a, b, x) ifelse(x < x_cutoff, pl(a, b, x), 1.0)
x <- -3:3
### Let us simulate many times from this model, and try to estimate it
### with safeBinaryRegression::glm That way we can estimate the probability
### of separation from this model
set.seed(31415926) ### May I have a large container of coffee
replications <- 1000
p <- pltrue(a, b, x)
err <- 0
good <- 0
for (i in 1:replications) {
y <- rbinom(length(x), 1, p)
res <- try(glm(y~x, family=binomial), silent=TRUE)
if (inherits(res,"try-error")) err <- err+1 else good <- good+1
}
P_separation <- err/replications
P_separation
Cuando se ejecuta este código, se estima la probabilidad de separación como 0.759. Ejecutar el código, es rápido!
A continuación, extendemos este código para probar diferentes estimaciones de los procedimientos, mle y de aproximación de regresión logística condicional de elrm. Ejecuta esta simulación toma alrededor de 40 minutos en mi equipo.
library(elrm) # from CRAN
set.seed(31415926) ### May I have a large container of coffee
replications <- 1000
GOOD <- numeric(length=replications) ### will be set to one when MLE exists!
COEFS <- matrix(as.numeric(NA), replications, 2)
COEFS.elrm <- matrix(as.numeric(NA), replications, 2) # But we'll only use second col for x
p <- pltrue(a, b, x)
err <- 0
good <- 0
for (i in 1:replications) {
y <- rbinom(length(x), 1, p)
res <- try(glm(y~x, family=binomial), silent=TRUE)
if (inherits(res,"try-error")) err <- err+1 else{ good <- good+1
GOOD[i] <- 1 }
# Using stats::glm
mod <- stats::glm(y~x, family=binomial)
COEFS[i, ] <- coef(mod)
# Using elrm:
DATASET <- data.frame(x=x, y=y, n=1)
mod.elrm <- elrm(y/n ~ x, interest= ~ x -1, r=4, iter=10000, burnIn=1000,
dataset=DATASET)
COEFS.elrm[i, 2 ] <- mod.erlm$coeffs
}
### Now we can compare coefficient estimates of x,
### when there are separation, and when not:
non <- which(GOOD==1)
cof.mle.non <- COEFS[non, 2, drop=TRUE]
cof.mle.sep <- COEFS[-non, 2, drop=TRUE]
cof.elrm.non <- COEFS.elrm[non, 2, drop=TRUE]
cof.elrm.sep <- COEFS.elrm[-non, 2, drop=TRUE]
Ahora queremos representar los resultados, pero antes de eso, tenga en cuenta que TODAS las estimaciones condicionales son iguales! Esto es realmente extraño y necesita una explicación ... El valor común es 0.9523975. Pero al menos hemos obtenido finito estimaciones, con intervalos de confianza que contiene el valor verdadero (no se muestra aquí). Así que sólo voy a mostrar un histograma de la mle estimaciones en los casos sin separación:
hist(cof.mle.non, prob=TRUE)
[
Lo que es notable es que todas las estimaciones es menor que el verdadero valor de 1.5. Que tienen que ver con el hecho de que la simulación de un modelo modificado, necesidades de investigación.
Hay buenas respuestas de @sean501 y @kjetilbhalvorsen. Usted pidió un ejemplo. Considere la siguiente figura. Usted puede venir a través de algunas de las situaciones en que los datos de proceso de generación es como la representada en el panel de Una. Si es así, es muy posible que los datos que se reúnen en realidad se parecen a los del panel B. Ahora, cuando el uso de datos para construir un modelo estadístico, la idea es recuperar la verdadera generadora de datos de proceso o, al menos, una aproximación que está razonablemente cerca. Por lo tanto, la pregunta es, ¿el ajuste de una regresión logística a los datos en B el rendimiento de un modelo que se aproxima a la línea azul en Una? Si usted mira en el panel C, se puede ver que la línea gris más se aproxima a los datos de la verdadera función, por lo que en la búsqueda del mejor ajuste, la regresión logística se "prefiere" para volver a la línea gris en lugar de azul. No se detiene allí, sin embargo. Busca en el panel D, la línea negra se aproxima a los datos mejor que el de color gris—de hecho, es el mejor que podía ocurrir. Así que esa es la línea del modelo de regresión logística se persigue. Corresponde a una intercepción de infinito negativo y una pendiente del infinito. Que es, por supuesto, muy lejos de la verdad que ustedes son la esperanza de recuperar. La completa separación también puede causar problemas con el cálculo de los p-valores de las variables que vienen de serie con la regresión logística de salida (la explicación no es un poco diferente y más complicada). Por otra parte, tratando de combinar el ajuste aquí con otros intentos, por ejemplo, con un meta-análisis, se acaba de hacer los otros resultados menos precisos.
Esto significa que hay un hyperplane tal que en un lado están todos los puntos positivos, y en el otro lado todo lo negativo. El máximo de probabilidad de la solución es entonces plana 1 en un lado y tv de 0 en otro lado, que es 'lograr' con la función logística por tener los coeficientes en el infinito.
Lo que usted llama la "separación" (no de "separación") abarca dos situaciones diferentes que terminan causando el mismo problema – que yo no lo llamaría, sin embargo, de una cuestión de "inestabilidad" como se hace.
Una ilustración: la Supervivencia en el Titanic
-
Deje $DV \in (0, 1)$ ser binaria variable dependiente, y $SV$ una separación, la variable independiente.
Supongamos que $SV$ es la clase de los pasajeros del Titanic, y que $DV$ indica si sobrevivían a los restos de la aeronave, con $0$, lo que indica la muerte y $1$, lo que indica la supervivencia.
-
La separación completa es la situación en la $SV$ predice todos los valores de $DV$.
Ese sería el caso si todos los pasajeros de la clase en el Titanic había sobrevivido a la destrucción, y ninguno de los de segunda clase a los pasajeros había sobrevivido.
-
Cuasi-separación completa es la situación en la $SV$ predice bien de todos los casos de $DV = 0$, o todos los casos en que $DV = 1$, pero no tanto.
Ese sería el caso si algunos de los primeros pasajeros de la clase en el Titanic había sobrevivido a la destrucción, y ninguno de los de segunda clase a los pasajeros había sobrevivido. En ese caso, los pasajeros de la clase $SV$ predice todos los casos en que $DV = 1$, pero no todos los casos de $DV = 0$.
Por el contrario, si sólo algunos de segunda pasajeros de la clase en el Titanic había muerto en los escombros, luego de pasajeros de la clase $SV$ predice todos los casos en que $DV = 0$, pero no todos los casos de $DV = 1$, que incluye tanto las de primera clase y de segunda clase a los pasajeros.
Lo que se llama "bien separada de las clases" es la situación en la que un resultado binario variable $DV$ (por ejemplo, la supervivencia en el Titanic) pueden ser completamente o casi completamente mapeado a un predictor $SV$ (por ejemplo, los pasajeros de la clase de pertenencia; $SV$ no necesita ser binario como en mi ejemplo).
¿Por qué es la regresión logística "inestable" en estos casos?
Esto está bien explicado en Rainey 2016 y Zorn 2005.
-
En virtud de la separación completa, su modelo logístico va a buscar una curva logística que asigna, por ejemplo, todas las probabilidades de $DV$ $1$al $SV = 1$, y todas las probabilidades a $DV$ $0$al $SV = 0$.
Esto corresponde a la situación anterior, donde sólo el y todos los de primera clase de pasajeros del Titanic sobrevivir, con $SV = 1$, lo que indica pasajero de primera clase de membresía.
Esto es problemático porque la curva logística se encuentra estrictamente entre el$0$$1$, lo que significa que, para el modelo a los datos observados, la maximización va a empujar a algunos de sus términos hacia el infinito, en fin, si te gusta, para hacer de $SV$ "infinitamente" predicción de $DV$.
El mismo problema surge en virtud de cuasi-separación completa, como la curva logística todavía tendrá que asignar sólo los valores de $0$ o $1$ $DV$en uno de dos casos, $SV = 0$ o $SV = 1$.
En ambos casos, la probabilidad función de su modelo será incapaz de encontrar una estimación de máxima verosimilitud: sólo podrá encontrar una aproximación de este valor al que se acercan asintóticamente.
Lo que usted llama "inestabilidad" es el hecho de que, en los casos de completa o casi completa de la separación, no hay finito de probabilidad para el modelo logístico para llegar. Yo no usaría ese término, sin embargo: la probabilidad de la función es, de hecho, está bastante "estable" (monótona) en su asignación de valores del coeficiente de hacia el infinito.
Nota: el ejemplo es ficción. La supervivencia en el Titanic no se reducen sólo a los pasajeros de la clase de pertenencia. Véase Hall (1986).