Làm thế nào để phù hợp với mô hình Bradley của Terry Terry Luce trong R, mà không có công thức phức tạp?


9

Các Bradley-Terry-Luce (BTL) mô hình khẳng định rằng , nơi p i j là xác suất mà đối tượng j được đánh giá là "tốt hơn", nặng hơn , v.v., hơn đối tượng iδ iδ j là các tham số.pjTôi= =tôiogTôit-1(δj-δTôi)pTôijjTôiδTôiδj

Đây dường như là một ứng cử viên cho chức năng glm, với Family = binomial. Tuy nhiên, công thức sẽ là một cái gì đó như "Thành công ~ S1 + S2 + S3 + S4 + ...", trong đó Sn là một biến giả, đó là 1 nếu đối tượng n là đối tượng đầu tiên trong so sánh, -1 nếu đó là thứ hai và 0 khác. Khi đó hệ số của Sn sẽ là tương ứng .detôitmộtn

Điều này sẽ khá dễ quản lý chỉ với một vài đối tượng, nhưng có thể dẫn đến một công thức rất dài và cần phải tạo một biến giả cho mỗi đối tượng. Tôi chỉ tự hỏi nếu có một phương pháp đơn giản hơn. Giả sử tên hoặc số của hai đối tượng được so sánh là các biến (yếu tố?) Object1 và Object2 và Thành công là 1 nếu đối tượng 1 được đánh giá tốt hơn và 0 nếu đối tượng 2 là.


3
Có một gói R cho mô hình Bradley-Terry. Nhìn vào Rseek.
Đức hồng y

Tôi cũng đã cung cấp một số liên kết về một câu hỏi liên quan: stats.stackexchange.com/a/10741/930
chl

Gói @cardinal đã đề cập, btw: BradleyTerry2
liên hợp

Câu trả lời:


17

Tôi nghĩ rằng gói tốt nhất cho dữ liệu So sánh ghép đôi (PC) trong R là gói prefmod , cho phép chuẩn bị dữ liệu một cách thuận tiện để phù hợp với các mô hình BTL (log tuyến tính) trong R. Nó sử dụng một Poisson GLM (chính xác hơn là logit đa phương trong Poisson xây dựng xem ví dụ thảo luận này ).

Điều tuyệt vời là nó có chức năng prefmod::llbt.designtự động chuyển đổi dữ liệu của bạn thành định dạng cần thiết và ma trận thiết kế cần thiết.

Ví dụ, giả sử bạn có 6 đối tượng được so sánh theo cặp. Sau đó

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

sẽ xây dựng ma trận thiết kế từ ma trận dữ liệu trông như thế này:

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

với các hàng biểu thị người, các cột biểu thị so sánh và 0 có nghĩa là chưa quyết định 1 có nghĩa là đối tượng 1 ưa thích và 2 có nghĩa là đối tượng 2 được ưu tiên. Thiếu giá trị được cho phép. Chỉnh sửa : Vì đây có lẽ không phải là thứ để suy luận đơn giản từ dữ liệu trên, tôi đánh vần nó ở đây. Các phép so sánh phải được sắp xếp theo cách sau ((12) đối tượng so sánh trung bình 1 với đối tượng 2):

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

Lắp là thuận tiện nhất được thực hiện với gnm::gnmchức năng, vì nó cho phép bạn thực hiện mô hình thống kê. (Chỉnh sửa: Bạn cũng có thể sử dụng prefmod::llbt.fitchức năng, đơn giản hơn một chút vì nó chỉ mất số lượng và ma trận thiết kế.)

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

Xin lưu ý rằng thuật ngữ loại bỏ sẽ bỏ qua các tham số phiền toái từ bản tóm tắt. Sau đó, bạn có thể nhận được các tham số giá trị (đồng bằng của bạn) như

## 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

Và bạn có thể vẽ chúng với

R> plotworth(wmat)

Nếu bạn có nhiều đối tượng và muốn viết một đối tượng công thức o1+o2+...+onnhanh, bạn có thể sử dụng

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

để tạo công thức cho gnm(mà bạn không cần llbt.fit).

Có một bài viết về JSS , xem thêm https://r-forge.r-project.org/projects/prefmod/ và tài liệu qua ?llbt.design.


1
Đó là một phản ứng rất kỹ lưỡng. Cảm ơn bạn. Có vẻ như prefmod sẽ là một gói tốt để sử dụng. Nhân tiện, tôi thích sử dụng mô hình để cố gắng dự đoán kết quả của các trận đấu thể thao.
Cá bạc

Không có vấn đề, vui mừng nếu nó giúp. Tôi không biết chính xác ý bạn dự đoán như thế nào, nhưng Leitner et al. đã sử dụng các mô hình này để dự đoán các sự kiện thể thao. Xem luận án của anh ấy epubdev.wu.ac.at/2925 . Chúc may mắn.
Momo

Có lẽ liên kết này tốt hơn epubdev.wu.ac.at/view/creators/ triệt
Momo

Có thể tính toán ý nghĩa cho sự khác biệt giữa các cặp riêng lẻ (ví dụ o1 và o2) từ dữ liệu này không? Hay bạn phải sắp xếp lại công thức, sử dụng o2 làm yếu tố cuối cùng và sống mà không cần ước tính Std.error trong trường hợp đó?
TNT

1
Đã được một thời gian, vì vậy tôi không nhớ liệu bạn có thể sử dụng các hạn chế tuyến tính một cách thuận tiện hay không, nhưng điều bạn có thể làm trong trường hợp của mình là sử dụng một mức làm tham chiếu, nói o1 và sử dụng giá trị t của cái kia, giả sử o2, từ bản tóm tắt - nó thực sự cấu thành một bài kiểm tra xem sự khác biệt giữa o1 và o2 có bằng không.
Momo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.