如何循环遍历 lmerTest 输出列表以提取偏差分量
How to loop through a list of lmerTest outputs to extract deviance component
我正在使用包 mitml
使用 80 个乘法插补数据集来估计多级模型。我可以使用 testModels()
命令来比较嵌套模型,但我想查看 80 个单独插补模型中每个模型的模型拟合分量(特别是偏差)并计算总体平均偏差值。
我的模型估计保存在名为 modelt1
的 mitml.result
列表中。
我可以使用索引提取第一个模型(80)的偏差值:
> modelt1[[1]]@devcomp[["cmp"]][["dev"]]
[1] 22637.1
但是,我不确定如何有效地提取和平均所有这些值中的 80 个。我知道我需要使用循环,但我不确定如何将循环与这样的索引结合起来。
我的尝试是这样的:
> for(i in modelt1){print(modelt1[[1]]@devcomp[["cmp"]][["dev"]])}
[1] 22637.1
不出所料,returns 只有 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
我正在使用包 mitml
使用 80 个乘法插补数据集来估计多级模型。我可以使用 testModels()
命令来比较嵌套模型,但我想查看 80 个单独插补模型中每个模型的模型拟合分量(特别是偏差)并计算总体平均偏差值。
我的模型估计保存在名为 modelt1
的 mitml.result
列表中。
我可以使用索引提取第一个模型(80)的偏差值:
> modelt1[[1]]@devcomp[["cmp"]][["dev"]]
[1] 22637.1
但是,我不确定如何有效地提取和平均所有这些值中的 80 个。我知道我需要使用循环,但我不确定如何将循环与这样的索引结合起来。
我的尝试是这样的:
> for(i in modelt1){print(modelt1[[1]]@devcomp[["cmp"]][["dev"]])}
[1] 22637.1
不出所料,returns 只有 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