2011-12-21 6 views
30

Quindi questa è una domanda molto semplice, non riesco proprio a capirlo.Perché sto ricevendo gli avvisi "algoritmo non converge" e "corretti num numericamente 0 o 1" con glm?

Sto eseguendo un logit utilizzando la funzione glm, ma continuo a ricevere messaggi di avviso relativi alla variabile indipendente. Sono memorizzati come fattori e li ho trasformati in numerici, ma non ho avuto fortuna. Li ho anche codificati su 0/1 ma non ha funzionato.

Si prega di aiuto!

> 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 

Ho anche provato a Zelig, ma l'errore simile:

> 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

A questo sarà impossibile rispondere senza alcune informazioni dettagliate sui tuoi dati. 'str (dat)' per esempio. Inoltre, quelli sono avvertimenti, non errori. C'è una grande differenza. – joran

+1

Volevo solo notare che esiste un pacchetto 'glm2' che afferma di raggiungere la convergenza dove' glm' no. Non so se questo ha a che fare con il problema qui o no. Vedi http://journal.r-project.org/archive/2011-2/RJournal_2011-2_Marschner.pdf –

+0

Poiché sembra che tu stia lavorando con dati categoriali, prenderei in considerazione il cast delle variabili intere come fattori. dat $ home <- as.factor (dat $ home) – eamo

risposta

34

Se si guarda alla ?glm (o anche fare una ricerca su Google per la tua seconda ammonizione messaggio) si può imbattersi in questo dalla documentazione:

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

Ora, non tutti hanno quel libro. Ma ammesso che sia kosher per me fare questo, ecco il passaggio rilevante:

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 di questo libro ha commentato in un po 'più in dettaglio here gli autori. Quindi la lezione qui è di guardare attentamente uno dei livelli del predittore. (E Google il messaggio di avviso!)

+7

+1 buona risposta. Giusto per aggiungere: è bello guardare il modello, la diagnostica del modello e, a volte, un modello diverso. Ad esempio, prova un albero di classificazione. Questo potrebbe dirti che (a) hai un eccellente predittore (buona cosa), o (b) hai qualche problema di campionamento (cosa brutta). – Iterator

+1

Questa risposta risponde solo al 2 ° avviso dalla domanda dell'OP? Ho trovato su http://discuss.analyticsvidhya.com/t/warning-message-glm-fit-algorithm-did-not-converge/5299 il suggerimento di regolare il parametro 'maxit' (che non è elencato nella documentazione per 'glm', ma viene passato come parte del parametro' control' a 'glm.fit' e quindi a' glm.control'), e sembra che abbia risolto il primo avviso '1: glm.fit: l'algoritmo non ha converge' per me. –

+0

Ho trovato la tua risposta molto utile joran, ma ancora non capisco come risolvere il problema in base alla tua risposta. La mia comprensione (basata sulla citazione nella tua risposta) è che: uno dei livelli di una delle variabili predittive è raramente vero ma indica sempre che la variabile out-coming è 0 o 1. In primo luogo, sicuramente qualsiasi metodo statistico decente dovrebbe essere in grado di affrontare questo? In secondo luogo, come trovo la variabile predittore e, una volta trovata, cosa devo fare con essa? – par

Problemi correlati