Inilah yang ingin saya lakukan, tetapi sepertinya tidak ada predict
metode untuk mlogit. Ada ide?
library(mlogit)
data("Fishing", package = "mlogit")
Fish <- mlogit.data(Fishing, varying = c(2:9), shape = "wide", choice = "mode")
Fish_fit<-Fish[-1,]
Fish_test<-Fish[1,]
m <- mlogit(mode ~price+ catch | income, data = Fish_fit)
predict(m,newdata=Fish_test)
r
logistic
logit
multinomial
Zach
sumber
sumber
Jawaban:
Ini trik yang berguna: Tambahkan data yang ingin Anda prediksi ke sampel estimasi asli Anda, tetapi gunakan variabel bobot untuk mengatur bobot pengamatan baru menjadi nol. Perkirakan model (dengan pengamatan baru tertimbang ke nol), dan dapatkan prediksi dari output "probabilitas". Dengan begitu Anda dapat mem-bypass fungsi prediksi, yang merupakan kekacauan.
sumber
Paket mlogit memang memiliki metode predict (), setidaknya dalam versi yang saya gunakan (0.2-3 dengan R 2.15.3).
Kode yang dibuat oleh @Zach memiliki satu kesalahan di dalamnya. Data "format panjang" yang digunakan oleh mlogit () memiliki satu baris untuk setiap alternatif; ini adalah format yang dibuat oleh fungsi mlogit.data (). Oleh karena itu untuk mendapatkan prediksi untuk kasing pertama, Anda perlu mencabut semua baris kasing, dan ada 4:
yang memberikan hasil yang bagus.
sumber
Setelah cukup banyak upaya dalam mencoba menggunakan fungsi prediksi untuk populasi, saya pikir saya dapat menambahkan beberapa wawasan untuk semua jawaban Anda.
The
predict
fungsi mlogit bekerja dengan baik, Anda hanya perlu melakukan beberapa penyesuaian dan pastikan bahwa hal-hal berikut diurus:The
newdata
(seperti yang diharapkan) harus mencakup persis data yang sama dengan sampel yang digunakan untuk estimasi model. Ini berarti bahwa seseorang harus memeriksa properti "tersembunyi" dari data (sepertifactor
yang mewarisi level yang tidak ada -droplevel
dapat berguna dalam kasus ini-, atau tidak dimasukkan dalam faktor sampel, atau salahcolname
dll).Anda harus membuat pilihan sewenang-wenang dalam data baru Anda (jika tidak ada) sesuatu yang dapat dengan mudah dilakukan menggunakan
sample
fungsi:Langkah selanjutnya yang diperlukan adalah mengubah lagi data menjadi data mlogit, menggunakan fungsi yang sama seperti yang digunakan untuk data sampel, misalnya:
Langkah terakhir adalah prediksi aktual menggunakan
predict
fungsi.sumber
Untuk menjawab pertanyaan saya sendiri, saya telah pindah ke menggunakan paket 'glmnet' agar sesuai dengan log multinomial saya, yang memiliki keuntungan tambahan menggunakan laso atau jaring elastis untuk mengatur variabel independen saya. glmnet tampaknya jauh lebih 'selesai' dikemas daripada mlogit, lengkap dengan fungsi 'prediksi'.
sumber
mlogit
memiliki fungsi prediksi, tetapi saya merasa sangat sulit untuk digunakan. Saya menulis sendiri serangkaian fungsi yang sangat jelek untuk implementasi yang saya miliki. Siapa pun boleh menggunakan atau memperbaikinya, disimpan di profil github saya .sumber
Saya cukup yakin ini mudah dilakukan dengan paket mlogit yang diberikan dengan menggunakan fungsi pas dan kemudian fungsi prediksi R standar. Seperti yang ditunjukkan oleh chl, meskipun saya belum melakukannya sendiri (paling tidak bukan prediksi), dicontohkan dalam sketsa paket di sini di halaman 29.
sumber