209 votos

¿Cómo tratar la separación perfecta en la regresión logística?

Si tiene una variable que separa perfectamente los ceros y los unos en la variable de destino, R dará el siguiente mensaje de advertencia de "separación perfecta o casi perfecta":

Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred 

Seguimos obteniendo el modelo, pero las estimaciones de los coeficientes están infladas.

¿Cómo se aborda esto en la práctica?

4 votos

Relacionado pregunta

2 votos

Pregunta relacionada y demostración sobre la regularización aquí

0 votos

6voto

alexs77 Puntos 36

En el caso de los modelos logísticos para la inferencia, es importante subrayar en primer lugar que no hay ningún error. El warning en R le informa correctamente de que el estimador de máxima verosimilitud se encuentra en la frontera del espacio de parámetros. La razón de momios de $\infty$ es fuertemente sugerente de una asociación. El único problema es que dos métodos habituales de elaboración de pruebas: la prueba de Wald y la prueba de la razón de verosimilitud requieren una evaluación de la información bajo la hipótesis alternativa.

Con los datos generados en la línea de

x <- seq(-3, 3, by=0.1)
y <- x > 0
summary(glm(y ~ x, family=binomial))

La advertencia está hecha:

Warning messages:
1: glm.fit: algorithm did not converge 
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

lo que refleja de forma muy evidente la dependencia que se ha incorporado a estos datos.

En R la prueba de Wald se encuentra con summary.glm o con waldtest en el lmtest paquete. La prueba de razón de verosimilitud se realiza con anova o con lrtest en el lmtest paquete. En ambos casos, la matriz de información tiene un valor infinito y no se puede hacer ninguna inferencia. En cambio, R hace producir resultados, pero no se puede confiar en ello. La inferencia que R suele producir en estos casos tiene valores p muy cercanos a uno. Esto se debe a que la pérdida de precisión en la OR es órdenes de magnitud menores que la pérdida de precisión en la matriz de varianza-covarianza.

Algunas soluciones se esbozan aquí:

Utilice un estimador de un solo paso,

Hay mucha teoría que apoya el bajo sesgo, la eficiencia y la generalizabilidad de los estimadores de un paso. Es fácil especificar un estimador de un paso en R y los resultados suelen ser muy favorables para la predicción y la inferencia. Y este modelo nunca divergirá, porque el iterador (Newton-Raphson) simplemente no tiene la oportunidad de hacerlo.

fit.1s <- glm(y ~ x, family=binomial, control=glm.control(maxit=1))
summary(fit.1s)

Da:

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -0.03987    0.29569  -0.135    0.893    
x            1.19604    0.16794   7.122 1.07e-12 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Así, se puede ver que las predicciones reflejan la dirección de la tendencia. Y la inferencia es altamente sugerente de las tendencias que creemos que son verdaderas.

enter image description here

realizar una prueba de puntuación,

El Estadística de puntuación (o Rao) difiere de los estadísticos de razón de verosimilitud y de Wald. No requiere una evaluación de la varianza bajo la hipótesis alternativa. Ajustamos el modelo bajo la nula:

mm <- model.matrix( ~ x)
fit0 <- glm(y ~ 1, family=binomial)
pred0 <- predict(fit0, type='response')
inf.null <- t(mm) %*% diag(binomial()$variance(mu=pred0)) %*% mm
sc.null <- t(mm) %*% c(y - pred0)
score.stat <- t(sc.null) %*% solve(inf.null) %*% sc.null ## compare to chisq
pchisq(score.stat, 1, lower.tail=F)

Da como medida de asociación una significación estadística muy fuerte. Obsérvese, por cierto, que el estimador de un paso produce un $\chi^2$ y la prueba de puntuación produce una estadística de prueba de 45,75

> pchisq(scstat, df=1, lower.tail=F)
             [,1]
[1,] 1.343494e-11

En ambos casos tienes inferencia para un OR de infinito.

y utilizar estimaciones medianas insesgadas para un intervalo de confianza.

Puede producir un IC del 95% insesgado y no singular para la razón de momios infinita utilizando la estimación insesgada de la mediana. El paquete epitools en R puede hacer esto. Y doy un ejemplo de implementación de este estimador aquí: Intervalo de confianza para el muestreo Bernoulli

3 votos

Esto es genial, pero tengo algunas objeciones, por supuesto: (1) La prueba de razón de verosimilitud no utiliza la matriz de información; sólo la prueba de Wald lo hace, y falla catastróficamente en presencia de separación. (2) No estoy nada familiarizado con los estimadores de un paso, pero la estimación de la pendiente aquí parece absurdamente baja. (3) A intervalo de confianza no es medianamente insesgada. Lo que enlazas en esa sección es el intervalo de confianza medio-p. (4) Puede obtener intervalos de confianza invirtiendo las pruebas LR o de puntuación. ...

1 votos

... (5) Puede realizar la prueba de puntuación en R dando el argumento test="Rao" a la anova función. (Bueno, las dos últimas son notas, no objeciones).

1 votos

¡@scortchi bueno saber anova tiene pruebas de puntuación por defecto! Tal vez una implementación a mano es útil. Los ICs no son insesgados medianos, pero los ICs para el estimador insesgado mediano proporcionan una inferencia consistente para los parámetros límite. La p media es un estimador de este tipo. La p puede transformarse en una odds ratio porque es invariante a las transformaciones uno a uno. ¿Es la prueba LR consistente para los parámetros límite?

3voto

kbrinley Puntos 664

Tenga cuidado con este mensaje de advertencia de R. Eche un vistazo a esto entrada del blog de Andrew Gelman, y verás que no siempre es un problema de separación perfecta, sino que a veces es un error con glm . Parece que si los valores de partida se alejan demasiado de la estimación de máxima verosimilitud, explota. Por lo tanto, compruebe primero con otro software, como Stata.

Si realmente tiene este problema, puede intentar utilizar la modelización bayesiana, con priores informativos.

Pero en la práctica simplemente me deshago de los predictores que causan problemas, porque no sé cómo elegir un previo informativo. Pero supongo que hay un documento de Gelman sobre el uso de la información a priori cuando se tiene este problema de la separación perfecta. Solo hay que buscarlo en Google. Tal vez usted debe darle una oportunidad.

9 votos

El problema de eliminar predictores es que se está eliminando el predictor que mejor explica la respuesta, ¡que suele ser lo que se pretende hacer! Yo diría que esto sólo tiene sentido si se ha sobreajustado el modelo, por ejemplo ajustando demasiadas interacciones complicadas.

4 votos

No es un error, sino un problema con las estimaciones iniciales que están demasiado lejos de la MLE, que no surgirá si no intentas elegirlas tú mismo.

0 votos

Lo entiendo, pero creo que se trata de un error en el algoritmo.

2voto

Newton Puntos 97

No estoy seguro de estar de acuerdo con las afirmaciones de su pregunta.

Creo que ese mensaje de advertencia significa, para algunos de los observados X en sus datos, la probabilidad ajustada es numéricamente 0 o 1. En otras palabras, en la resolución, se muestra como 0 o 1.

Puede ejecutar predict(yourmodel,yourdata,type='response') y encontrarás 0's o/y 1's allí como probabilidades predichas.

En consecuencia, creo que está bien utilizar sólo los resultados.

1voto

Leonardo Schultz Puntos 166

Esta es una discusión a partir de algunos puntos de las respuestas de Scortchi. Es importante y necesita ser tratado con cuidado. :)

  1. Recomiendo encarecidamente Refundir el modelo si tiene esta advertencia. Vuelva a comprobar la correlación entre todos los predictores para ver si hay algún par muy correlacionado, si es así, elimine uno de ese par. En mis datos reales, vi un par con una correlación cercana a 0,99, lo que significa que están cerca de una correlación "perfecta". Esto hace que el algoritmo falle. A veces, el algoritmo ni siquiera puede estimar los coeficientes correspondientes.

(a) No estoy de acuerdo con @Simon en que: "Estás eliminando el predictor que mejor explica la respuesta". En realidad, en mi caso, tengo "beneficio bruto" y "beneficio bruto + intereses". Este último no se diferencia mucho del primero porque el interés de la empresa no cambia mucho en el tiempo. Así que usar cualquiera (y sólo) de estos dos es suficiente.

  1. Yo, fuertemente oponerse a no hacer nada (sin ofender). En mi investigación, hicimos una simulación intensiva para demostrar que esta advertencia proporciona en realidad unas estimaciones de coeficientes muy desviadas. Muchos problemas surgen cuando se hacen predicciones, se construyen otras estadísticas y se realizan inferencias utilizando esas estimaciones puntuales. Es muy peligroso dejarlas en paz.

  2. También probé el análisis bayesiano, pero no ayudar a resolver este problema (al menos en mi caso). Las estimaciones puntuales siguen siendo problemáticas.

En definitiva, recomiendo hacer algo (refundir el modelo con una mejor comprensión de los predictores) para eliminar la multicolinealidad grave ¡! Creo que esta advertencia se debe principalmente al fallo de los algoritmos internos causado por la multicolinealidad (todos sabemos que, como estadísticos, la multicolinealidad es notoria).

1 votos

La separación perfecta es un fenómeno independiente de la multicolinealidad. ¿Quizá pretendías publicar esta respuesta en otro sitio?

0 votos

Gracias por señalarlo. Pero están estrechamente relacionados y causan el problema de la separación perfecta. Creo que investigar la multicolinealidad grave es una forma de resolver la separación perfecta. Otras discusiones también señalan esto: stats.stackexchange.com/questions/260232/

1 votos

Me parece problemático relacionar la separación perfecta con la multicolinealidad, porque (a) son conceptos distintos; (b) la separación perfecta se da (fácilmente) con variables explicativas ortogonales; y (c) incluso un gran grado de colinealidad no necesita una separación perfecta.

-1voto

Stixxnstones Puntos 11

Entiendo que este es un post antiguo, sin embargo voy a seguir respondiendo a esto ya que he luchado días con él y puede ayudar a otros.

La separación completa se produce cuando las variables seleccionadas para ajustar el modelo pueden diferenciar con gran precisión entre 0 y 1 o entre sí y no. Todo nuestro enfoque de la ciencia de datos se basa en la estimación de probabilidades, pero en este caso falla.

Pasos de rectificación:-

  1. Utilizar bayesglm() en lugar de glm(), cuando en caso de que la varianza entre las variables sea baja

  2. A veces el uso de (maxit="algún valor numérico") junto con el bayesglm() puede ayudar

3.Tercera y más importante comprobación de las variables seleccionadas para el ajuste del modelo, debe haber una variable para la que la colinealidad múltiple con la variable Y (outout) sea muy alta, descarte esa variable de su modelo.

Como en mi caso, tenía un dato de churn de telecomunicaciones para predecir el churn de los datos de validación. Tenía una variable en mis datos de entrenamiento que podía diferenciar muy bien entre el sí y el no. Después de eliminarla, pude obtener el modelo correcto. Además, puedes utilizar stepwise(fit) para que tu modelo sea más preciso.

3 votos

No veo que esta respuesta aporte mucho a la discusión. El enfoque bayesiano se trata a fondo en respuestas anteriores, la eliminación de predictores "problemáticos" también se menciona ya (y se desaconseja). La selección escalonada de variables no suele ser una buena idea, que yo sepa.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X