You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 19:28:37