我使用 R 中的“mice”包进行了多重插补。之后,我使用“with”和“pool”函数计算了汇总回归分析。
为了进一步分析,我只想查看数据的特定子样本。 我也想使用带有汇总回归分析的估算数据。
但是,我正在努力寻找实现这一目标的方法。这是因为“mice”中的汇总回归分析是通过在“mids”类的对象上使用“with”和“lm”函数来工作的,而不是仅仅在数据帧上调用“lm”。因此,我不能只通过传统方式对数据进行子集化,例如使用方括号或“子集”函数。
我知道理论上我可以使用“完整”函数提取估算数据集,对这些数据集进行回归分析,然后手动汇总结果,但我想避免这种情况。
我想做的一个例子是:
library(mice)
data <- as.data.frame(matrix(data = c(3, 2, 3, 4, 5, NA, 7, 10, 9, NA, NA, 12, 13, 14, 15, 16, NA, 18), nrow = 6))
names(data) <- c("a", "b", "c")
data$Sex <- c("male", "male", "female", "male", "female", "female")
imp <- mice(data = data,
m = 20,
maxit = 10,
seed = 12,
print = FALSE)
现在,我可以使用以下方法进行汇总回归分析:
summary(pool(with(imp, lm(a ~ b + c))))
我正在努力实现的是仅对男性受试者进行传导回归分析。
提前感谢您的帮助!
mice
返回 mids 类的对象,可以使用 filter
: 将其与外部布尔向量进行子集化
filter(imp, data$Sex %in% "male")
# or for more detail
imp_filtered <- filter(imp, data$Sex %in% "male")
imp_filtered$data
# a b c Sex
#1 3 7 13 male
#2 2 10 14 male
#4 4 NA 16 male
此处,外部布尔向量是通过测试数据集中男性是否为
TRUE
或 FALSE
而创建的。
因此,要实现此目的,您可以保存过滤后的对象或稍微修改您的代码:
# save filtered data to new object
imp_filtered <- filter(imp, data$Sex %in% "male")
summary(pool(with(imp_filtered, lm(a ~ b + c))))
# or all in one go
summary(pool(with(filter(imp, data$Sex %in% "male"), lm(a ~ b + c))))