R programında mlogit paketini kullanıyorum. Verilerimi orijinal biçiminden uzun formata dönüştürdüm. İşte ben 'long_perp' olarak başvurduğum dönüştürülen data.frame bir örneğidir. Bağımsız değişkenlerin tümü bireyseldir. Veri setinde 4258 benzersiz gözlem var.Çoklu oturumlu logit modelleri ve iç içe geçmiş logit modelleri
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' bağımlı değişkendir ve seçimler gemi tarafından yaklaştı yapabiliriz su üzerinde yüzen bir kuş oluşur; uç, dalış veya yok. Bu olasılıkların data.frame'deki kalan bağımsız değişkenlerle, yani gemi yoluna (pdist) deniz koşullarına (deniz), hıza (avgknots), kıyıya (kıyıya) olan mesafeye vb. Dikey olarak nasıl bağlı olduğuyla ilgileniyorum. Bağımsız değişkenler, ikiboyutlu, faktörlü ve sürekli değişkenlerden yapılmıştır.
İki tane çoklu oturum açma modelini çalıştırdım, bunlardan biri tüm seçenek seçeneklerini ve yalnızca bir alt kümeyi içeren bir tane. Daha sonra bu modelleri IIA varsayımını test etmek için hmftest() işleviyle karşılaştırdım. Sonuçlar en azından kafa karıştırıcıydı. İki model için kodları ve test çıktısını ekleyeceğim (koddaki modelleri özlüyorum).
# 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
Görebildiğiniz gibi, istatistik istatistiği negatif! Sanırım ya 1. yanlış bir şey yapıyorum ya da 2. IIA ihlal edildi. Bu sonuç seçim alt kümesi için geçerli (sinek, dalış), ancak IIA varsayımı seçim alt kümesiyle (hiçbiri, dalış) destekleniyor mu? Bu beni şaşırtıyor.
Sonraki IIA varsayımını gevşetmenin bir yolu olarak yuvalanmış bir model oluşturmaya çalıştım. Seçimleri nest1 = none, nest2 = fly, dalış olarak yerleştirdim. Bu mantıklı bir kırılma gibi göründüğü için bana mantıklı geliyor, kuş tepki vermeye ya da yapmaya karar vermeyecek, sonra da hangi tepkiyi yapacağına karar veriyor.
İç içe geçmiş logit modellerinin nasıl çalıştırılacağı açık değil (mlogit için iki vinyet okuduktan sonra bile, Croissant vignette ve Train vignette).
Örneği inceledikten sonra, Croissant vignette örneğinde aşağıdaki hatayı alıyorum.
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
Bu hata iletisi hakkında biraz bilgi okudum ve tam ayırma nedeniyle oluşabilir. Verilerin bazı tablolarını inceledim ve 4,000'den fazla gözlemim olduğu ve 2'den fazla seviyeye sahip tek faktör değişkeni olduğu için bunun olduğuna inanmıyorum (3'e sahip).
Bu özel sorunlara yardımcı olmak büyük bir memnuniyetle karşılanmaktadır, ancak aynı zamanda soruma yanıt vermek için kullanabileceğim alternatif analizlere de açığım. Ben esas olarak, gemi yoluna dikey mesafenin bir fonksiyonu olarak uçma ihtimali ile ilgileniyorum.
olduğunualt.subset = c("none", "fly")
, ref seviyesi çok alt kümesi olacaktır:
Sağ ol Tim