在估算数据集上使用 lapply 函数 (MICE)

Use lapply function on imputed datasets (MICE)

我发现很难理解如何在 R 中的估算数据集上使用 lapply。

这是示例数据集的代码(有 6 个变量:“臭氧”、“Solar.R”、“风”、“温度”、“月”、“日”):

data <- airquality
data[4:10,3] <- rep(NA,7)
data[1:5,4] <- NA

tempData <- mice(data,m=5,maxit=50,meth='pmm',seed=500)

之后,让我们运行对估算数据集进行线性回归。

> reg1
call :
with.mids(data = tempData, expr = lm(Ozone ~ Wind))

call1 :
mice(data = data, m = 5, method = "pmm", maxit = 50, seed = 500)

nmis :
  Ozone Solar.R    Wind    Temp   Month     Day 
     37       7       7       5       0       0 

analyses :
[[1]]

Call:
lm(formula = Ozone ~ Wind)

Coefficients:
(Intercept)         Wind  
     92.401       -5.067  
[...] 

到目前为止,还不错。

现在我想知道是否可以使用lapply对多个因变量进行回归分析并将它们存储在列表类型对象中。下面,你可以看到我失败的尝试。

> variables_subset<-c("Ozone","Solar.R", "Temp")
> models<-lapply(tempData[,variables_subset],
+                function(x) (with(tempData, lm(x ~  Wind))))
Error in tempData[, variables_subset] : incorrect number of dimensions

有没有办法让这段代码起作用?

我不确定这是否正是您想要做的,但这里有一些建议:

  • tempData 不是数据帧(tempData$data 是)所以你不能直接对它进行子集化。
  • 我在这里使用 reformulate 创建应用于 lm
  • 的公式
  • 我没有遍历 lapply 中的列值,而是遍历列名,这也使得构建公式变得容易。

所以尝试:

variables_subset<-c("Ozone","Solar.R", "Temp")
lapply(variables_subset,function(x)  
          lm(reformulate("Wind", x), data = tempData$data))

#[[1]]

#Call:
#lm(formula = reformulate("Wind", x), data = tempData$data)

#Coefficients:
#(Intercept)         Wind  
#     99.166       -5.782  


#[[2]]

#Call:
#lm(formula = reformulate("Wind", x), data = tempData$data)

#Coefficients:
#(Intercept)         Wind  
#   189.5896      -0.3649  


#[[3]]

#Call:
#lm(formula = reformulate("Wind", x), data = tempData$data)

#Coefficients:
#(Intercept)         Wind  
#     89.982       -1.142  

要使用推算数据集获取嵌套列表,您可以尝试:

dat <- mice::complete(tempData, "long", inc = TRUE)

model_list <- lapply(split(dat, dat$.imp), function(x) {
                 lapply(variables_subset,function(y)  
                     lm(reformulate("Wind", y), data = x))
               })