考虑一个简单的例子:
> library(lme4)
Loading required package: lattice
Loading required package: Matrix
> set.seed(1)
> df <- data.frame(x = c(rnorm(7), NA), y = rep(c("A", "B"), 4))
> length(fitted(lm(data = df, x ~ y, na.action = na.exclude)))
[1] 8
这表现得如我所料。虽然第 8 次观察没有拟合值,因为 x 是该行的 NA,所以拟合值用 NA“填充”,使它们的长度与输入数据帧 df 中的行数相同,这非常便利。但是调用 na.action = na.exclude 在 lme4 中不再具有相同的效果。
> length(fitted(lmer(data = df, x ~ (1 | y), na.action = na.exclude)))
[1] 7
我相当肯定,在旧版本的 lme4 中,长度为 8,最后一个值为 NA,就像 lm() 一样。
如何让 lmer 以与 lm 相同的方式运行 --- 用 NA(在适当的位置)填充拟合向量,使其长度与输入数据帧中的行数相同?
更一般地说,关于 na.action 和 na.exclude 正在做什么和/或打算在这里做什么,我是否遗漏了什么?
我的目标是在应用于 lmer 模型对象时获得 fit() 以返回一个向量,该向量的长度与输入数据帧的行数相同(并且顺序相同!),并且 NA 在“适当的“地点。有没有一种简单的方法可以做到这一点?
谢谢,
戴夫凯恩
更新:感谢 Ben Bolker 的工作!虽然 predict() 与fitted() 不同,但使用它确实解决了我的主要问题。
> sessionInfo()
R version 3.0.2 (2013-09-25)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] lme4_1.0-5 Matrix_1.1-0 lattice_0.20-23
loaded via a namespace (and not attached):
[1] grid_3.0.2 MASS_7.3-29 minqa_1.2.1 nlme_3.1-111 splines_3.0.2 tools_3.0.2