我有一个具有mod <- lmer(value ~ time + study + (1|participant))
形式因子的模型,其中我对研究系数并不真正感兴趣,但由于各种原因,我希望将其保持固定。但我想在不受研究系数影响的情况下从mod
进行预测。我已经对学习因子进行了求和编码,所以我真的只需要一种方法来去除学习系数。
根据系数手动计算预测似乎有点麻烦。我想一个替代方案是用零替换研究系数(替换R中的lmer系数(
有更好的主意吗?
一个最小的例子:
library("lme4")
df <- data.frame(
participant = as.factor(c(1,1,1,2,2,2,3,3,3,4,4,4)),
time = as.factor(c(1,2,3,1,2,3,1,2,3,1,2,3)),
study = as.factor(c("A", "A", "A", "B", "B", "B", "A","A", "A", "C", "C", "C")),
value = c(1,2,3,3,4,1,3,5,3,1,7,2)
)
contrasts(df$study) = contr.sum(length(unique(df$study)))
mod <- lmer(value ~ time + study + (1|participant), data = df)
predict(mod, newdata = data.frame(time = as.factor(c(1,2,3))), re.form=NA)
这对我来说没有多大意义。如果你想忽略study
的影响,你只需将其排除在用于预测的模型之外。如果你想把它包括在你的模型中,你需要把它包含在预测中。
假设您只想使用time
进行预测。您可以通过为想要预测的time
的每个值复制整个study
列并对结果取平均值来提供study
的加权平均值:
mod <- lmer(value ~ time + study + (1|participant), data = df)
pred_df <- data.frame(time = as.factor(rep(c(1,2,3), each = nrow(df))),
study = rep(df$study, 3))
preds <- predict(mod, newdata = pred_df, re.form = NA)
tapply(preds, pred_df$time, mean)
#> 1 2 3
#> 2.00 4.50 2.25
不过,请注意,这相当于将study
完全排除在模型之外:
mod <- lmer(value ~ time + (1|participant), data = df)
predict(mod, newdata = data.frame(time = as.factor(c(1,2,3))), re.form = NA)
#> 1 2 3
#> 2.00 4.50 2.25