首页 > 解决方案 > 使用 MICE 插补在调节回归中绘制交互项

问题描述

我正在使用估算数据来测试一系列回归模型,包括一些调节模型。

插补

imp_data <- mice(data,m=20,maxit=20,meth='cart',seed=12345)

然后我将其转换为长格式,以便我可以根据需要重新编码/求和变量,而不是返回到 mids 格式

impdatlong_mids<-as.mids(impdat_long)

示例模型:

model1 <- with(impdatlong_mids,
               lm(Outcome ~ p1_sex + p2 + p3 + p4
                  + p5+ p6+ p7+ p8+ p9+ p10
                  + p11+ p1_sex*p12+ p1_sex*p13 + p14)

在非估算数据中,为了创建显着交互的图形表示,我会使用(例如)

interact_plot (model=model1, pred = p1_sex, modx = p12)

这不适用于估算数据/中间对象。有没有人使用估算数据绘制交互,并能够提供帮助或分享示例?

谢谢

编辑:可重现的例子

library(tidyverse)
library(interactions)
library(mice)
# library(reprex) does not work with this
set.seed(42)
options(warn=-1)

#---------------------------------------#
# Data preparations

# loading an editing data
d <- mtcars
d <- d %>% mutate_at(c('cyl','am'),factor)

# create missing data and impute it
mi_d <- d
nr_of_NAs <- 30
for (i in 1:nr_of_NAs) {
  mi_d[sample(nrow(mi_d),1),sample(ncol(mi_d),1)] <- NA
}


mi_d <- mice(mi_d, m=2, maxit=2)
#---------------------------------------#
# regressions

#not imputed
lm_d <- lm(qsec ~ cyl*am + mpg*disp, data=d)

#imputed dataset
lm_mi <- with(mi_d,lm(qsec ~ cyl*am + mpg*disp))
lm_mi_pool <- pool(lm_mi)

#---------------------------------------#
# interaction plots
# not imputed

#continuous
interactions::interact_plot(lm_d, pred=mpg,modx=disp, interval=T,int.width=0.3)


#categorical
interactions::cat_plot(lm_d, pred = cyl, modx = am)

采样连续图和分类图

#---------------------------------------#
# interaction plots
# imputed

#continuous
interactions::interact_plot(lm_mi_pool, pred=mpg,modx=disp, interval=T,int.width=0.3)
# Error in model.frame.default(model) : object is not a matrix

#categorical
interactions::cat_plot(lm_mi_pool, pred = cyl, modx = am)
# Error in model.frame.default(model) : object is not a matrix

问题似乎是,interact_plot、cat_plot 或任何其他可用的包都不允许(至少是分类的)与 mipo 类或汇集回归输出的对象进行交互绘图。

标签: rplotregressionlinear-regressionr-mice

解决方案


我以老鼠包中的步行数据为例。获取交互图(一种交互图的井版)的一种方法是使用 gtsummary 包。在引擎盖下,它将model1使用pool()小鼠对模型进行平均,然后使用 和 的组合tbl_regression()输出plot()模型中的系数图。tbl_regression()函数就是调用函数的对象pool()

library(mice)
library(dplyr)
library(gtsummary)
imp_data <- mice(mice::walking,m=20,maxit=20,meth='cart',seed=12345)

model1 <- with(imp_data,
     lm(age ~ sex*YA))


model1 %>% 
      tbl_regression() %>% 
      plot()

小鼠模型图


推荐阅读