2014-04-04 44 views
5

Tôi đang sử dụng gói mlogit trong chương trình R. Tôi đã chuyển đổi dữ liệu của mình từ định dạng gốc sang định dạng dài. Đây là mẫu của data.frame được chuyển đổi mà tôi gọi là 'long_perp'. Tất cả các biến độc lập là riêng biệt. Tôi có 4258 quan sát duy nhất trong tập dữ liệu.Mô hình logit đa thức và mô hình logit lồng nhau

  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' là biến phụ thuộc và bao gồm lựa chọn chim nổi trên mặt nước có thể thực hiện khi được một con tàu tiếp cận; bay, lặn hoặc không có gì. Tôi quan tâm đến cách xác suất này liên quan đến các biến độc lập còn lại trong data.frame, tức là khoảng cách vuông góc với điều kiện đường biển (pdist) biển (biển), tốc độ (avgknots), khoảng cách đến bờ (bờ) vv. các biến được tạo thành từ các biến nhị phân, yếu tố và các biến liên tục.

Tôi đã chạy hai mô hình logit đa thức, một bao gồm tất cả các tùy chọn lựa chọn và một tùy chọn khác chỉ bao gồm một tập hợp con. Sau đó tôi so sánh các mô hình này với hàm hmftest() để kiểm tra giả định IIA. Kết quả đã gây nhầm lẫn cho người nói ít nhất. Tôi sẽ bao gồm các mã cho hai mô hình và đầu ra kiểm tra (trong trường hợp tôi bỏ lỡ-xác định các mô hình trong mã).

# 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 

Như bạn có thể thấy thống kê chisquare là số âm! Tôi cho rằng tôi hoặc là 1. làm điều gì đó sai, hoặc 2. IIA bị vi phạm. Kết quả này đúng với tập hợp con lựa chọn (bay, lặn), nhưng giả định IIA được duy trì với tập hợp con lựa chọn (không, bổ nhào)? Điều này làm tôi bối rối.

Tiếp theo tôi đã cố gắng xây dựng một mô hình lồng nhau như một cách để thư giãn giả định IIA. Tôi lồng vào các lựa chọn như nest1 = none, nest2 = fly, dive. Điều này có ý nghĩa với tôi vì điều này có vẻ như một sự phá vỡ hợp lý, chim quyết định phản ứng hay không thì quyết định phản ứng nào tạo ra.

Tôi chưa rõ cách chạy mô hình logit lồng nhau (ngay cả sau khi đọc hai họa tiết cho mlogit, Croissant vignetteTrain vignette).

Khi tôi chạy phân tích của mình theo ví dụ trong họa tiết Croissant, tôi nhận được lỗi sau.

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 

Tôi đã đọc một chút về thông báo lỗi này và có thể xảy ra do tách hoàn toàn. Tôi đã xem xét một số bảng dữ liệu và không tin rằng điều này đang xảy ra khi tôi có hơn 4.000 quan sát và chỉ có một biến yếu tố với hơn 2 cấp độ (nó có 3).

Trợ giúp về những vấn đề cụ thể này được đánh giá cao nhưng tôi cũng mở cho các phân tích thay thế mà tôi có thể sử dụng để trả lời câu hỏi của mình. Tôi chủ yếu quan tâm đến xác suất bay như một hàm của khoảng cách vuông góc với đường tàu.

Cảm ơn, Tim

Trả lời

0

Để có được một chi-vuông tích cực, thay đổi mã như sau:

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

có nghĩa là, mức độ ref sẽ nằm trong tập hợp con quá. Nó có thể giúp, mặc dù giá trị P có thể không thay đổi nhiều.

Các vấn đề liên quan