Bagaimana cara mengatur dan memperkirakan model logit multinomial dalam R?

20

Saya menjalankan model multinomial logit di JMP dan mendapatkan kembali hasil yang termasuk AIC dan juga nilai p-kuadrat untuk setiap estimasi parameter. Model ini memiliki satu hasil kategoris dan 7 vars penjelas kategoris.

Saya kemudian cocok dengan apa yang saya pikir akan membangun model yang sama di R, menggunakan multinomfungsi dalam paket nnet .

Kode ini pada dasarnya:

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

Namun, keduanya memberikan hasil yang berbeda. Dengan JMP AIC adalah 2.923,21, dan dengan nnet::multinomAIC adalah 3116.588.

Jadi pertanyaan pertama saya adalah: Apakah salah satu model salah?

Hal kedua adalah, JMP memberikan nilai p-kuadrat untuk setiap estimasi parameter, yang saya butuhkan. Menjalankan ringkasan pada multinom fit1tidak - itu hanya memberikan perkiraan, AIC dan Penyimpangan.

Pertanyaan kedua saya adalah: Apakah ada cara untuk mendapatkan nilai-p untuk model dan perkiraan saat menggunakan nnet::multinom?

Saya tahu mlogit adalah paket R lain untuk ini dan sepertinya outputnya termasuk nilai-p; Namun, saya belum bisa menjalankan mlogitmenggunakan data saya. Saya pikir saya memiliki data yang diformat dengan benar, tetapi dikatakan bahwa saya memiliki formula yang tidak valid. Saya menggunakan rumus yang sama dengan yang saya gunakan multinom, tetapi sepertinya membutuhkan format yang berbeda menggunakan pipa dan saya tidak mengerti cara kerjanya.

Terima kasih.

paul
sumber
2
Anda dapat mengatur argumen Hess = TRUE untuk mendapatkan kembali Hessian dari multinom dan kemudian menghitung nilai-p secara manual. Tapi saya sarankan Anda menggunakan pustaka mlogit (nnet dapat memiliki masalah konvergensi ketika kovariat tidak diskalakan dengan benar). Sketsa untuk mlogit cukup bagus, dan seharusnya membantu Anda mengatur data dengan benar. Sketsa dapat ditemukan di tempat biasa: cran.r-project.org/web/packages/mlogit
Jason Morgan

Jawaban:

9

Saya yakin Anda sudah menemukan solusi karena posting ini sudah sangat lama, tetapi bagi kita yang masih mencari solusi - saya telah menemukan http://youtu.be/-Cp_KP9mq94 adalah sumber yang bagus untuk instruksi tentang cara menjalankan model regresi logistik multinomial dalam R menggunakan paket mlogit. Jika Anda mengunjungi situs web akademi ekonometrik, ia memiliki semua skrip, data untuk R dan SAS, dan STATA yang saya kira atau SPSS salah satunya.

Jenis yang menjelaskan bagaimana / mengapa dan apa yang harus dilakukan tentang mengubah data Anda ke dalam format format "panjang" vs "lebar". Kemungkinan besar Anda memiliki format lebar, yang membutuhkan transformasi.

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

Kerry
sumber
3

Secara umum, perbedaan nilai AIC antara dua perangkat lunak yang berbeda tidak sepenuhnya mengejutkan. Menghitung kemungkinan sering melibatkan konstanta yang sama antara model yang berbeda dari data yang sama. Pengembang yang berbeda dapat membuat pilihan yang berbeda tentang apa yang akan ditinggalkan atau tidak. Yang harus Anda khawatirkan adalah ketika perbedaan nilai AIC antara dua model berbeda. Sebenarnya saya baru saja melihat argumen untuk multinom()memungkinkan Anda mengubah bagaimana baris dengan nilai X identik runtuh, dan ini memengaruhi garis dasar penyimpangan, dan karenanya AIC. Anda bisa mencoba nilai yang berbeda dari argumen sum dan melihat apakah itu membuat penyimpangan setuju. Kami tidak tahu apa yang JMP lakukan! :)

Jika estimasi koefisien dan kesalahan standar sama, maka Anda baik. Jika koefisiennya tidak sama, jangan lupa bahwa JMP mungkin memilih hasil baseline yang berbeda untuk menghitung koefisien. multinom()membuat pilihan yang berbeda dari mlogit(), misalnya.

Mendapatkan nilai-p dari ringkasan () hasil multinom () cukup mudah. Saya tidak dapat mereproduksi model Anda, jadi inilah contoh dari halaman bantuan di 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)

Saya setuju bahwa mencari tahu paket mlogit sedikit tantangan! Baca sketsa, hati-hati. Mereka memang membantu.

atiretoo
sumber
Bagaimana saya menggunakan variabel (generik) lainnya dari Fishingdataset dengan multinom?
gregmacfarlane
@ gmacfarlane Cukup tambahkan variabel yang Anda inginkan ke rumus dalam multinom (mode ~ income + price.beach, ...
atiretoo
@atiretoo Saya sedang mencari cara untuk mendapatkan waktu saya jadi terima kasih! tetapi hanya untuk klarifikasi - dari mana 6 berasal dengan df? seperti apa yang harus saya hitung untuk mendapatkan df saya? Saya memiliki variabel kontinu dan variabel kategori (4 kategori) dalam model saya. Jadi apakah itu akan menjadi df 5? Juga, memancing apakah seluruh data sudah benar? Yang merupakan ukuran sampel tingkat kebebasan.
Kerry
@atiretoo Saya minta maaf, saya baru saja menemukan bahwa jika menggunakan paket nnet untuk menjalankan regresi logit - sebenarnya menghitung df efektif dan disimpan dalam objek nnet. Jadi, saya bisa mengekstrak df dari model dan menggunakannya. Saya belum memeriksa apakah objek mlogit akan memiliki informasi yang sama.
Kerry
@Kerry senang kau menemukannya.
atiretoo
1

Anda juga dapat mencoba menjalankan multinomial logit menggunakan paket glmnet. Saya tidak yakin bagaimana memaksanya untuk menjaga semua variabel, tapi saya yakin itu mungkin.

Zach
sumber