我设法从 github 上使用 LME4 的可爱的人们那里获得了一些帮助;对于将来遇到此问题的任何人,请注意以下几点:
-
我已向列出的 LMERConvenienceFunctions 维护者发送电子邮件,要求他们更新 CRAN 版本,使其遵守 CRAN 规则。希望他能做到。
-
对于那些使用 LME4 和 LMERConvenienceFunctions 但不使用 lmerTest 的用户的修复,最近 anova 表头“Chi Df”和“Df”分别更新为“Df”和“npar”(原因如下: https://github.com/lme4/lme4/issues/528)。这是 LMERConvenienceFunctions 的问题,因为 pamer.fnc 调用了 Df,因此需要更新为调用 npar。此外,bfFixefLMER_F.fnc 调用 pamer.fnc,因此在更新 pamer.fnc 时已修复。对于不确定如何的人,我使用 getAnywhere() 找到了代码并对其进行了修改,因此只需复制下面的代码并将其粘贴到文件开头附近一次:
pamer.fnc <- function (model, ndigits = 4)
{
if (length(rownames(anova(model))) == 0) {
cat("nothing to evaluate: model has only an intercept.\n\n")
cat("printing model fixed effects:\n")
fixef(model)
}
else {
dims <- NULL
rank.X = qr(model@pp$X)$rank
anova.table = anova(model)
anova.table = cbind(anova.table, upper.den.df = nrow(model@frame) -
rank.X)
p.values.upper = as.numeric()
p.values.lower = as.numeric()
for (term in row.names(anova.table)) {
p.values.upper = c(p.values.upper, round(1 - pf(anova.table[term,
"F value"], anova.table[term, "npar"],
nrow(model@frame) - rank.X), ndigits))
model.ranef <- ranef(model)
lower.bound <- 0
for (i in 1:length(names(model.ranef))) {
dims <- dim(model.ranef[[i]])
lower.bound <- lower.bound + dims[1] * dims[2]
}
p.values.lower = c(p.values.lower, 1 - pf(anova.table[term,
"F value"], anova.table[term, "npar"],
nrow(model@frame) - rank.X - lower.bound))
}
dv <- gsub(" ", "", gsub("(.*)~.*",
"\\1", as.character(model@call)[2]))
ss.tot <- sum((model@frame[, dv] - mean(model@frame[,
dv]))^2)
aov.table <- as.data.frame(anova(model))
expl.dev <- vector("numeric")
for (i in rownames(aov.table)) {
expl.dev <- c(expl.dev, aov.table[i, 2]/ss.tot)
}
names(expl.dev) <- rownames(aov.table)
anova.table = round(cbind(anova.table, upper.p.val = p.values.upper,
lower.den.df = nrow(model@frame) - rank.X - lower.bound,
lower.p.val = p.values.lower, `expl.dev.(%)` = expl.dev *
100), ndigits)
return(anova.table)
}
}
(您可能还需要再次单独运行 bfFixefLMER_F.fnc 的函数脚本,让 R 知道应该从更新版本的 pamer.fnc 调用 bfFixefLMER_F.fnc)
- 对于那些使用 LME4 和 LMERConvenienceFunctions 但也使用 lmerTest 的用户的修复,您需要 1) 使用 numDF 而不是 npar,或 2) 将“anova.table = anova(model)”替换为“anova .table = anova(model, dff = "lme4") 在 lmerTest 3.0 及以后的版本中。这似乎是由于 anova.lmerModLmerTest 函数(在 lmerTest 3.0 中添加)覆盖了对 anova() 的调用,使用 Type III Satterthwaite 分析列在 lme4 之前,导致未指定 dff 时默认为。