2011-12-21 22 views
30

Así que esta es una pregunta muy simple, parece que no puede resolverlo.¿Por qué estoy recibiendo "algoritmo no converge" y "se ajustó prob numéricamente 0 o 1" advertencias con glm?

Estoy ejecutando un logit usando la función glm, pero sigo recibiendo mensajes de advertencia relacionados con la variable independiente. Están almacenados como factores y los he cambiado a numéricos, pero no tuve suerte. También los codifiqué a 0/1 pero tampoco funcionó.

Por favor ayuda!

> mod2 <- glm(winorlose1 ~ bid1, family="binomial") 
Warning messages: 
1: glm.fit: algorithm did not converge 
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

También probé en Zelig, pero el error similar:

> mod2 = zelig(factor(winorlose1) ~ bid1, data=dat, model="logit") 
How to cite this model in Zelig: 
Kosuke Imai, Gary King, and Oliva Lau. 2008. "logit: Logistic Regression for Dichotomous Dependent Variables" in Kosuke Imai, Gary King, and Olivia Lau, "Zelig: Everyone's Statistical Software," http://gking.harvard.edu/zelig 
Warning messages: 
1: glm.fit: algorithm did not converge 
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

EDIT:

> str(dat) 
'data.frame': 3493 obs. of 3 variables: 
$ winorlose1: int 2 2 2 2 2 2 2 2 2 2 ... 
$ bid1  : int 700 300 700 300 500 300 300 700 300 300 ... 
$ home  : int 1 0 1 0 0 0 0 1 0 0 ... 
- attr(*, "na.action")=Class 'omit' Named int [1:63021] 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 ... 
    .. ..- attr(*, "names")= chr [1:63021] "3494" "3495" "3496" "3497" ... 
+2

Esto será imposible de responder sin alguna información detallada acerca de sus datos. 'str (dat)' por ejemplo. Además, esas son advertencias, no errores. Hay una gran diferencia. – joran

+1

Solo quería señalar que hay un paquete 'glm2' que pretende lograr la convergencia donde' glm' no. No sé si esto tiene que ver con el problema aquí o no. Consulte http://journal.r-project.org/archive/2011-2/RJournal_2011-2_Marschner.pdf –

+0

Como parece que está trabajando con datos categóricos, consideraría incluir sus variables enteras como factores. dat $ home <- as.factor (dat $ home) – eamo

Respuesta

34

Si nos fijamos en ?glm (o incluso hacer una búsqueda en Google para su segunda advertencia mensaje) puede tropezar con esto de la documentación:

For the background to warning messages about ‘fitted probabilities numerically 0 or 1 occurred’ for binomial GLMs, see Venables & Ripley (2002, pp. 197–8).

Ahora, no todos tienen ese libro. Sin embargo, asumiendo que es kosher para que haga esto, aquí está el pasaje pertinente:

There is one fairly common circumstance in which both convergence problems and the Hauck-Donner phenomenon can occur. This is when the fitted probabilities are extremely close to zero or one. Consider a medical diagnosis problem with thousands of cases and around 50 binary explanatory variable (which may arise from coding fewer categorical variables); one of these indicators is rarely true but always indicates that the disease is present. Then the fitted probabilities of cases with that indicator should be one, which can only be achieved by taking βi = ∞. The result from glm will be warnings and an estimated coefficient of around +/- 10. There has been fairly extensive discussion of this in the statistical literature, usually claiming non-existence of maximum likelihood estimates; see Sautner and Duffy (1989, p. 234).

Uno de los autores de este libro comentado en algo más de detalle here. Entonces la lección aquí es observar cuidadosamente uno de los niveles de tu predictor. (¡Y Google el mensaje de advertencia!)

+7

+1 Buena respuesta. Solo para agregar: es bueno observar el modelo, los diagnósticos del modelo y, a veces, un modelo diferente. Por ejemplo, prueba un árbol de clasificación. Esto puede indicarle que (a) tiene un excelente pronosticador (algo bueno) o (b) tiene algunos problemas de muestreo (algo malo). – Iterator

+1

¿Responde esta respuesta solo a la segunda advertencia de la pregunta del OP? Encontré en http://discuss.analyticsvidhya.com/t/warning-message-glm-fit-algorithm-did-not-converge/5299 la sugerencia de ajustar el parámetro 'maxit' (que no figura en la documentación de 'glm', pero se pasa como parte del parámetro' control' a 'glm.fit' y luego a' glm.control'), y eso parece haber resuelto la primera advertencia '1: glm.fit: el algoritmo no lo hizo converge' para mí. –

+0

Encontré su respuesta joran muy útil, pero todavía no entiendo cómo resolver el problema en función de su respuesta. Mi comprensión (basada en la cita en su respuesta) es que: uno de los niveles de una de mis variables de predicción rara vez es cierto, pero siempre indica que la variable de salida es 0 o 1. En primer lugar, seguramente cualquier método estadístico decente debería ser capaz de lidiar con esto? En segundo lugar, ¿cómo encuentro la variable de predicción, y una vez que la encuentro, qué hago con ella? – par

Cuestiones relacionadas