복잡한 공식없이 Bradley–Terry–Luce 모델을 R에 맞추는 방법은 무엇입니까?


9

Bradley–Terry–Luce (BTL) 모델은 제이나는=영형나는1(δ제이δ나는), 어디 나는제이 그 물체는 확률입니다 제이 물체보다 "더 나은", 더 무거운 것으로 판단 나는, δ나는, δ제이 매개 변수입니다.

이것은 family = binomial 인 glm 함수의 후보 인 것 같습니다. 그러나 공식은 "성공 ~ S1 + S2 + S3 + S4 + ..."와 같습니다. 여기서 Sn은 더미 변수입니다. 즉, 오브젝트 n이 비교에서 첫 번째 오브젝트이면 1이고, 그렇지 않으면 -1입니다. 두 번째, 그렇지 않으면 0 그러면 Sn의 계수는이자형.

이것은 몇 개의 객체로 관리하기가 쉽지만 수식이 길어지고 각 객체에 더미 변수를 만들어야 할 수도 있습니다. 더 간단한 방법이 있는지 궁금합니다. 비교되는 두 객체의 이름 또는 번호가 변수 (인자?) Object1 및 Object2이고 객체 1이 더 잘 판단되면 성공은 1이고 객체 2가 0이면


3
Bradley-Terry 모델을위한 R 패키지가 있습니다. Rseek를보십시오.
추기경

또한 관련 질문에 대한 링크를 제공했습니다 : stats.stackexchange.com/a/10741/930
chl

: 패키지 @cardinal는, BTW 언급 BradleyTerry2
conjugateprior

답변:


17

R의 Paired Comparison (PC) 데이터에 가장 적합한 패키지는 prefmod 패키지 라고 생각합니다.이 패키지는 R에서 (log linear) BTL 모델에 맞게 데이터를 편리하게 준비 할 수있게합니다. 제형은 예를 들어이 논의를 참조 ).

좋은 점은 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)는 비교 대상 1과 대상 2를 의미합니다).

(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가 사용하기에 좋은 패키지 인 것 같습니다. 그런데이 모델을 사용하여 스포츠 경기 결과를 예측하려고합니다.
실버 피쉬

도움이된다면 문제 없습니다. 나는 당신이 어떻게 예측하는지 정확히 알지 못하지만 Leitner et al. 이러한 모델을 사용하여 스포츠 이벤트를 예측했습니다. 그의 논문 epubdev.wu.ac.at/2925 참조 . 행운을 빕니다.
Momo

아마이 링크는 더 낫습니다 epubdev.wu.ac.at/view/creators/…
Momo

이 데이터에서 개별 쌍 (예 : o1 및 o2)의 차이에 대한 유의성을 계산할 수 있습니까? 아니면 공식을 재정렬하고 o2를 마지막 요소로 사용하고 Std.error 추정없이 살아야합니까?
TNT

1
오랜 시간이 지났으므로 선형 제한을 편리하게 사용할 수 있는지 여부를 기억하지 못하지만 귀하의 경우에 수행 할 수있는 것은 하나를 참조 레벨로 사용하고 o1을 말하고 다른 하나의 t 값을 사용하는 것입니다. 요약하면-o1과 o2의 차이가 0인지 여부를 효과적으로 테스트합니다.
Momo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.