簡體   English   中英

R庫(BradleyTerry2)。 Diff(player1,player2…中的錯誤必須是相同級別的因子

[英]R library(BradleyTerry2). Error in Diff(player1, player2… must be factors with the same levels

我在R中使用BradleyTerry2軟件包時遇到問題。我的數據如下所示。 我從另一個代碼創建了數據,我認為格式與BradleyTerry示例( https://cran.r-project.org/web/packages/BradleyTerry2/vignettes/BradleyTerry.pdf )中的“ citations.sf”相同。

   player1 player2 win1 win2
1        1       2   10    0
2        1       3   10    0
3        1       4    5    5
4        1       5   10    0
5        1       6    9    1
6        2       3    6    4
7        2       4    4    6
8        2       5    5    5
9        2       6    8    2
10       3       4    2    8
11       3       5    7    3
12       3       6    6    4
13       4       5   10    0
14       4       6    9    1
15       5       6    4    6

但是,當我運行speedModel <- BTm(cbind(win1, win2), player1, player2, data = dat) ,它顯示如下錯誤消息。

Diff中的錯誤(玩家1,玩家2,公式,id,數據,單獨的能力,refcat 、:“玩家1 $ ..”和“玩家2 $ ..”必須是具有相同水平的因素

我在StackOverflow上查看了另一頁( 更新了數據:Diff中的錯誤...必須是同一水平的因素 ),然后嘗試了以下代碼。 (不過,我不明白它的作用。)

levels(dat[,1]) <- dat(c(dat[,1], dat[,2]))
levels(dat[,2]) <- dat(c(dat[,1], dat[,2]))

但是,BTm()函數將引發相同的消息。 誰能告訴我該怎么辦?

這是dput(dat)的結果

structure(list(player1 = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 5L), .Label = 1:6), player2 = structure(c(2L, 
3L, 4L, 5L, 6L, 3L, 4L, 5L, 6L, 4L, 5L, 6L, 5L, 6L, 6L), .Label = 1:6), 
win1 = c(10L, 10L, 5L, 10L, 9L, 6L, 4L, 5L, 8L, 2L, 7L, 6L, 
10L, 9L, 4L), win2 = c(0L, 0L, 5L, 0L, 1L, 4L, 6L, 5L, 2L, 
8L, 3L, 4L, 0L, 1L, 6L)), row.names = c(NA, -15L), class = "data.frame")

您的問題在於數據框中的玩家因素的定義。 他們需要具有完全相同的級別,但是由於player1僅包含值1,...,5,而player2包含值2,...,6,因此它們將具有不同的級別。

您需要通過提供准確的水平來強制兩個因素的水平相同。 這是一種通過創建兩個具有正確因子水平的新變量來實現此目的的方法。

dat$p1 <- factor(dat$player1, levels=unique(c(dat$player1, dat$player2)))  
dat$p2 <- factor(dat$player2, levels=unique(c(dat$player1, dat$player2)))  

然后我們可以運行

> speedModel <- BTm(cbind(win1, win2), p1, p2, data = dat)
> speedModel
Bradley Terry model fit by glm.fit 

Call:  BTm(outcome = cbind(win1, win2), player1 = p1, player2 = p2, 
    data = indata)

Coefficients:
    ..2      ..3      ..4      ..5      ..6  
-2.1433  -2.4885  -0.7286  -3.1201  -2.9323  

Degrees of Freedom: 15 Total (i.e. Null);  10 Residual
Null Deviance:      81.14 
Residual Deviance: 13.71    AIC: 51.6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM