我正在使用估算数据来测试一系列回归模型,包括一些调节模型。
插补
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)
#---------------------------------------#
# 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 类对象或汇集回归输出的对象进行交互绘图。
答案 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()
答案 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
的三向交互图。