आर में एक बहुराष्ट्रीय लॉगिट मॉडल कैसे सेट और अनुमान लगाया जाए?


20

मैंने JMP में एक बहुराष्ट्रीय लॉगिट मॉडल चलाया और वापस परिणाम प्राप्त किए जिसमें एआईसी के साथ-साथ प्रत्येक पैरामीटर अनुमान के लिए ची-स्क्वेर्ड पी-वैल्यू शामिल थे। मॉडल में एक श्रेणीगत परिणाम और 7 श्रेणीबद्ध व्याख्यात्मक संस्करण हैं।

मैं तो फिट मैं क्या सोचा आर में एक ही मॉडल का निर्माण होगा, का उपयोग कर multinomमें समारोह nnet पैकेज।

कोड मूल रूप से था:

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

हालांकि, दोनों अलग-अलग परिणाम देते हैं। JMP के साथ AIC 2923.21 है, और nnet::multinomAIC के साथ 3116.588 है।

तो मेरा पहला सवाल है: क्या एक मॉडल गलत है?

दूसरी बात यह है कि, JMP प्रत्येक पैरामीटर अनुमान के लिए chi-squared p-मान देता है, जिसकी मुझे आवश्यकता है। मल्टीनॉम पर रनिंग सारांश fit1नहीं है - यह सिर्फ अनुमान, एआईसी और डीविंस देता है।

मेरा दूसरा सवाल इस प्रकार है: क्या मॉडल और अनुमानों का उपयोग करते समय पी-मान प्राप्त करने का एक तरीका है nnet::multinom?

मुझे पता है कि mlogit इसके लिए एक और R पैकेज है और ऐसा लगता है कि इसके आउटपुट में p-मान शामिल हैं; हालाँकि, मैं mlogitअपने डेटा का उपयोग करने में सक्षम नहीं हूं। मुझे लगता है कि मेरे पास डेटा फ़ॉर्मेट किया गया सही था, लेकिन उसने कहा कि मेरे पास एक अमान्य फॉर्मूला है। मैंने उसी सूत्र का उपयोग किया जिसका मैंने उपयोग किया था multinom, लेकिन ऐसा लगता है कि इसके लिए एक पाइप का उपयोग करके एक अलग प्रारूप की आवश्यकता है और मुझे समझ नहीं आता कि यह कैसे काम करता है।

धन्यवाद।


2
आप Hessian को मल्टीनोम से वापस लाने के लिए Hess = TRUE पर तर्क सेट कर सकते हैं और फिर मैन्युअल रूप से p-मानों की गणना कर सकते हैं। लेकिन मेरा सुझाव है कि आप मैग्लिट ​​लाइब्रेरी का उपयोग करें (nnet में अभिसरण मुद्दे हो सकते हैं जब कोवरिएट्स को सही ढंग से नहीं बढ़ाया जाता है)। Mlogit के लिए विगनेट्स बहुत अच्छे हैं, और आपको अपना डेटा सही तरीके से सेट करने में मदद करनी चाहिए। विगनेट्स को सामान्य स्थान पर पाया जा सकता है: cran.r-project.org/web/packages/mlogit
जेसन मॉर्गन

जवाबों:


9

मुझे यकीन है कि आप पहले से ही अपने समाधान पा चुके हैं क्योंकि यह पोस्ट बहुत पुरानी है, लेकिन हममें से जो अभी भी समाधान ढूंढ रहे हैं - मैंने पाया है http://youtu.be/-Cp_KP9mq94 कैसे पर निर्देश के लिए एक महान स्रोत है Mlogit पैकेज का उपयोग करके R में एक बहुराष्ट्रीय लॉजिस्टिक रिग्रेशन मॉडल चलाएं। यदि आप एकोनोमेट्रिक्स अकादमी की वेबसाइट पर जाते हैं, तो उसके पास सभी स्क्रिप्ट्स हैं, आर और एसएएस और एसटीएटीए के लिए डेटा या मुझे लगता है कि एसपीएसएस उनमें से एक है।

आपके डेटा को "लॉन्ग" फॉर्मेट बनाम "वाइड" के प्रारूप में बदलने के बारे में किस तरह / कैसे और क्या करना है, यह बताया गया है। सबसे अधिक संभावना है कि आपके पास एक विस्तृत प्रारूप है, जिसमें परिवर्तन की आवश्यकता है।

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


3

सामान्य तौर पर, सॉफ्टवेयर के दो अलग-अलग टुकड़ों के बीच एआईसी के मूल्यों में अंतर पूरी तरह से आश्चर्यजनक नहीं है। संभावना की गणना करना अक्सर एक निरंतर शामिल होता है जो एक ही डेटा के विभिन्न मॉडलों के बीच समान होता है। विभिन्न डेवलपर्स अलग-अलग विकल्प बना सकते हैं कि उस स्थिरांक में क्या छोड़ना है या नहीं। जब आपको चिंता करनी चाहिए कि दो मॉडल के बीच एआईसी के मूल्यों में अंतर क्या है। वास्तव में मैंने सिर्फ एक तर्क पर ध्यान दिया multinom()कि आप कैसे बदल सकते हैं कि समान एक्स मानों के साथ पंक्तियां कैसे ढह जाती हैं, और यह कि यह आधारभूत आधार रेखा को प्रभावित करता है, और इसलिए एआईसी। आप योग तर्क के विभिन्न मूल्यों की कोशिश कर सकते हैं और देख सकते हैं कि क्या अवतरण सहमत है। हम नहीं जानते कि JMP क्या कर रहा है! :)

यदि अनुमानित गुणांक और मानक त्रुटियां समान हैं, तो आप अच्छे हैं। यदि गुणांक समान नहीं हैं, तो यह मत भूलो कि JMP गुणांक की गणना करने के लिए एक अलग आधार रेखा परिणाम चुन सकता है। उदाहरण के लिए, multinom()अलग-अलग विकल्प बनाता है mlogit()

सारांश से बहु-मूल्य () परिणाम का पी-मान प्राप्त करना बहुत आसान है। मैं आपके मॉडल को पुन: पेश नहीं कर सकता, इसलिए यहां मल्टीमॉम () पर सहायता पृष्ठ से उदाहरण दिया गया है:

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)

मैं सहमत हूँ कि नकली पैकेज का पता लगाना एक चुनौती है! विगनेट्स को ध्यान से पढ़ें। वे मदद करते हैं।


मैं Fishingमल्टीमोन के साथ डेटासेट से अन्य (जेनेरिक) चर का उपयोग कैसे करूंगा ?
gregmacfarlane

@gmacfarlane बस उन चर को जोड़ें जिन्हें आप मल्टीइनॉम में सूत्र में बदलना चाहते हैं (मोड ~ आय + मूल्य.बच, ...
atiretoo

@atiretoo मैं एक रास्ता ढूंढ रहा था ताकि मुझे अपने धन्यवाद मिलें! लेकिन सिर्फ स्पष्टीकरण के लिए - df के साथ 6 कहां से आता है? जैसे मुझे अपना df प्राप्त करने के लिए क्या गिनना चाहिए? मेरे मॉडल में एक निरंतर चर और एक श्रेणीगत चर (4 श्रेणियां) हैं। तो यह 5 का df होगा? इसके अलावा, मछली पकड़ने के पूरे डेटा सही है? जो आजादी का नमूना आकार-डिग्री है।
केरी

@atiretoo मैं माफी माँगता हूँ, मैंने अभी पाया है कि अगर लॉज रिग्रेशन को चलाने के लिए पैकेज nnet का उपयोग किया जाता है - यह वास्तव में प्रभावी df की गणना करता है और इसे nnet ऑब्जेक्ट में संग्रहीत किया जाता है। इसलिए, मैं मॉडल से डीएफ निकाल सकता हूं और इसका उपयोग कर सकता हूं। मैंने जाँच नहीं की है कि क्या mlogit ऑब्जेक्ट में समान जानकारी होगी।
केरी

@ केरी को खुशी है कि आपने इसे पाया।
atiretoo

1

तुम भी glmnet पैकेज का उपयोग कर एक बहुराष्ट्रीय लॉगिन चलाने की कोशिश कर सकते हैं। मुझे यकीन नहीं है कि सभी चर रखने के लिए इसे कैसे मजबूर किया जाए, लेकिन मुझे यकीन है कि यह संभव है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.