프로그램 R에서 mlogit 패키지를 사용하고 있습니다. 데이터를 원래의 와이드 포맷에서 긴 포맷으로 변환했습니다. 다음은 'long_perp'로 참조되는 변환 된 data.frame의 샘플입니다. 모든 독립 변수는 개별 변수입니다. 데이터 세트에 4258 개의 고유 한 관측치가 있습니다.다항식로 짓 모델 및 중첩로 짓 모델
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'는 종속 변수이며, 선택의 선박에 의해 접근 할 때 만들 수있는 물에 떠있는 새를 구성; 비행, 다이빙, 또는 없음. 나는이 확률이 data.frame의 나머지 독립 변수, 즉 선박 경로 (pdist) 해상 상태 (sea), 속도 (avgknots), 해안 (coast)까지의 거리 등의 독립 변수에 어떻게 관계되는지에 관심이있다. 변수는 이분법, 인자 및 연속 변수로 구성됩니다.
하나는 모든 선택 옵션을 포함하고 다른 하나는 부분 집합만을 포함하는 두 개의 다항 로그 모델을 실행했습니다. 그런 다음 IIA 가정을 테스트하기 위해 hmftest() 함수와이 모델을 비교했습니다. 그 결과는 말을 혼란스럽게 만들었다. 두 모델에 대한 코드와 테스트 출력을 포함 할 것입니다 (코드에서 모델을 지정하지 못한 경우를 대비하여).
# 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
chisquare 통계는 음수입니다. 나는 어느 쪽인가 1. 뭔가 잘못하고 있다고 가정합니다. 2. IIA가 위반되었습니다. 이 결과는 선택 부분 집합 (파리, 다이빙)에도 적용되지만 IIA 가정은 선택 부분 집합 (none, dive)으로 유지됩니다. 이것은 나를 혼란스럽게합니다.
다음으로 IIA 가정을 완화시키는 방법으로 중첩 모델을 공식화하려고 시도했습니다. nest1 = none, nest2 = fly, dive로 선택 항목을 중첩했습니다. 이것은 논리적 인 휴식처럼 보이는 나에게 의미가 있습니다. 새는 반응하기로 결정했거나 결정할 반응을 결정하지 않았습니다.
mlogit에 대한 두 개의 비 네트 (Croissant vignette 및 Train vignette)를 읽은 후에도 중첩 된 로짓 모델을 실행하는 방법이 불분명합니다.
크로와상 짤막음의 예를 따라 분석을 실행하면 다음 오류가 발생합니다.
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
나는이 오류 메시지에 대해 조금 읽었으며 완전히 분리 되었기 때문에 발생할 수 있습니다. 데이터의 일부 테이블을 살펴본 결과, 4,000 개 이상의 관측 값과 2 개 이상의 레벨 (3 개)이있는 하나의 요소 변수 만 있으면 이것이 일어나고 있다고 생각하지 않습니다.
이러한 특정 문제에 대한 도움을 주시면 대단히 감사하겠습니다. 그러나 제 질문에 답변 할 수있는 대체 분석에 대해서도 열려 있습니다. 나는 주로 선박 경로에 대한 수직 거리의 함수로서 비행 할 확률에 관심이있다.
입니다alt.subset = c("none", "fly")
, 심판 레벨이 너무 부분 집합에있을 것입니다 :
감사합니다, 팀