Estoy tratando de predecir un resultado binario usando 50 variables explicativas continuas (el rango de la mayoría de las variables es a ). Mi conjunto de datos tiene casi 24,000 filas. Cuando corro en R, obtengo:glm
Warning messages:
1: glm.fit: algorithm did not converge
2: glm.fit: fitted probabilities numerically 0 or 1 occurred
He leído las otras respuestas que sugieren que podría estar ocurriendo una separación perfecta, pero estoy seguro de que ese no es el caso en mis datos (aunque podría existir una separación casi completa; ¿cómo puedo probar para ver si ese es el caso?) . Si elimino algunas variables, el error "no convergió" podría desaparecer. Pero eso no siempre es lo que pasa.
Intenté usar las mismas variables en una bayesglm
función y obtuve los mismos errores.
¿Qué pasos tomarías para descubrir exactamente qué está pasando aquí? ¿Cómo averiguar qué variables están causando los problemas?
fuente
bayesglm
documento , argumentan que la separación es "un problema común, incluso cuando el tamaño de la muestra es grande y el número de predictores es pequeño"bayesglm
trata de evitar la separación agregando un previo, pero con 24,000 filas, el anterior probablemente se ve inundado por la probabilidad. Intente reducirprior.scale
, posiblemente en gran cantidad. También considere aumentar los grados de libertad del prior, lo que ayudará a descartar grandes valores asociados con la separación.Respuestas:
Con un espacio de diseño tan grande ( !) Es posible obtener una separación perfecta sin tener que separarlas en ninguna de las variables tomadas individualmente. Incluso apoyaría el comentario de David J. Harris al decir que esto es probable.R50
Puede probar fácilmente si sus clases están perfectamente separadas en su espacio de diseño. Esto se reduce a resolver un problema de programación lineal. Se implementa una implementación R de esta 'prueba' (no una prueba en el sentido estadístico del término) en el paquete safeBinaryRegression .
Si resulta que la separación es realmente el problema, y si solo está interesado en un uso simple de glm (por ejemplo, glm no es llamado por una función de nivel superior sino por usted), entonces hay una implementación R de un algoritmo que modifica ligeramente el clásico para hacerlo 'robusto' contra la separación. Se implementa en el paquete hlr
fuente