2014-04-04 4 views
5

프로그램 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 vignetteTrain 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") 

, 심판 레벨이 너무 부분 집합에있을 것입니다 :

감사합니다, 팀

답변

0

다음과 같이 코드를 변경, 긍정적 인 카이 스퀘어를 얻으려면. P 값이 많이 변하지는 않더라도 도움이 될 수 있습니다.