首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R库(BradleyTerry2)。差异错误(player1,player2.必须是具有相同水平的因素

R库(BradleyTerry2)。差异错误(player1,player2.必须是具有相同水平的因素
EN

Stack Overflow用户
提问于 2018-11-09 16:06:13
回答 1查看 394关注 0票数 0

在R中使用BradleyTerry2包有问题,我的数据如下所示。我从另一个代码中创建了数据,我认为格式与BradleyTerry exmple (https://cran.r-project.org/web/packages/BradleyTerry2/vignettes/BradleyTerry.pdf)中的“https://cran.r-project.org/web/packages/BradleyTerry2/vignettes/BradleyTerry.pdf”相同。

代码语言:javascript
复制
   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中的错误(player1,player2,公式,id,data,separate.ability,refcat,‘player2 1$.’)还有‘玩家$2.’必须是具有相同水平的因素

我查看了StackOverflow (Updated with data: Error in Diff...must be factors with the same levels)上的另一页,并尝试了下面的代码。(不过,我不明白它是干什么的。)

代码语言:javascript
复制
levels(dat[,1]) <- dat(c(dat[,1], dat[,2]))
levels(dat[,2]) <- dat(c(dat[,1], dat[,2]))

但是,BTm()函数会抛出相同的消息。有人能告诉我我能做什么吗?

这是dput(dat)的结果

代码语言:javascript
复制
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")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-09 19:49:11

您的问题是如何定义数据帧中的播放器因素。它们需要具有完全相同的级别,但是因为player1只包含值1、.、5,而player2包含值2、.、6,所以它们将有不同的级别。

您需要通过提供确切的级别来强制两个因素的级别是相同的。这里有一种方法可以通过创建两个具有正确因子级别的新变量来实现。

代码语言:javascript
复制
dat$p1 <- factor(dat$player1, levels=unique(c(dat$player1, dat$player2)))  
dat$p2 <- factor(dat$player2, levels=unique(c(dat$player1, dat$player2)))  

然后我们就可以跑了

代码语言:javascript
复制
> 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53229310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档