R में mlogit फ़ंक्शन चलाने के बाद भविष्यवाणी करें


11

यहाँ मैं क्या करना चाहता हूँ, लेकिन वहाँ predictmlogit के लिए कोई विधि नहीं है । कोई विचार?

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
क्या आपने rp: mlogit संकुल में बहुउद्देशीय लॉगिट मॉडल के साथ आने वाले विगनेट , अनुमान को पढ़ा ? मुझे लगता है कि आपको सिर्फ नए डेटा पर फिट किए गए गुणांक को लागू करना होगा, है न?
CHL

@ यह है कि मुझे क्या करना है, हाँ, लेकिन मुझे उम्मीद थी कि मुझे पहिया का फिर से आविष्कार नहीं करना पड़ेगा।
Zach

जवाबों:


2

यहां उपयोगी ट्रिक है: उन डेटा को जोड़ें जिन्हें आप अपने मूल अनुमान नमूने की भविष्यवाणी करना चाहते हैं, लेकिन उन नए अवलोकनों का वजन शून्य पर सेट करने के लिए वज़न चर का उपयोग करें। मॉडल का अनुमान लगाएं (शून्य में भारित नई टिप्पणियों के साथ), और "संभाव्यता" आउटपुट से भविष्यवाणियां प्राप्त करें। इस तरह आप पूर्वानुमान कार्य को बायपास कर सकते हैं, जो एक गड़बड़ है।


6

नकली पैकेज में एक भविष्यवाणी () विधि है, कम से कम संस्करण में मैं उपयोग कर रहा हूं (आर 2.15.3 के साथ 0.2-3)।

@Zach द्वारा डाले गए कोड में एक त्रुटि है। Mlogit द्वारा उपयोग किए गए "लंबे प्रारूप" डेटा में प्रत्येक विकल्प के लिए एक पंक्ति है; यह mlogit.data () फ़ंक्शन द्वारा बनाया गया प्रारूप है। इसलिए पहले मामले के लिए एक भविष्यवाणी प्राप्त करने के लिए आपको उस मामले के लिए सभी पंक्तियों को खींचने की आवश्यकता है, और 4 हैं:

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

जो एक अच्छा परिणाम देता है।


4

जनसंख्या के लिए पूर्वानुमान फ़ंक्शन का उपयोग करने की कोशिश में काफी प्रयास के बाद, मुझे लगता है कि मैं आपके सभी उत्तरों में कुछ अंतर्दृष्टि जोड़ सकता हूं।

predictMlogit के समारोह ठीक काम करता है, तो आप सिर्फ कुछ समायोजन करने और यह सुनिश्चित करें कि निम्नलिखित बातें ध्यान रखा जाता है होना जरूरी:

  1. newdata(उम्मीद के रूप में) मॉडल के आकलन के लिए इस्तेमाल किया नमूना के रूप में बिल्कुल एक ही डेटा होना चाहिए। इसका मतलब यह है कि किसी को डेटा के "छिपे हुए" गुणों की जांच करनी चाहिए (जैसे कि एक factorविरासत का स्तर जो मौजूद नहीं है - droplevelइस मामले में उपयोगी हो सकता है- या नमूना कारकों में पेश नहीं किया गया है, या एक गलत colnameआदि)।

  2. आपको अपने नएडटा में एक मनमाना विकल्प बनाना होगा (यदि यह मौजूद नहीं है) कुछ ऐसा है जो sampleफ़ंक्शन का उपयोग करके आसानी से किया जा सकता है :

    MrChoice <-sample(c("Car", "Bus", "Walk"),nrow(datase),replace=TRUE, prob = c(0.5, 0.4, 0.1))
    mynewData$mode<-MrChoice
  3. अगला आवश्यक कदम फिर से डेटा को mlogit डेटा में बदलना है, उदाहरण के लिए नमूना डेटा के लिए उपयोग किए गए समान फ़ंक्शन का उपयोग करना:

    ExpData3<- mlogit.data(mynewData, shape="wide", choice = "mode",sep=".",id = "TripID")
  4. अंतिम चरण predictफ़ंक्शन का उपयोग करके वास्तविक भविष्यवाणी होगी ।

    resulted<-predict(ml1,newdata=ExpData3)

2

अपने स्वयं के प्रश्न का उत्तर देने के लिए, मैं अपने मल्टीमोनियल लॉग्स को फिट करने के लिए 'glmnet' पैकेज का उपयोग करने के लिए आगे बढ़ गया हूं, जिसमें मेरे स्वतंत्र चर को नियमित करने के लिए लासो या लोचदार नेट का उपयोग करने का अतिरिक्त लाभ है। glmnet एक 'पूर्वानुमान' फ़ंक्शन के साथ पूरा होने के बजाय, बहुत अधिक 'समाप्त' लिखा हुआ है।


1

mlogitएक पूर्वानुमान कार्य है, लेकिन मुझे इसका उपयोग करना बहुत कठिन लगा। मैंने अपने कार्यान्वयन के लिए अपने स्वयं के बहुत ही बदसूरत सेट लिखे । मेरे गिथब प्रोफ़ाइल पर संग्रहीत किसी का भी उपयोग या सुधार करने के लिए आपका स्वागत है ।


0

मुझे पूरा यकीन है कि यह आसानी से फिट किए गए फ़ंक्शन और फिर मानक आर भविष्यवाणी फ़ंक्शन का उपयोग करके दिए गए mlogit पैकेज के साथ किया जाता है। जैसा कि chl ने बताया है, हालांकि मैंने इसे अभी तक खुद नहीं किया है (कम से कम भविष्यवाणी नहीं), पैकेज 29 में यहाँ vignettes में जांच की है


1
विगनेट भ्रामक रूप से सरल है; व्यवहार में, मैं यह पता नहीं लगा सका कि नए डेटा पर कैसे लागू किया जाए। तो मैंने अपना खुद का कोड लिखा, नीचे लिंक किया गया।
gregmacfarlane
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.