r - 如何循环遍历 lmerTest 输出列表以提取偏差分量

标签 r for-loop lmertest

我正在使用 mitml 包使用 80 个多重插补数据集来估计多级模型。我可以使用 testModels() 命令来比较嵌套模型,但我想查看 80 个单独插补模型中每个模型的模型拟合分量(特别是偏差)并计算总体平均偏差值。

我的模型估计值保存在名为 modelt1mitml.result 列表中。

我可以使用索引提取第一个模型(80 个)的偏差值:

> modelt1[[1]]@devcomp[["cmp"]][["dev"]]
[1] 22637.1

但是,我不确定如何有效地提取并平均所有 80 个值。我知道我需要使用循环,但我不确定如何将循环与这样的索引结合起来。

我的尝试是这样的:

> for(i in modelt1){print(modelt1[[1]]@devcomp[["cmp"]][["dev"]])}
[1] 22637.1

毫不奇怪,这仅返回 modelt1 中第一个模型的偏差。

我尝试用 [[i]] 替换 [[1]],但出现错误。

我还尝试循环遍历所有模型,如下所示:

> for(i in modelt1){print(modelt1)}

但是,当我只想要偏差值时,这当然提供了所有 80 个模型的完整摘要输出。

如何编写一个循环来打印所有 80 个偏差值?

最佳答案

你很接近。诀窍是使用序列i in 1:length(fit)。仅 i in fit 只会产生一个值,这就是为什么您只能得到一个系数的原因。

for (i in 1:length(fit)) print(fit[[i]]@devcomp[["cmp"]][["dev"]])
# [1] 8874.517
# [1] 8874.517
# [1] 8874.517
# [1] 8874.517
# [1] 8874.517

但是,由于 R 是一种矢量化语言,我建议(在大多数情况下)不要使用 for 循环并习惯 sapply & Co.出于速度和方便的原因。

示例:

library(mitml)
fml <- ReadDis + SES ~ ReadAchiev + (1|ID)
imp <- panImpute(studentratings, formula=fml, n.burn=1000, n.iter=100, m=5)
implist <- mitmlComplete(imp, print=1:5)

library(lme4)
fit <- with(implist, lmer(ReadAchiev ~ (1|ID), REML=FALSE))

sapply(seq(fit), function(i) fit[[i]]@devcomp[["cmp"]][["dev"]])
# [1] 8874.517 8874.517 8874.517 8874.517 8874.517

关于r - 如何循环遍历 lmerTest 输出列表以提取偏差分量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56066573/

相关文章:

javascript - 对于 javascript 中的循环速度性能

php - 如果行值类似于第一行,则如何自动递增 1 并附加小数,否则为 2

python - python在for循环之前卡住列表吗?

r - 模拟混合线性模型并使用 R 中的 lmerTest 对其进行评估

r - 为 Plotly 修改 y 轴上的字体大小

r - 使用 Rcpp 将 R data.frame 中的因子列转换为日期列

read.fwf 反转所有数字的符号

r - data.table ':' 中的 nomatch 未正确更新