Eu acho que o melhor pacote para dados de Comparação emparelhada (PC) em R é o pacote prefmod , que permite preparar convenientemente dados para ajustar modelos BTL (log linear) em R. Ele usa um Poisson GLM (mais precisamente, um logit multinomial em Poisson formulação ver, por exemplo, esta discussão ).
O bom é que ele possui uma função prefmod::llbt.design
que converte automaticamente seus dados no formato e na matriz de design necessários.
Por exemplo, digamos que você tenha 6 objetos, todos emparelhados. Então
R> library(prefmod)
R> des<-llbt.design(data, nitems=6)
criará a matriz de design a partir de uma matriz de dados que se parece com isso:
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
com linhas indicando pessoas, colunas indicando comparações e 0 significa indeciso 1 significa objeto 1 preferido e 2 significa objeto 2 preferido. Valores ausentes são permitidos. Edit : Como isso provavelmente não é algo para inferir simplesmente a partir dos dados acima, eu soletrar aqui. As comparações devem ser ordenadas da seguinte maneira ((12): objeto de comparação médio 1 com o objeto 2):
(12) (13) (23) (14) (24) (34) (15) (25) etc.
O ajuste é mais convenientemente realizado com a gnm::gnm
função, pois permite a modelagem estatística. (Editar: você também pode usar a prefmod::llbt.fit
função, que é um pouco mais simples, pois requer apenas as contagens e a matriz de design.)
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
Observe que o termo de eliminação omitirá os parâmetros incômodos do resumo. Você pode obter os parâmetros de valor (seus deltas) como
## 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
E você pode plotá-los com
R> plotworth(wmat)
Se você possui muitos objetos e deseja escrever o1+o2+...+on
rapidamente um objeto de fórmula , pode usar
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
para gerar a fórmula gnm
(da qual você não precisaria llbt.fit
).
Há um artigo JSS , consulte também https://r-forge.r-project.org/projects/prefmod/ e a documentação via ?llbt.design
.