从混合模型中对 R 中的新数据进行仅固定效应的预测

机器算法验证 r 混合模式
2022-03-28 16:24:23

我想在仅使用固定效应的新数据集上构建混合模型(通过 glmer 进行逻辑)的预测,将随机效应保持为 0。但我无法设置模型矩阵来计算它们。

由于 mer 类没有 predict 方法,并且由于我想省略对新数据集的预测的随机效应,我认为我需要为原始中使用的相同结构的固定效应构建一个模型矩阵模型,但使用新数据。然后乘以模型中的固定效应系数。

我的模型公式的固定效应部分包含数字固定效应之间的因子和交互项,因此它比仅从矩阵中提取固定变量要复杂一些。例如,我需要确保因子对比扩展与原始相同,正确列出交互项等。

所以我的问题是:构建一个新模型矩阵的更直接的通用方法是什么,它模仿了用于创建模型的原始模型矩阵的结构?

我已经尝试过 model.matrix(my.model, data=newdata) 但这似乎返回了原始模型矩阵,而不是基于 newdata 的模型矩阵。

示例代码:

library(lme4)

cake2 <- head(cake) # cake2 is "new" data frame for future predictions

# recipe is a fixed effect factor, temp is fixed effect numeric, replicate is random effect
m <- lmer(angle ~ temp + recipe + (1 | replicate), data=cake)
summary(m)

nrow(cake2)         # but new data frame has 6 rows
nrow(cake)          # original data frame has 270 rows

# attempt to make new model matrix using different data frame
mod.mat.cake2 <- model.matrix(m, data=cake2)
nrow(mod.mat.cake2) # 270 rows, same as orig data frame

我尝试了其他方法,例如从公式中提取术语并从中构建新公式,但它似乎过于复杂,并且在处理因子和交互项方面很脆弱。

如何根据 m 中的公式使 mod.mat.cake2 成为固定效应模型矩阵,但使用 cake2 中的值?或者有没有更简单的方法可以从 lmer 模型中获得仅固定效应的预测?

感谢所有帮助。谢谢你。

1个回答

也许这是作弊,但是

fixedformula <- as.formula(lme4.0:::nobars(formula(m))[-2])
model.matrix(fixedformula,newdata=cake2)

笔记:

  • 我在lme4.0这里使用的是“旧”(CRAN)的 r-forge 版本lme4:您可以在上面lme4lme4.0代码中替换
  • 新的(r-forge/development)版本lme4有一个predict方法:在这种情况下

    predict(m,re.form=NA,newdata=cake2)
    

工作正常(re.form=NA将所有随机效果设置为零,相当于level=0旧的predict.lme