使用 MICE 插补在适度回归中绘制交互项

时间:2021-05-21 10:36:55

标签: r plot regression linear-regression r-mice

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

插补

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

然后我将其转换为长格式,以便我可以根据需要对变量进行重新编码/求和,然后再转回中格式

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)

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

谢谢

编辑:可重现的示例

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)

Sample continuous and categorical plots

#---------------------------------------#
# 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 类对象或汇集回归输出的对象进行交互绘图。

2 个答案:

答案 0 :(得分:2)

我以来自 mouse 包的步行数据为例。获取交互图(一种交互图的良好版本)的一种方法是使用 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()

plot from mice model

答案 1 :(得分:0)

emmeans 包允许您从 mira 对象中提取交互效果。 Here 是一个温和的介绍。之后,可以使用适当的 ggplot 绘制相互作用。这个例子是针对分类变量的,但可以扩展到连续的情况 - 在 emmeans 部分之后,事情变得相对简单。

library(ggplot2)
library(ggstance)
library(emmeans)
library(khroma)
library(jtools)


lm_mi <- with(mi_d,lm(qsec ~ gear*carb))

#extracting interaction effects
emcatcat <- emmeans(lm_mi, ~gear*carb)
tidy <- as_tibble(emcatcat)

#plotting
pd <- position_dodge(0.5)

ggplot(tidy, aes(y=gear, x=emmean, colour=carb)) + 
geom_linerangeh(aes(xmin=lower.CL, xmax=upper.CL), position=pd,size = 2) +
geom_point(position=pd,size = 4)+
ggtitle('Interactions') +
labs (x = "aggreageted interaction effect") +
scale_color_bright() +
  theme_nice()

只要您有第三个分类交互项,就可以将其扩展为带有 facet_grid 的三向交互图。

Categorical interaction plot