r - R 中的 BradleyTerry2 包 - 使用零假设作为引用玩家

标签 r bradleyterry2

我正在 R 中使用 BradleyTerry2 包来分析我的数据。使用BTm函数计算能力分数时,将数据集中的第一项作为引用删除,给定分数为0,然后相对于该引用计算其他能力分数。

有没有办法使用原假设作为引用,而不是使用数据集中的第一项?

这是我正在使用的代码。 “ID”字段是玩家ID。此代码计算每个“比赛”相对于数据集中第一个比赛的能力得分。

BTv1 <- BTm(player1=winner,player2=loser,id="ID",formula=~Matchup+(1|ID),data=btmdata)

我正在尝试测试对战对比赛结果没有影响的原假设,但目前我不知道什么能力得分对应于原假设。我想使用这个零假设作为引用,而不是使用数据集中的第一个匹配。

对于那些想要重现我的结果的人,您可以在我的 university onedrive 上找到我的文件。 .

最佳答案

您可以使用 anova 函数测试模型中各项的重要性,即

anova(BTv1, test = "Chisq")

使用您共享的示例数据和脚本,我们得到以下结果:

Sequential Wald Tests

Model: binomial, link: logit

Response: NULL

Predictor: ~Characters + (1 | ID)

Terms added sequentially (first to last)

           Statistic Df P(>|Chi|)   
NULL                                
Characters    46.116 26  0.008853 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

编辑:对于具有由~ Matchup+(1|ID)建模的可记录性的模型BTv2

在研究个别比赛之前,我们应该检查该术语的整体意义。不幸的是,BTm 对象的 anova() 方法目前不适用于具有不可估计参数的项,如本例所示。所以我们将直接计算:

cf <- coef(BTv2)[!is.na(coef(BTv2))]
V <- vcov(BTv2)
ind <- grep("Matchup", names(cf))
chisq <- c(t(cf[ind]) %*% chol2inv(chol(V[ind, ind])) %*% cf[ind])
df <- length(ind)
c(chisq = chisq, df = df)  
#     chisq       df 
#  107.5667 167.0000 

卡方统计量小于自由度,因此匹配项并不显着 - 模型过度拟合,并且研究特定于匹配的效果并不是一个好主意。

尽管如此,为了便于说明,让我们看看适合仅涉及 3 个角色的比赛时的模型。

summary(BTv2)$fixef
#                              Estimate Std. Error    z value  Pr(>|z|)
# MatchupCaptainFalcon;Falco -0.1327177  0.3161729 -0.4197632 0.6746585
# MatchupCaptainFalcon;Peach  0.1464518  0.3861823  0.3792297 0.7045173
# MatchupFalco;Peach         -0.4103029  0.3365761 -1.2190496 0.2228254

在这种情况下,只有 3 个参数是可估计的,其余参数固定为零。在模型 BTv2 下,玩家 i 和 j 分别扮演角色 c 和 d,我们有

logit(p(i 演奏 c 击败 j 演奏 d)) = log_ability_i - log_ability_j + U_i - U_j
= 比赛_{c;d} - 比赛_{d;c} + U_i - U_j

其中 U_i 和 U_j 是随机玩家效果。因此,对于具有相同基线能力的玩家来说,例如,

logit(p(CaptainFalcon 击败 Falco)) = -0.1327177 - 0 = -0.1327177
logit(p(Falco 击败 CaptainFalcon)) = 0 - (-0.1327177) = 0.1327177

因此,这可以告诉您在特定的配对比赛中,一个角色是否比另一个角色更受青睐。

让我们回到基于所有数据的 BTv1 模型。在这个模型中,对于具有相同基线能力的玩家,我们有

logit(p(i 演奏 c 击败 j 演奏 d)) = log_ability_i - log_ability_j
= 字符_c - 字符_d

“CharactersBowser”的效果设置为零,其余可估计。所以例如

summary(BTv1)$fixef[c("CharactersFalco", "CharactersPeach"),]
#                 Estimate Std. Error  z value   Pr(>|z|)
# CharactersFalco 2.038925  0.9576332 2.129130 0.03324354
# CharactersPeach 2.119304  0.9508804 2.228781 0.02582845

意味着

logit(p(Bowser 击败 Peach)) = 0 - 2.119304 = -2.119304
logit(p(猎鹰击败桃子)) = 2.038925 - 2.119304 = -0.080379

所以我们仍然可以比较特定比赛中的角色。我们可以使用拟方差来比较角色效果

# add in character with fixed effect set to zero (Bowser)
V <- cbind(XCharactersBowser = 0, rbind(XCharactersBowser = 0, 
vcov(BTv1)))
cf <- c(CharactersBowser = 0, coef(BTv1))
# compute quasi-variances
qv <- qvcalc(V, "XCharacters", estimates = cf,
             labels = sub("Characters", "", names(cf)))
# plot and compare 
# (need to set ylim because some estimates are essentially infinite)
par(mar = c(7, 4, 3, 1)) 
plot(qv, ylim = c(-5, 5))

Plot of character effects with comparison intervals based on quasi standard errors.

参见例如https://doi.org/10.1093/biomet/91.1.65有关拟方差的更多信息。

关于r - R 中的 BradleyTerry2 包 - 使用零假设作为引用玩家,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69892656/

相关文章:

r - 计算 BradleyTerry 能力排名

r - 基 R 中排列之间的 Kendall tau 距离(又名冒泡排序距离)

r - R 中命名参数的顺序求值

r - 如何使用给定类的方法查找所有函数

r - 计算一段时间内的因子水平

r - 将顺序观察与 R 中的当前 ID 值和紧接在前的 ID 值链接在一起