我正在 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))
参见例如https://doi.org/10.1093/biomet/91.1.65有关拟方差的更多信息。
关于r - R 中的 BradleyTerry2 包 - 使用零假设作为引用玩家,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69892656/