【发布时间】:2021-12-14 18:24:04
【问题描述】:
我想高效地在R中使用dplyr进行回归插补。这是我的问题:我有一个数据集,其中一列有许多缺失值 - 我们称之为p。现在我想用回归插补方法估计p 的缺失值。为此,我使用未经审查的数据(p 没有缺失值的数据集的子集)使用 OLS 对一组变量进行回归 p。然后我用估计的系数来计算p的缺失值。
我的数据集是这样的:
df = data.frame(
id = c(1, 1, 1, 2, 2, 2),
group = c(1, 1, 2, 1, 1, 2),
sub_group = c(1, 2, 3, 1, 2, 3),
p = c(4.3, 5.7, NA, NA, NA, 10),
var1 = c(0.3, 0.1, 0.4, 0.9, 0.1, 0.2),
var2 = c(0, 0, 0, 1, 1, 1)
)
其中id 代表个人,他们从group(例如“食物”)和subgroups(例如“面包”)购买商品。 p 是价格,而 var1 和 var2 是一些人口统计变量(如“教育”和“年龄”)。
到目前为止我做了什么:
library(dplyr)
df <- as_tibble(df)
# Create uncensored data
uncensored_df <- df %>%
filter(!is.na(p))
# Run regression on uncensored data
imp_model <- lm(p ~ var1 + var2, data = uncensored_df)
# Get the coefficients of the fitted model
coefs <- unname(imp_model$coefficients)
# Use coefficients to compute missing values of p
censored_df <-df %>%
filter(is.na(p)) %>%
group_by(id, group, sub_group) %>%
mutate(p = coefs[1] + coefs[2] * var1 + coefs[3] * var2)
# And finally combine the two subsets
bind_rows(uncensored_df, censored_df) %>% arrange(id, group, sub_group)
由于我在实际问题中使用的不仅仅是 var1 和 var2(大约 30 个变量),使用 dplyr 进行回归插补的更好方法是什么? (不过,我也对非 dplyr 解决方案持开放态度。)
【问题讨论】:
-
你看过
mice包吗? -
我不知道那个包。我会检查一下。谢谢。
标签: r dplyr regression imputation