有什么办法可以同时使用mouse软件包和gWQS软件包?

时间:2019-07-18 02:36:11

标签: r imputation r-mice

我正在尝试使用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

1 个答案:

答案 0 :(得分:1)

您已经注意到,mice()产生一个列表,即所有变量及其插补的列表,在您的情况下为两个插补,因为您选择了{{ 1}}。这就是多重​​插补的工作方式。这是一个m=2数据包含在nhanes中的示例:

mice

如果您使用OLS,则标准方法是使模型适合此列表,然后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 # [...] 将结果拟合。 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中包含一个complete()函数,该函数会产生一个mice,您还可以使用它进行汇总计算。但是,应谨慎使用它,即使用"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"个指标的每个子集计算gwqs模型。

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

但是,要进一步详细说明这对于Stack Overflow来说太过分了。如果您不知道该怎么做,则需要咨询统计学家,或在Cross Validated询问如何做。

至少这是将".imp"mice一起使用的一种方式。