Làm cách nào để thiết lập và ước tính mô hình logit đa cực trong R?


20

Tôi đã chạy một mô hình logit đa cực trong JMP và nhận lại kết quả bao gồm AIC cũng như các giá trị p bình phương cho mỗi ước tính tham số. Mô hình có một kết quả phân loại và 7 bình giải thích phân loại.

Sau đó, tôi phù hợp với những gì tôi nghĩ sẽ xây dựng mô hình tương tự trong R, sử dụng multinomhàm trong gói nnet .

Mã về cơ bản là:

fit1 <- multinom(y ~ x1+x2+...xn,data=mydata);
summary(fit1);

Tuy nhiên, hai người cho kết quả khác nhau. Với JMP, AIC là 2923,21 và với nnet::multinomAIC là 3116,588.

Vì vậy, câu hỏi đầu tiên của tôi là: Một trong những mô hình sai?

Điều thứ hai là, JMP đưa ra các giá trị p bình phương cho mỗi ước tính tham số mà tôi cần. Chạy tóm tắt trên multinom fit1không - nó chỉ đưa ra các ước tính, AIC và Deviance.

Câu hỏi thứ hai của tôi là: Có cách nào để lấy giá trị p cho mô hình và ước tính khi sử dụng nnet::multinomkhông?

Tôi biết mlogit là một gói R khác cho điều này và có vẻ như đầu ra của nó bao gồm các giá trị p; tuy nhiên, tôi không thể chạy mlogitbằng dữ liệu của mình. Tôi nghĩ rằng tôi đã có dữ liệu được định dạng đúng, nhưng nó nói rằng tôi có một công thức không hợp lệ. Tôi đã sử dụng cùng một công thức mà tôi đã sử dụng multinom, nhưng có vẻ như nó yêu cầu một định dạng khác bằng cách sử dụng một đường ống và tôi không hiểu cách thức hoạt động của nó.

Cảm ơn.


2
Bạn có thể đặt đối số Hess = TRUE để lấy lại Hessian từ multinom và sau đó tính toán các giá trị p theo cách thủ công. Nhưng tôi khuyên bạn nên sử dụng thư viện mlogit (nnet có thể có các vấn đề hội tụ khi các hiệp phương sai không được chia tỷ lệ chính xác). Các họa tiết cho mlogit khá tốt và sẽ giúp bạn thiết lập dữ liệu của mình một cách chính xác. Các họa tiết có thể được tìm thấy ở nơi thông thường: cran.r-project.org/web/packages/mlogit
Jason Morgan

Câu trả lời:


9

Tôi chắc chắn rằng bạn đã tìm thấy giải pháp của mình vì bài đăng này rất cũ, nhưng đối với những người trong chúng ta vẫn đang tìm giải pháp - tôi đã tìm thấy http://youtu.be/-Cp_KP9mq94 là một nguồn tuyệt vời để được hướng dẫn về cách chạy mô hình hồi quy logistic đa cực trong R bằng gói mlogit. Nếu bạn truy cập trang web của học viện kinh tế lượng kinh tế lượng, cô ấy có tất cả các tập lệnh, dữ liệu cho R và SAS và STATA tôi nghĩ hoặc SPSS một trong số đó.

Loại giải thích nào về lý do / lý do và phải làm gì khi chuyển đổi dữ liệu của bạn sang định dạng của định dạng "dài" so với "rộng". Nhiều khả năng bạn có một định dạng rộng, đòi hỏi phải chuyển đổi.

https://sites.google.com/site/econometricsacademy/econometrics-models/multinomial-probit-and-logit-models


3

Nhìn chung, sự khác biệt về giá trị AIC giữa hai phần mềm khác nhau không hoàn toàn đáng ngạc nhiên. Tính toán khả năng thường liên quan đến một hằng số giống nhau giữa các mô hình khác nhau của cùng một dữ liệu. Các nhà phát triển khác nhau có thể đưa ra các lựa chọn khác nhau về những gì để lại trong hoặc ngoài hằng số đó. Khi bạn nên lo lắng là khi sự khác biệt về giá trị AIC giữa hai mô hình khác nhau. Trên thực tế tôi chỉ nhận thấy một đối số multinom()cho phép bạn thay đổi cách các hàng có giá trị X giống hệt nhau được thu gọn và điều này ảnh hưởng đến đường cơ sở của độ lệch và do đó AIC. Bạn có thể thử các giá trị khác nhau của đối số tóm tắt và xem liệu điều đó có làm cho các thành phần đồng ý không. Chúng tôi không biết JMP đang làm gì! :)

Nếu các hệ số ước tính và sai số chuẩn là như nhau, thì bạn tốt. Nếu các hệ số không giống nhau, đừng quên rằng JMP có thể chọn một kết quả cơ bản khác để tính các hệ số cho. multinom()làm cho các lựa chọn khác nhau từ mlogit(), ví dụ.

Lấy giá trị p từ kết quả tóm tắt () của multinom () là khá dễ dàng. Tôi không thể sao chép mô hình của bạn, vì vậy đây là ví dụ từ trang trợ giúp trên multinom ():

library("nnet")
data("Fishing", package = "mlogit")
fishing.mu <- multinom(mode ~ income, data = Fishing)
sum.fishing <- summary(fishing.mu) # gives a table of outcomes by covariates for coef and SE
str(sum.fishing)
# now get the p values by first getting the t values
pt(abs(sum.fishing$coefficients / sum.fishing$standard.errors),
  df=nrow(Fishing)-6,lower=FALSE)

Tôi đồng ý rằng việc tìm ra gói mlogit là một chút thách thức! Đọc các họa tiết, cẩn thận. Họ giúp đỡ.


Làm cách nào để sử dụng các biến (chung) khác từ Fishingbộ dữ liệu với multinom?
gregmacfarlane

@gmacfarlane Chỉ cần thêm các biến bạn muốn vào công thức trong multinom (chế độ ~ thu nhập + price.beach, ...
atiretoo

@atiretoo Mình đang tìm cách lấy số tiền của mình nên cảm ơn! nhưng chỉ để làm rõ - 6 đến từ đâu với df? Tôi nên đếm những gì để có được df của tôi? Tôi có một biến liên tục và một biến phân loại (4 loại) trong mô hình của tôi. Vì vậy, đó sẽ là một df của 5? Ngoài ra, câu cá là toàn bộ dữ liệu phải không? Đó là cỡ mẫu - mức độ tự do.
Kerry

@atiretoo Tôi xin lỗi, tôi chỉ thấy rằng nếu sử dụng gói nnet để chạy hồi quy logit - nó thực sự tính toán df hiệu quả và nó được lưu trữ trong đối tượng nnet. Vì vậy, tôi có thể trích xuất df từ mô hình và sử dụng nó. Tôi đã không kiểm tra nếu đối tượng mlogit sẽ có cùng thông tin.
Kerry

@Kerry rất vui vì bạn đã tìm thấy nó.
atiretoo

1

Bạn cũng có thể thử chạy một logit đa phương bằng gói glmnet. Tôi không chắc chắn làm thế nào để buộc nó giữ tất cả các biến, nhưng tôi chắc chắn là có thể.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.