जटिल फॉर्मूला के बिना, आर में ब्रैडली-टेरी-लूस मॉडल कैसे फिट करें?


9

ब्रैडले-टेरी-लुस (BTL) मॉडल कहता है कि पीजेमैं=एलजीमैंटी-1(δजे-δमैं), जहाँ संभावना है कि ऑब्जेक्ट को " " से बेहतर, भारी, आदि माना जाता है, ऑब्जेक्ट , और और पैरामीटर हैं।पीमैंजेजेमैंδमैंδजे

यह परिवार = द्विपद के साथ, glm फ़ंक्शन के लिए एक उम्मीदवार लगता है। हालाँकि, सूत्र कुछ इस तरह होगा "सफलता ~ S1 + S2 + S3 + S4 + ...", जहां Sn एक डमी चर है, अर्थात 1 यदि ऑब्जेक्ट n तुलना में पहली वस्तु है, तो -1 दूसरा, और 0 अन्यथा। तब Sn का गुणांक समान ।एलटीn

यह केवल कुछ वस्तुओं के साथ प्रबंधन करने के लिए काफी आसान होगा, लेकिन बहुत लंबे सूत्र को जन्म दे सकता है, और प्रत्येक वस्तु के लिए एक डमी चर बनाने की आवश्यकता है। मुझे आश्चर्य होता है कि क्या कोई सरल विधि है। मान लीजिए कि तुलना की जा रही दो वस्तुओं का नाम या संख्या चर (कारक?) ऑब्जेक्ट 1, और ऑब्जेक्ट 2, और सफलता 1 है यदि ऑब्जेक्ट 1 को बेहतर आंका जाता है, और 0 यदि ऑब्जेक्ट 2 है।


3
ब्रैडले-टेरी मॉडल के लिए एक आर पैकेज है। Rseek को देखो।
कार्डिनल

मैंने एक संबंधित प्रश्न पर कुछ लिंक भी दिए हैं: सांख्यिकी.स्टैकएक्सचेंज.com
chl

: पैकेज @cardinal उल्लेख किया है, btw BradleyTerry2
conjugateprior

जवाबों:


17

मुझे लगता है कि आर में जोड़ी गई तुलना (पीसी) डेटा के लिए सबसे अच्छा पैकेज प्रीफमॉड पैकेज है , जो आसानी से आर में फिट (लॉग रैखिक) बीटीएल मॉडल के लिए डेटा तैयार करने की अनुमति देता है। यह पॉइसन GLM का उपयोग करता है (अधिक सटीक रूप से, पॉइसन में एक बहुराष्ट्रीय लॉगिट ) सूत्रीकरण देखें इस चर्चा जैसे )।

अच्छी बात यह है कि इसमें एक फ़ंक्शन prefmod::llbt.designहै जो आपके डेटा को आवश्यक प्रारूप और आवश्यक डिज़ाइन मैट्रिक्स में स्वचालित रूप से परिवर्तित करता है।

उदाहरण के लिए, मान लें कि आपकी तुलना में सभी युग्मों में 6 वस्तुएं हैं। फिर

R> library(prefmod)
R> des<-llbt.design(data, nitems=6)

इस तरह दिखने वाले डेटा मैट्रिक्स से डिज़ाइन मैट्रिक्स का निर्माण करेगा:

P1  0  0 NA  2  2  2  0  0  1   0   0   0   1   0   1   1   2
P2  0  0 NA  0  2  2  0  2  2   2   0   2   2   0   2   1   1
P3  1  0 NA  0  0  2  0  0  1   0   0   0   1   0   1   1   2
P4  0  0 NA  0  2  0  0  0  0   0   0   0   0   0   2   1   1
P5  0  0 NA  2  2  2  2  2  2   0   0   0   0   0   2   2   2
P6  2  2 NA  0  0  0  2  2  2   2   0   0   0   0   2   1   2

लोगों को निरूपित करने वाली पंक्तियों के साथ, तुलना करने वाले कॉलम और 0 का अर्थ है अनिर्दिष्ट 1 का अर्थ है ऑब्जेक्ट 1 पसंदीदा और 2 का अर्थ है ऑब्जेक्ट 2 पसंदीदा। गुम मानों की अनुमति है। संपादित करें : जैसा कि यह ऊपर के डेटा से अनुमान लगाने के लिए संभवत: कुछ नहीं है, मैं इसे यहाँ वर्तनी देता हूं। तुलनाओं को निम्नलिखित तरीके से आदेश दिया जाना चाहिए (12) का मतलब वस्तु 2 के साथ तुलना 1):

(12) (13) (23) (14) (24) (34) (15) (25) etc. 

फिटिंग gnm::gnmसमारोह के साथ सबसे आसानी से किया जाता है , क्योंकि यह आपको सांख्यिकीय मॉडलिंग करने की अनुमति देता है। (संपादित करें: आप prefmod::llbt.fitफ़ंक्शन का उपयोग भी कर सकते हैं , जो थोड़ा सरल है क्योंकि यह केवल गणना और डिज़ाइन मैट्रिक्स लेता है।)

R> res<-gnm(y~o1+o2+o3+o4+o5+o6, eliminate=mu, family=poisson, data=des)
R> summary(res)
  Call:
gnm(formula = y ~ o1 + o2 + o3 + o4 + o5 + o6, eliminate = mu, 
    family = poisson, data = des)

Deviance Residuals: 
   Min      1Q  Median      3Q     Max  
-7.669  -4.484  -2.234   4.625  10.353  

Coefficients of interest:
   Estimate Std. Error z value Pr(>|z|)    
o1  1.05368    0.04665  22.586  < 2e-16 ***
o2  0.52833    0.04360  12.118  < 2e-16 ***
o3  0.13888    0.04297   3.232  0.00123 ** 
o4  0.24185    0.04238   5.707 1.15e-08 ***
o5  0.10699    0.04245   2.521  0.01171 *  
o6  0.00000         NA      NA       NA    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

(Dispersion parameter for poisson family taken to be 1)

Std. Error is NA where coefficient has been constrained or is unidentified

Residual deviance: 2212.7 on 70 degrees of freedom
AIC: 2735.3

कृपया ध्यान दें कि समाप्त शब्द सारांश से उपद्रव मापदंडों को छोड़ देगा। आप तब के रूप में लायक पैरामीटर (आपके डेल्टास) प्राप्त कर सकते हैं

## calculating and plotting worth parameters
R> wmat<-llbt.worth(res)
        worth
o1 0.50518407
o2 0.17666128
o3 0.08107183
o4 0.09961109
o5 0.07606193
o6 0.06140979

और आप उनके साथ साजिश कर सकते हैं

R> plotworth(wmat)

यदि आपके पास कई वस्तुएं हैं और o1+o2+...+onआप तेजी से एक फार्मूला ऑब्जेक्ट लिखना चाहते हैं , तो आप उपयोग कर सकते हैं

R> n<-30
R> objnam<-paste("o",1:n,sep="")
R> fmla<-as.formula(paste("y~",paste(objnam, collapse= "+")))
R> fmla
y ~ o1 + o2 + o3 + o4 + o5 + o6 + o7 + o8 + o9 + o10 + o11 + 
    o12 + o13 + o14 + o15 + o16 + o17 + o18 + o19 + o20 + o21 + 
    o22 + o23 + o24 + o25 + o26 + o27 + o28 + o29 + o30

gnm(जिसके लिए आपको आवश्यकता नहीं होगी llbt.fit) के लिए सूत्र तैयार करना ।

एक JSS लेख है , https://r-forge.r-project.org/projects/prefmod/ और प्रलेखन भी देखें?llbt.design


1
यह बहुत गहन प्रतिक्रिया है। धन्यवाद। ऐसा लगता है कि prefmod उपयोग करने के लिए एक अच्छा पैकेज होगा। मैं इस तरह से खेल मैचों के परिणामों की भविष्यवाणी करने की कोशिश करने के लिए मॉडल का उपयोग करने में दिलचस्पी रखता हूं।
सिल्वरफिश

कोई बात नहीं, ख़ुशी हुई अगर इससे मदद मिली। मैं वास्तव में नहीं जानता कि आप भविष्यवाणी कैसे करते हैं, लेकिन लेटनर एट अल। खेल की घटनाओं की भविष्यवाणी करने के लिए इन मॉडलों का उपयोग किया है। उनकी थीसिस epubdev.wu.ac.at/2925 देखें । सौभाग्य।
मोमो

हो सकता है कि इस लिंक बेहतर है epubdev.wu.ac.at/view/creators/...
मोमो

क्या इस डेटा से व्यक्तिगत जोड़े (जैसे o1 और o2) के बीच अंतर के लिए महत्व की गणना करना संभव है? या क्या आपको सूत्र को फिर से व्यवस्थित करना है, ओ 2 को अंतिम कारक के रूप में उपयोग करें और उस मामले में एक Std.error आकलन के बिना रहें?
टीएनटी

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