有没有办法一起使用 mice 包和 gWQS 包?

Is there any way to use mice package and the gWQS package together?

我正在尝试使用 mice 包来估算大型数据集的 C1-C3 变量的缺失值。到目前为止,这是有效的。当我尝试使用 gWQS 包来进行混合物效应 X1-X4 化学品时,问题就出现了。

我尝试使用 mice 包来估算协变量的缺失值,然后我尝试使用 gWQS 包中的估算数据框来进行 WQS 回归。但是,我的代码不被接受,因为 imp$imp 是一个列表。我也尝试过 miWQS 包,但是该包对我不想使用的插补方法有限制。

原始数据集包含作为连续结果的 Y X1-X4 作为暴露的连续测量值和 C1-C3 作为协变量,这些协变量用 mice.

估算

使用 mice

的插补模型
imp <- mice::mice(originaldf,m=2, meth=meth, pred=pred, 
                  seed=51162,visitSequence="monotone", pri=FALSE)

toxic_chems=c("X1" , "X2",  "X3", "X4")
set.seed(2019)

library("gWQS")
gwqs(Y ~ C1 C2 C3, mix_name=toxic_chems, data=imp$imp,
     q=4, validation=0.8, valid_var=NULL, b=10, b1_pos=F, b1_constr=F, 
     family="gaussian", seed=2019, wqs2=T, plots=T, tables=T)

错误:

Error in .check.function(formula, mix_name, data, q, validation, valid_var,  : 
                            data must be a data.frame

正如您已经注意到的那样,mice() 生成一个列表,即所有变量及其插补的列表,在您的情况下为 两个 插补,因为您已选择 m=2。这就是多重​​插补的工作原理。这里有一个 nhanes 数据包含在 mice:

中的例子
imp <- mice::mice(nhanes, m=2)
imp$imp
# $age
# [1] 1 2
# <0 rows> (or 0-length row.names)
# 
# $bmi
#       1    2
# 1  30.1 25.5
# 3  27.2 28.7
# 4  20.4 24.9
# [...]
# 
# $hyp
#    1 2
# 1  1 1
# 4  1 2
# 6  1 2
# [...]
# 
# $chl
#      1   2
# 1  187 187
# 4  131 186
# 10 229 187
# [...]

如果您使用 OLS,标准方法是在此列表上拟合模型,然后 pool 结果。 mice 然后是使用包中包含的 lm.mids 方法。

fit <- with(data=imp, exp=lm(bmi ~ age + hyp + chl))
pool(fit)
pool(fit)$pooled[, 1:5]  # shortened
#                estimate         ubar            b            t dfcom
# (Intercept) 20.28615169 1.354978e+01 6.556134e+00 2.338398e+01    21
# age         -3.01670128 1.081655e+00 1.238383e-03 1.083512e+00    21
# hyp          1.89935232 4.074904e+00 2.092851e+00 7.214181e+00    21
# chl          0.04517373 3.813968e-04 5.113178e-06 3.890666e-04    21

这就是你 运行 遇到问题的地方,因为不存在 gwqs.mids 方法(但有 glm.mids 方法),你可能需要写自己安装,或询问包的作者之一。

但是,mice 中包含一个 complete() 函数,它产生一个 "data.frame",您也可以使用它进行合并计算。但是,它应该谨慎使用,即使用 "long" 格式以外的所有格式(即只有一个单一的插补)将是非常错误的。

complete(imp, "long")
#    .imp .id age  bmi hyp chl
# 1     1   1   1 30.1   1 187
# 2     1   2   2 22.7   1 187
# 3     1   3   1 27.2   1 187
# [...]
# 26    2   1   1 25.5   1 187
# 27    2   2   2 22.7   1 187
# 28    2   3   1 28.7   1 187
# [...]
class(complete(imp, "long"))
# [1] "data.frame"

".imp" 变量现在表示插补的数量,您可以为 ".imp" 指标的每个子集计算您的 gwqs 模型。

现在要汇总结果,您必须考虑方差之间和方差之内(参见 Rubin 1987:76)。

不过,要进一步详细说明这一点,对于 Stack Overflow 来说就太过分了。如果您不知道如何执行此操作,则需要咨询统计学家,或通过 Cross Validated 询问如何执行此操作。

至少这是一种同时使用 micegWQS 的方法。