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.design
tự độ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::gnm
chứ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.fit
chứ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+...+on
nhanh, 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
.