【问题标题】:plotting an interaction term in moderated regression using MICE imputation使用 MICE 插补在调节回归中绘制交互项
【发布时间】:2021-08-10 14:02:27
【问题描述】:

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

插补

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

【问题讨论】:

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


【解决方案1】:

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 的三向交互图。

【讨论】:

    【解决方案2】:

    我以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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 2022-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      相关资源
      最近更新 更多