在估算数据集上使用 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))
})
我发现很难理解如何在 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))
})