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