【发布时间】:2022-01-10 21:09:30
【问题描述】:
对于我正在从事的项目的数据分析,我必须执行潜在类别增长分析 (LCGA) 来识别我的结果变量随时间推移的不同轨迹。由于我有许多缺失的变量,我首先必须使用多重插补来构建完整的数据集,然后我可以将其用于 LCGA。 我设法弄清楚了我在学习如何执行插补和 LCGA 时遇到的大部分问题/问题,但我不知道如何在插补数据集上运行 LCGA,然后将结果汇总以获得轨迹基于汇总结果。
使用的包:
library(tidyverse)
library(mice)
library(miceadds)
library(micemd)
library(parallel)
library(lcmm)
我的插补代码是数据集“数据”:
set.seed(2555)
#create a predictormatrix to use in the mice function
pred <- quickpred(data, mincor = 0.5, minpuc = 0.3)
#parallel mice function to speed up computation, using a CPU with 32 logical cores and maxit=0 to keep computational times low as I test the code
imputed <- parlmice(data, n.core = 31, n.imp.core = 1, pred = pred, maxit=0, cluster.seed = 2555)
此时我遇到的问题是 LCGA 需要长格式的数据才能工作。所以此时我必须将 parlmice 函数创建的 mids 对象转换为数据框。然后将数据帧转换为 LCGA 的长格式并像这样运行 LCGA:
#create dataframe from mids object 'imputed'
lcmm <- complete(imputed, include = FALSE)
#convert dataframe 'lcmm' to long format based on the outcome variable measured at different time points
lcmmlong <- NA
lcmmlong <- lcmm %>% select(ID, x_1:x_14) %>% pivot_longer(
cols = c('x_1': 'x_14'),
names_to = "time",
names_prefix = "x_",
names_sep = NULL,
names_pattern = NULL,
names_ptypes = list(),
names_transform = list(),
names_repair = "check_unique",
values_to = "x",
values_drop_na = TRUE,
values_ptypes = list(),
values_transform = list()
)
#run lcga on the long formate dataframe
lcga1 <-hlme(x ~ time, random=~-1, subject = "ID", ng = 1, data = lcmmlong)
lcga2 <-gridsearch(rep = 100, maxiter = 10, minit = lcga1,hlme(x ~ time, random=~-1, subject = "ID", ng = 2, data = lcmmlong, mixture = ~ time))
lcga3 <-gridsearch(rep = 100, maxiter = 10, minit = lcga1,hlme(x ~ time, random=~-1, subject = "ID", ng = 3, data = lcmmlong, mixture = ~ time))
这当然行不通,因为 complete() 函数将所有插补数据集扔到同一个数据框中。我可以以长格式或宽格式执行此操作,但无论哪种方式,LCGA 都无法在此数据帧上运行。 解决方案是在插补中的每个单独的数据集上运行 LCGA,然后汇集结果。我已经为几种不同的分析找到了解决方案,例如来自“mice”包本身的示例:
imp <- mice(nhanes, seed = 123, print = FALSE)
fit <- with(imp, lm(chl ~ age + bmi + hyp))
est1 <- pool(fit)
但是,我不知道如何将从宽格式到长格式数据帧的转换以及不同的 lcga 步骤添加到mice()、with() 和 pool() 工作流程中。 据我所知,我必须在每个估算的数据库上单独手动运行 LCGA,然后手动合并结果。
#Extract imputed databases one by one for databases 1 through n.
lcmmn <- complete(imputed, action = n, include = FALSE)
即便如此,运行 lcga 是一回事,但需要采取更多行动来确定最佳轨迹数等等。 所以我的问题是: 如何在估算的数据库上运行 LCGA 并汇集结果,然后我可以使用这些结果来确定最佳轨迹数?
【问题讨论】:
标签: r imputation r-mice