【发布时间】:2022-08-09 17:35:44
【问题描述】:
我从现有数据框中创建了一个lavaan 模型,并使用该模型生成了一个数据框列表(每个数据框中缺少一些数据)。然后我进行多重插补以创建mids 对象列表(以解决丢失的数据),然后使用semTools::runMI 将原始lavaan 模型拟合到每个mids 对象。我的最终产品是lavaan.mi 对象列表。 (我可以很容易地单独生成每个lavaan.mi 对象的摘要,或者我可以制作另一个lavaan.parameterEstimates/lavaan.data.frame 对象列表)。
现在我在一个名为final_imp 的列表中有一个这些lavaan.mi 对象的列表,有没有办法将lavaan.mi 对象集中到一个lavaan.parameterEstimates 对象中?还是因为技术上每个lavaan.mi 对象都来自其自己独特的数据框(从原始模型生成之后),所以这是不可能的吗?
set.seed(123)
suppressMessages(library(mice))
suppressMessages(library(lavaan))
suppressMessages(library(simsem))
suppressMessages(library(semTools))
suppressMessages(library(tidyverse))
data(mtcars)
model <- \'gear ~ carb\'
fit <- sem(model, data = mtcars)
make_missing <- miss(package = \"mice\", m = 2, maxit = 2, seed = 123)
biglist <- sim(
nRep = 10,
model = fit,
n = 5,
rawData = mtcars,
miss = make_missing,
lavaanfun = \"sem\",
modelBoot = TRUE,
seed = 123,
dataOnly = TRUE)
#> Progress: 1 / 11
#> Progress: 2 / 11
#> Progress: 3 / 11
#> Progress: 4 / 11
#> Progress: 5 / 11
#> Progress: 6 / 11
#> Progress: 7 / 11
#> Progress: 8 / 11
#> Progress: 9 / 11
#> Progress: 10 / 11
#> Progress: 11 / 11
run_mi <- function(x) {
mice::mice(x, m = 2, maxit = 2, seed = 123, printFlag = FALSE)
}
df_imp <- purrr::map(biglist, run_mi)
#> Warning: Number of logged events: 4
#> Warning: Number of logged events: 1
#> Warning: Number of logged events: 1
#> Warning: Number of logged events: 1
#> Warning: Number of logged events: 3
#> Warning: Number of logged events: 1
#> Warning: Number of logged events: 1
#> Warning: Number of logged events: 2
class(df_imp)
#> [1] \"list\"
class(df_imp[[1]])
#> [1] \"mids\"
run_sem <- function(x) {
runMI(model = model, data = x, fun = \"sem\", miPackage = \"mice\", seed = 123)
}
final_imp <- purrr::map(df_imp, run_sem)
class(final_imp)
#> [1] \"list\"
length(final_imp)
#> [1] 10
class(final_imp[[1]])
#> [1] \"lavaan.mi\"
#> attr(,\"package\")
#> [1] \"semTools\"
标签: r montecarlo r-mice r-lavaan structural-equation-model