我想使用
sjPlot::plot_model
从多个结果数据生成多个交互图。
例如,我正在使用来自
nlme的数据集
MathAchive
并加载这些包
library(nlme)
library(lme4)
library(sjPlot)
library(broom.mixed)
我的目标是:
我想要的结果应该如下所示,但我想应用 DRY 原则并且更喜欢使用
purrr::map
mod_math <-
lmer(MathAch ~ Minority*Sex + (1| School),
data = MathAchieve)
plot_model(mod_math, type = "int")
mod_ses <-
lmer(SES ~ Minority*Sex + (1| School),
data = MathAchieve)
plot_model(mod_ses, type = "int")
我可以使用
purrr::map
获得多个整洁的结果
MathAchieve |>
select(MathAch, SES) |>
map(~ lmer(.x ~ Minority*Sex + (1| School),
data = MathAchieve)) |>
map(~tidy(.x))
但是我在使用
purrr::map
时收到错误,如下所示
MathAchieve |>
select(MathAch, SES) |>
map(~ lmer(.x ~ Minority*Sex + (1| School),
data = MathAchieve)) |>
map(~ plot_model(.x, type = "int"))
MathAchieve |>
select(MathAch, SES) |>
map(~ lmer(.x ~ Minority*Sex + (1| School),
data = MathAchieve) |>
plot_model(., type = "int"))
我应该怎样做才能从具有多个结果的模型中获得多个交互图?
解决问题的一个选项是将
map
应用于结果变量名称的向量,并使用 reformulate
创建公式:
library(nlme)
library(lme4)
library(sjPlot)
library(broom.mixed)
library(purrr)
c("MathAch", "SES") |>
map(~ lmer(
reformulate("Minority * Sex + (1 | School)", .x),
data = MathAchieve
)) |>
map(~ plot_model(.x, type = "int")) |>
set_names(c("MathAch", "SES"))
#> $MathAch
#>
#> $SES