Si tiene una variable que separa perfectamente ceros y unos en la variable objetivo, R generará el siguiente mensaje de advertencia de "separación perfecta o casi perfecta":
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred
Todavía obtenemos el modelo, pero los coeficientes estimados están inflados.
¿Cómo manejas esto en la práctica?
r
regression
logistic
separation
usuario333
fuente
fuente
Respuestas:
Una solución a esto es utilizar una forma de regresión penalizada. De hecho, esta es la razón original por la que se desarrollaron algunas de las formas de regresión penalizadas (aunque resultaron tener otras propiedades interesantes).
Instale y cargue el paquete glmnet en R y estará listo para comenzar. Uno de los aspectos menos fáciles de usar de glmnet es que solo puede alimentarlo con matrices, no con fórmulas como estamos acostumbrados. Sin embargo, puede mirar model.matrix y similares para construir esta matriz a partir de un marco de datos y una fórmula ...
Ahora, cuando espera que esta separación perfecta no sea solo un subproducto de su muestra, sino que podría ser cierto en la población, específicamente no desea manejar esto: use esta variable de separación simplemente como el único predictor de su resultado, no empleando un modelo de cualquier tipo.
fuente
Tienes varias opciones:
Eliminar algunos de los prejuicios.
(a) Al penalizar la probabilidad según la sugerencia de @ Nick. El paquete logistf en R o la
FIRTH
opción en SASPROC LOGISTIC
implementan el método propuesto en Firth (1993), "Reducción de sesgo de las estimaciones de máxima verosimilitud", Biometrika , 80 , 1 .; que elimina el sesgo de primer orden de las estimaciones de máxima verosimilitud. ( Aquí @Gavin recomienda elbrglm
paquete, con el que no estoy familiarizado, pero creo que implementa un enfoque similar para las funciones de enlace no canónicas, por ejemplo, probit).(b) Mediante el uso de estimaciones no sesgadas medianas en regresión logística condicional exacta. Paquete elrm o logistiX en R, o la
EXACT
declaración en SASPROC LOGISTIC
.Excluya los casos en que se produce la categoría o el valor del predictor que causa la separación. Estos pueden estar fuera de su alcance; o digno de más investigación centrada. (El paquete R safeBinaryRegression es útil para encontrarlos).
Vuelve a lanzar el modelo. Por lo general, esto es algo que habría hecho de antemano si lo hubiera pensado, porque es demasiado complejo para el tamaño de su muestra.
(a) Elimine el predictor del modelo. Dicey, por las razones dadas por @Simon: "Estás eliminando el predictor que mejor explica la respuesta".
(b) Al contraer categorías de predictores / agrupación de los valores de predictores. Solo si esto tiene sentido.
(c) Reexpresar el predictor como dos (o más) factores cruzados sin interacción. Solo si esto tiene sentido.
Hacer nada. (Pero calcule los intervalos de confianza en función de las probabilidades de perfil, ya que las estimaciones de Wald del error estándar serán muy incorrectas). Una opción que a menudo se pasa por alto. Si el propósito del modelo es solo describir lo que ha aprendido sobre las relaciones entre los predictores y la respuesta, no hay vergüenza en citar un intervalo de confianza para una razón de probabilidades de, digamos, 2.3 hacia arriba. (De hecho, podría parecer sospechoso citar intervalos de confianza basados en estimaciones imparciales que excluyen los odds ratios mejor respaldados por los datos). Los problemas surgen cuando intenta predecir el uso de estimaciones puntuales, y el predictor en el que se produce la separación inunda a los demás.
Utilice un modelo de regresión logística oculto, como se describe en Rousseeuw y Christmann (2003), "Robustez contra la separación y valores atípicos en la regresión logística", Computational Statistics & Data Analysis , 43 , 3, e implementado en el paquete R hlr . (@ user603 sugiere esto ) . No he leído el documento, pero dicen en resumen "se propone un modelo un poco más general bajo el cual la respuesta observada está fuertemente relacionada pero no es igual a la respuesta verdadera no observable", que sugiere Para mí, no sería una buena idea usar el método a menos que parezca plausible.
"Cambie algunas observaciones seleccionadas al azar de 1 a 0 o de 0 a 1 entre las variables que muestran una separación completa": comentario de @ RobertF . Esta sugerencia parece surgir de considerar la separación como un problema per se en lugar de como un síntoma de escasez de información en los datos que podría llevarlo a preferir otros métodos a la estimación de máxima verosimilitud, o limitar las inferencias a las que puede hacer con precisión razonable: enfoques que tienen sus propios méritos y no son solo "soluciones" para la separación. (Además de ser descaradamente ad hoc , es desagradable para la mayoría de los analistas que hacen la misma pregunta de los mismos datos, hacen los mismos supuestos, deberían dar diferentes respuestas debido al resultado de un lanzamiento de moneda o lo que sea).
fuente
Esta es una expansión de las respuestas de Scortchi y Manoel, pero como parece que usas RI, pensé que te daría un código. :)
Creo que la solución más sencilla y directa a su problema es utilizar un análisis bayesiano con suposiciones previas no informativas como lo propuso Gelman et al (2008). Como menciona Scortchi, Gelman recomienda poner un Cauchy antes con una mediana de 0.0 y una escala de 2.5 en cada coeficiente (normalizado para tener una media de 0.0 y una DE de 0.5). Esto regularizará los coeficientes y los arrastrará ligeramente hacia cero. En este caso es exactamente lo que quieres. Debido a que tiene colas muy anchas, el Cauchy aún permite coeficientes grandes (en oposición al Normal de cola corta), de Gelman:
¿Cómo ejecutar este análisis? ¡Use la
bayesglm
función en el paquete arm que implementa este análisis!No funciona tan bien ... Ahora la versión bayesiana:
Súper simple, no?
Referencias
Gelman et al (2008), "Una distribución previa por defecto débilmente informativa para modelos logísticos y otros modelos de regresión", Ann. Appl. Stat., 2, 4 http://projecteuclid.org/euclid.aoas/1231424214
fuente
bayesglm
usa? Si la estimación de ML es equivalente a Bayesian con un previo plano, ¿cómo ayudan aquí los previos no informativos?prior.df
el valor predeterminado1.0
y / o disminuyendoprior.scale
el valor predeterminado2.5
, tal vez comience a intentar:m=bayesglm(match ~. , family = binomial(link = 'logit'), data = df, prior.df=5)
Una de las explicaciones más completas de los problemas de "separación casi completa" con la máxima probabilidad es el artículo de Paul Allison. Está escribiendo sobre el software SAS, pero los problemas que aborda son generalizables a cualquier software:
Allison analiza muchas de las soluciones ya mencionadas, incluida la eliminación de variables problemáticas, el colapso de categorías, no hacer nada, aprovechar la regresión logística exacta , la estimación bayesiana y la estimación de máxima probabilidad penalizada.
http://www2.sas.com/proceedings/forum2008/360-2008.pdf
fuente
warning
Con datos generados a lo largo de las líneas de
Se hace la advertencia:
lo que obviamente refleja la dependencia que está integrada en estos datos.
En R, la prueba de Wald se encuentra con
summary.glm
o conwaldtest
en ellmtest
paquete. La prueba de razón de probabilidad se realiza conanova
o conlrtest
ellmtest
paquete. En ambos casos, la matriz de información tiene un valor infinito y no hay inferencia disponible. Más bien, R no producir una salida, pero no se puede confiar en ella. La inferencia que R produce típicamente en estos casos tiene valores p muy cercanos a uno. Esto se debe a que la pérdida de precisión en el OR es un orden de magnitud menor que la pérdida de precisión en la matriz de varianza-covarianza.Algunas soluciones descritas aquí:
Use un estimador de un paso,
Existe mucha teoría que respalda el bajo sesgo, la eficiencia y la generalización 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 divergerá, porque el iterador (Newton-Raphson) simplemente no tiene la oportunidad de hacerlo!
Da:
Para que pueda ver las predicciones reflejan la dirección de la tendencia. Y la inferencia es muy sugerente de las tendencias que creemos que son ciertas.
realizar una prueba de puntaje,
La estadística de Puntuación (o Rao) difiere de la razón de probabilidad y las estadísticas de wald. No requiere una evaluación de la varianza bajo la hipótesis alternativa. Encajamos el modelo debajo del nulo:
En ambos casos tienes inferencia para un OR de infinito.
, y utilice estimaciones medias imparciales para un intervalo de confianza.
Puede generar un IC del 95% imparcial, no singular para la razón de probabilidades infinita utilizando la estimación imparcial 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 de Bernoullifuente
test="Rao"
a laanova
función. (Bueno, las dos últimas son notas, no objeciones.)Tenga cuidado con este mensaje de advertencia de R. Eche un vistazo a esta publicación de blog de Andrew Gelman, y verá que no siempre es un problema de separación perfecta, sino que a veces es un error
glm
. Parece que si los valores iniciales están demasiado lejos de la estimación de máxima verosimilitud, explota. Entonces, verifique primero con otro software, como Stata.Si realmente tiene este problema, puede intentar utilizar el modelado bayesiano, con antecedentes informativos.
Pero en la práctica, me deshago de los predictores que causan el problema, porque no sé cómo elegir un informe informativo. Pero supongo que hay un documento de Gelman sobre el uso de información previa cuando tienes este problema de separación perfecta. Solo googlealo. Tal vez deberías intentarlo.
fuente
glm2
paquete implementa una verificación de que la probabilidad realmente aumenta en cada paso de puntuación y reduce a la mitad el tamaño del paso si no es así.safeBinaryRegression
que está diseñado para diagnosticar y solucionar estos problemas, utilizando métodos de optimización para verificar con seguridad si hay separación o cuasiseparación. ¡Intentalo!No estoy seguro de estar de acuerdo con las declaraciones en su pregunta.
Creo que ese mensaje de advertencia significa que, para algunos de los niveles de X observados 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.
Puedes correr
predict(yourmodel,yourdata,type='response')
y encontrarás 0's y / y 1's allí como probabilidades pronosticadas.Como resultado, creo que está bien usar los resultados.
fuente
Entiendo que esta es una publicación antigua, sin embargo, continuaré respondiendo esto, ya que he luchado días con ella y puede ayudar a otros.
La separación completa ocurre cuando las variables seleccionadas para ajustarse al modelo pueden diferenciar con mucha precisión entre 0 y 1 o sí y no. Todo nuestro enfoque de la ciencia de datos se basa en la estimación de probabilidad, pero falla en este caso.
Pasos de rectificación: -
Use bayesglm () en lugar de glm (), en caso de que la varianza entre las variables sea baja
A veces, usar (maxit = "algún valor numérico") junto con bayesglm () puede ayudar
3. La tercera y más importante verificación para las variables seleccionadas para el ajuste del modelo, debe haber una variable para la cual la colinealidad múltiple con la variable Y (outout) es muy alta, descarte esa variable de su modelo.
Como en mi caso, tenía datos de abandono de telecomunicaciones para predecir el abandono de los datos de validación. Tenía una variable en mis datos de entrenamiento que podía diferenciar mucho entre el sí y el no. Después de soltarlo, pude obtener el modelo correcto. Además, puede usar paso a paso (ajuste) para que su modelo sea más preciso.
fuente