2

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

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

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

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

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

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

4

1 回答 1

2

您可以使用该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

编辑:对于BTv2具有对数能力建模的模型~ Matchup+(1|ID)

在调查个别比赛之前,我们应该检查一下这个词的整体意义。不幸的是anova(),BTm 对象的方法目前不适用于具有不可估量参数的术语,例如在这种情况下。所以我们将直接计算:

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
= Matchup_{c;d} - Matchup_{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
= Characters_c - Characters_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 beats Peach)) = 0 - 2.119304 = -2.119304
logit(p(Falcon beats Peach)) = 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))

基于准标准误差的具有比较区间的字符效应图。

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

于 2021-11-29T16:55:47.837 回答