r - 使用 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 类或汇集回归输出的对象进行交互绘图。
解决方案
我以老鼠包中的步行数据为例。获取交互图(一种交互图的井版)的一种方法是使用 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()
推荐阅读
- anylogic - 绘制实验结果图表
- python - 乌龟文本增加了一个看似随机的数量,我该如何解决这个问题?
- c++ - 我的除法函数返回零。我应该在 main 中以不同的方式声明 x 吗?
- spring-boot - Redis 重启后,Redis 消息被 Spring Boot 应用程序消费
- shell - 获取所有用户权限为 rw 的文件
- ruby-on-rails - 是否可以在 dev 运行时更新扩展内容?- Solidus,Ruby On Rails
- python - 如何打印用户输入的总数?
- javascript - 跨域 SignalR 导入问题
- c# - 如何通过属性 => 包菜单的反射读取包 ID 的值?
- sql - 排名日期基于今天的日期