如何遍历lmerTest输出列表以提取偏差组件

时间:2019-05-09 19:46:27

标签: r lmertest

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

我的模型估算值保存在名为mitml.result的{​​{1}}列表中。

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

modelt1

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

我的尝试是这样的:

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

毫不奇怪,这仅返回> for(i in modelt1){print(modelt1[[1]]@devcomp[["cmp"]][["dev"]])} [1] 22637.1 中第一个模型的偏差。

我尝试将modelt1替换为[[1]],但出现错误。

我还试图遍历所有这样的模型:

[[i]]

但是,当我只需要偏差值时,当然可以为所有80个模型提供完整的摘要输出。

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

1 个答案:

答案 0 :(得分:2)

你很近。诀窍是使用序列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