R'de mlogit işlevini çalıştırdıktan sonra tahmin edin


11

İşte yapmak istediğim şey, ama predictmlogit için bir yöntem yok gibi görünüyor . Herhangi bir fikir?

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)

4
R: The mlogit Packages'de eşlik eden skeç, Çok terimli logit modellerinin kestirimini okudunuz mu? Bana öyle geliyor ki, sadece katsayıları yeni verilere uygulamak zorundasınız, değil mi?
chl

@chl yapmam gereken bu, evet, ama tekerleği yeniden icat etmem gerekeceğini umuyordum.
Zach

Yanıtlar:


2

Yararlı numara: Orijinal tahmin örneğinize tahmin etmek istediğiniz verileri ekleyin, ancak bu yeni gözlemlerin ağırlığını sıfıra ayarlamak için ağırlıklar değişkenini kullanın. Modeli tahmin edin (yeni gözlemler sıfır ağırlıklı) ve "olasılıklar" çıktısından tahminler alın. Bu şekilde bir karışıklık olan tahmin işlevini atlayabilirsiniz.


6

Mlogit paketinde en azından kullandığım sürümde bir predict () yöntemi var (R 2.15.3 ile 0.2-3).

@Zach tarafından konulan kodda bir hata var. Mlogit () tarafından kullanılan "uzun format" verilerinin her alternatif için bir satırı vardır; mlogit.data () işlevi tarafından oluşturulan biçimdir. Bu nedenle, ilk vaka için bir tahmin almak için bu dava için tüm satırları çıkarmanız gerekir ve 4 vardır:

Fish_fit<-Fish[-(1:4),]
Fish_test<-Fish[1:4,]
m <- mlogit(mode ~price+ catch | income, data = Fish_fit)
predict(m,newdata=Fish_test)

bu da iyi bir sonuç verir.


4

Nüfus için tahmin işlevini kullanmaya çalışırken epey çaba sarf ettikten sonra, tüm cevaplarınıza birkaç fikir ekleyebileceğimi düşünüyorum.

predictMlogit işlevi cezası çalışır, sadece bazı ayarlamalar yapmak ve emin aşağıdaki şeyler halledilir emin olmak zorunda:

  1. newdata(Beklendiği gibi) modelin tahmini için kullanılan numune tam olarak aynı verileri içermelidir. Bu, verilerin "gizli" özelliklerini kontrol etmesi gerektiği anlamına gelir ( factormevcut olmayan seviyeleri miras alan - droplevelbu durumda yararlı olabilir - veya örnek faktörlere dahil edilmeyecek veya yanlış colnamevb.).

  2. Yeni verilerinizde (yoksa), sampleişlev kullanılarak kolayca yapılabilecek bir şey keyfi bir seçim yapmanız gerekir :

    MrChoice <-sample(c("Car", "Bus", "Walk"),nrow(datase),replace=TRUE, prob = c(0.5, 0.4, 0.1))
    mynewData$mode<-MrChoice
  3. Bir sonraki gerekli adım, örnek veriler için kullanılanla aynı işlevi kullanarak verileri tekrar mlogit verilerine dönüştürmektir, örneğin:

    ExpData3<- mlogit.data(mynewData, shape="wide", choice = "mode",sep=".",id = "TripID")
  4. Son adım, predictfonksiyonu kullanan gerçek tahmin olacaktır .

    resulted<-predict(ml1,newdata=ExpData3)

2

Kendi sorumu cevaplamak için, çok değişkenli loglarıma uyacak 'glmnet' paketini kullanmaya başladım, bu da bağımsız değişkenlerimi düzenlemek için kement veya elastik ağ kullanmanın avantajına sahip. glmnet, bir 'tahmin' fonksiyonu ile tamamlanmış, mlogit'ten çok daha fazla 'bitmiş' olarak paketlenmiş gibi görünüyor.


1

mlogitbir tahmin fonksiyonu var, ama kullanımı çok zor buldum. Sahip olduğum bir uygulama için kendi çok çirkin fonksiyon setimi yazdım . Github profilimde saklanan herkes bunları kullanabilir veya geliştirebilir .


0

Eminim ki verilen fonksiyon ve sonra standart R tahmin fonksiyonu kullanılarak verilen mlogit paketi ile kolayca yapılır. Henüz kendim yapmadım (en azından değil tahmin) rağmen chl, belirttiği gibi, paket vinyet örneklenerek edilir burada 29 pg üzerinde.


1
Skeç aldatıcı basittir; pratikte yeni verilere nasıl başvuracağımı anlayamadım. Bu yüzden, aşağıda bağlantılı kendi kodumu yazdım.
gregmacfarlane
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.