2014-04-04 17 views
5

Używam pakietu mlogit w programie R. Przekształciłem dane z oryginalnego formatu szerokiego na format długi. Oto przykład przekonwertowanego pliku data.frame, który nazywam "long_perp". Wszystkie niezależne zmienne są indywidualne. Mam 4258 unikalnych obserwacji w zbiorze danych.Wielomianowe modele logitowe i zagnieżdżone modele logitowania

  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" jest zmienną zależną i składa się z wyborów dokonanych przez ptaka pływającego po wodzie, gdy zbliży się do niego statek; lataj, nurkuj, lub nie. Interesuje mnie, w jaki sposób prawdopodobieństwa te odnoszą się do pozostałych zmiennych niezależnych w data.frame, tj. Odległość prostopadła do warunków morskich statku (pdist) (morze), prędkość (avgknots), odległość do brzegu (brzeg) itd. zmienne składają się z zmiennych dychotomicznych, czynnikowych i ciągłych.

Przeprowadziłem dwa wielomianowe modele logitowe, jeden zawierający wszystkie opcje wyboru, a drugi obejmujący tylko podzbiór. Następnie porównałem te modele z funkcją hmftest(), aby przetestować założenie IIA. Wyniki były co najmniej mylące. Będę zawierał kody dla dwóch modeli i wynik testu (na wypadek, gdyby mi brakowało - określenie modeli w kodzie).

# 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 

Jak widać statystyki chisquare są negatywne! Zakładam, że albo 1. coś robię źle, albo 2. IIA jest naruszone. Ten wynik jest prawdziwy dla podzbioru wyboru (latać, nurkować), ale założenie IIA jest podtrzymywane z podzbiorem wyboru (brak, nurkowanie)? To mnie myli.

Następnie próbowałem sformułować model zagnieżdżony jako sposób na złagodzenie założenia IIA. Zagnieżdżałem opcje jako nest1 = none, nest2 = fly, dive. To ma dla mnie sens, ponieważ wydaje się to logiczną przerwą, ptak decyduje się zareagować, a nie decyduje, którą reakcję podjąć.

Nie mam pojęcia, jak uruchomić zagnieżdżone modele logitów (nawet po przeczytaniu dwóch winiet dla mlogit, Croissant vignette i Train vignette).

Po uruchomieniu analizy na przykładzie winiety Croissant otrzymuję następujący błąd.

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 

Przeczytałem trochę o tym komunikacie o błędzie i może wystąpić z powodu całkowitego rozdzielenia. Przyjrzałem się niektórym tabelom danych i nie wierzę, że tak się dzieje, ponieważ mam ponad 4000 obserwacji i tylko jedną zmienną czynnikową z więcej niż 2 poziomami (ma 3).

Pomoc w tych konkretnych problemach jest bardzo doceniana, ale jestem również otwarty na alternatywne analizy, które mogę wykorzystać, aby odpowiedzieć na moje pytanie. Interesuje mnie głównie prawdopodobieństwo latania w funkcji prostopadłej odległości od ścieżki statku.

Dzięki, Tim

Odpowiedz

0

Aby uzyskać pozytywną chi-SQ, zmień kod w następujący sposób:

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

czyli poziom ref będzie w podgrupie też. Może to pomóc, chociaż wartość P może niewiele się zmienić.