2014-04-04 12 views
5

Sto utilizzando il pacchetto mlogit nel programma R. Ho convertito i miei dati dal formato wide originale al formato lungo. Ecco un esempio del data.frame convertito che io definisco 'long_perp'. Tutte le variabili indipendenti sono individuali. Ho 4258 osservazioni uniche nel set di dati.Modelli logit multinomiali e modelli logit annidati

  date_id act2 grp.bin pdist ship sea avgknots shore day location chid alt 
4.dive 40707_004 TRUE  2 2.250 second light 14.06809 2.30805 12 Lower 4 dive 
4.fly 40707_004 FALSE  2 2.250 second light 14.06809 2.30805 12 Lower 4 fly 
4.none 40707_004 FALSE  2 2.250 second light 14.06809 2.30805 12 Lower 4 none 
5.dive 40707_006 FALSE  2 0.000 second light 15.12650 2.53312 12 Lower 5 dive 
5.fly 40707_006 TRUE  2 0.000 second light 15.12650 2.53312 12 Lower 5 fly 
5.none 40707_006 FALSE  2 0.000 second light 15.12650 2.53312 12 Lower 5 none 
6.dive 40707_007 FALSE  1 1.995 second light 14.02101 2.01680 12 Lower 6 dive 
6.fly 40707_007 TRUE  1 1.995 second light 14.02101 2.01680 12 Lower 6 fly 
6.none 40707_007 FALSE  1 1.995 second light 14.02101 2.01680 12 Lower 6 none 

'ACT2' è la variabile dipendente e si compone di scelte un uccello che galleggia sulle acque potrebbe fare quando viene avvicinato da una nave; volare, tuffarsi o nessuno. Sono interessato a come queste probabilità si riferiscono alle variabili indipendenti rimanenti nel data.frame, cioè la distanza perpendicolare alle condizioni del mare (pdist) del percorso della nave (mare), velocità (avgknots), distanza dalla costa (riva) ecc. le variabili sono costituite da variabili dicotomiche, fattoriali e continue.

Ho eseguito due modelli logit multinomiali, uno comprendente tutte le opzioni di scelta e un altro includendo solo un sottoinsieme. Ho quindi confrontato questi modelli con la funzione hmftest() per verificare l'ipotesi IIA. I risultati sono stati confusionari il minimo. Includerò i codici per i due modelli e l'uscita di prova (nel caso in cui mi manchi di specificare i modelli nel codice).

# model including all choice options (fly, dive, none) 
mod.1 <- mlogit(act2 ~ 1 | pdist + as.factor(grp.bin) + 
    as.factor(sea) + avgknots + shore + as.factor(location),long_perp , 
    reflevel = 'none') 

# model including only a subset of choice options (fly, dive) 
mod.alt <- mlogit(act2 ~ 1 | pdist + as.factor(grp.bin) + 
    as.factor(sea) + avgknots + shore + as.factor(location),long_perp , 
    reflevel = 'none', alt.subset = c("fly","dive")) 

# IIA test 
hmftest(mod.1, mod.alt) 
# output 
      Hausman-McFadden test 

data: long_perp 
chisq = -968.7303, df = 7, p-value = 1 
alternative hypothesis: IIA is rejected 

Come si può vedere la statistica di chisquare è negativa! Presumo che io sia 1. fare qualcosa di sbagliato, o 2. IIA è violato. Questo risultato è valido per il sottoinsieme di scelta (volo, tuffo), ma l'ipotesi IIA è confermata con un sottoinsieme di scelta (nessuno, immersione)? Questo mi confonde.

Successivamente ho provato a formulare un modello annidato come un modo per rilassare l'ipotesi IIA. Ho annidato le scelte come nest1 = none, nest2 = fly, dive. Questo ha senso per me poiché sembra una rottura logica, l'uccello decide di reagire o meno e decide quale reazione fare.

Non sono chiaro su come eseguire i modelli logit annidati (anche dopo aver letto le due vignette per mlogit, Croissant vignette e Train vignette).

Quando eseguo la mia analisi seguendo l'esempio nella vignetta di Croissant ottengo il seguente errore.

nested.1 <- mlogit(act2 ~ 0 | pdist + as.factor(grp.bin) + as.factor(ship) + 
    as.factor(sea) + avgknots + shore + as.factor(location), 
    long_perp , reflevel="none",nests = list(noact = "none", 
    react = c("dive","fly")), unscaled = TRUE) 

# Error in solve.default(crossprod(attr(x, "gradi")[, !fixed])) : 
    Lapack routine dgesv: system is exactly singular: U[19,19] = 0 

Ho letto un po 'di questo messaggio di errore e potrebbe verificarsi a causa della completa separazione. Ho esaminato alcune tabelle dei dati e non credo che ciò stia accadendo in quanto ho più di 4000 osservazioni e solo una variabile fattore con più di 2 livelli (ha 3).

L'aiuto su questi problemi specifici è molto apprezzato ma sono aperto anche a analisi alternative che posso utilizzare per rispondere alla mia domanda. Sono principalmente interessato alla probabilità di volare in funzione della distanza perpendicolare al percorso delle navi.

Grazie, Tim

risposta

0

Per ottenere una positiva chi-quadrati, modificare il codice come segue:

alt.subset = c("none", "fly") 

che è, il livello ref sarà nel sottoinsieme troppo. Potrebbe essere d'aiuto, anche se il valore P potrebbe non cambiare molto.

Problemi correlati