gpt4 book ai didi

r - na.action = na.exclude 在 lme4 1.0-5 中使用 lmer 的行为与 lm 和旧版本的 lme4 不一致

转载 作者:行者123 更新时间:2023-12-02 12:40:59 27 4
gpt4 key购买 nike

考虑一个简单的例子:

> 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 中的行数相同,这非常适合便利。但在 lme4 中调用 na.action = na.exclude 不再具有相同的效果。

> 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 正在执行和/或打算执行的操作?

我的目标是让fitting()在应用于lmer模型对象时,返回一个向量,其长度与输入数据帧的行数相同(并且顺序相同!),并且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

最佳答案

作为一种快速解决方法,您可以使用predict(不带其他参数)而不是fitted:

length(predict(lmer(data = df, x ~ (1 | y), na.action = na.exclude)))
## 8

(这是 1.1-1 而不是 1.0-5,但我认为结果是相同的)。

关于r - na.action = na.exclude 在 lme4 1.0-5 中使用 lmer 的行为与 lm 和旧版本的 lme4 不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19668783/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com