如何在R中对多重插补数据的多分类回归按类别合并平均预测
多重插补下多分类回归按类别获取合并平均预测值的问题
我在使用多重插补数据进行多分类回归时,希望按分类变量的不同水平获取合并后的平均预测值,但pool()函数会将所有水平合并,生成单一的平均预测估计值,无法保留按类别分层的结果。以下是我的分步操作示例:
1. 创建分类变量
使用catdata包中的rent数据集,生成两个分类变量:
library("tidyverse") library("catdata") library("mice") library("nnet") library("marginaleffects") data(rent) rent <- rent %>% mutate(rent_cat = factor(case_when( rent < 389.95 ~ "Low price", rent >= 389.95 & rent < 700.48 ~ "Medium price", rent >= 700.48 ~ "High price" ))) %>% mutate(size_cat = factor(case_when( size < 53 ~ "Small", size >= 53 & size < 83 ~ "Medium", size >= 83 ~ "Big" )))
2. 运行链式方程多重插补
micerent <- mice(rent, m = 3)
3. 提取按分类变量水平划分的平均预测值
我构建了自定义函数,在每个插补后的完整数据集上提取预测概率,采用marginaleffects包的avg_predictions函数:
fit_reg <- function(dat) { mod <- multinom(rent_cat ~ size_cat, data = dat) out <- avg_predictions(mod, type = "probs", by = "size_cat") return(out) } micecompleterent <- complete(micerent, "all") model <- lapply(micecompleterent, fit_reg)
4. 合并平均预测值时的问题
此时使用pool()函数合并结果,并未生成按size_cat各水平划分的平均预测估计值,反而将所有分层平均值合并为单一结果:
summary(pool(model), conf.int = T)
我还尝试在marginaleffects包的predictions函数中指定newdata=datagrid(size_cat=c("Big","Medium","Small")),但得到的结果依然相同:
fit_reg_response <- function(dat) { mod <- multinom(rent_cat ~ size_cat, data = dat) out <- predictions(mod, newdata = datagrid(size_cat = c("Big","Medium","Small"))) return(out) }
内容的提问来源于stack exchange,提问作者usual_user16960220
相关产品推荐
相关产品推荐

