在R和modelsummary中有没有一种方法来堆叠由边际效应产生的比较表

e4yzc0pl  于 2023-05-04  发布在  其他
关注(0)|答案(1)|浏览(132)

我运行了几次线性回归,并从marginaleffects包的avg_comparisons函数中获得了比较结果,然后将其与modelsummary包的shape = term : contrast ~ model选项参数进行了比较,以连接术语和对比度。这将产生所需的表的第一部分。现在我想做两个面板并把它们叠起来。在标准回归中,这对于shape = "rbind"函数来说非常好用,但当我需要连接term和contrast时就不行了。在shape选项的语法中是否有一种方法可以将这两种不同的行为结合起来?或者是否有其他方法来实现面板的堆叠?
我运行以下代码来生成比较

vars <- c("var1", "var2", "var3")

panel1 <- vars %>%
    paste(., "~ Treatment") %>%
    map(as.formula) %>%
    map(lm, data = df) %>% 
    map(avg_comparisons, variables = "Treatment", vcov = "hc1") 
modelsummary(panel1, shape = term : contrast ~ model)

这对一个小组产生了期望的结果。然后我试着添加另一个面板

vars <- c("var4", "var5")

panel2 <- vars2 %>%
    paste(., "~ Treatment") %>%
    map(as.formula) %>%
    map(lm, data = df) %>% 
    map(avg_comparisons, variables = "Treatment", vcov = "hc1") 

panels(list(panel1, panel2))

modelsummary(panels, shape = term : contrast ~ model)

这产生了一个错误,因为当shape不是“rbind”时,modelsummary不接受输入作为列表。

4nkexdtk

4nkexdtk1#

不幸的是,我现在想不出一个完全自动的方法来做到这一点。你可以做的是按步骤进行:创建modelsummary_list的中间表示,合并标签,并将结果反馈给modelsummary。示例:

library(modelsummary)
library(marginaleffects)

# fit
mod <- list(
  lm(mpg ~ am + factor(cyl), data = mtcars),
  lm(mpg ~ hp + am + factor(cyl), data = mtcars)
)

mod <- lapply(mod, avg_comparisons)

# intermediate representation
tab <- modelsummary(mod, output = "modelsummary_list")

# combine labels
tab[[1]]$tidy$term <- paste(tab[[1]]$tidy$term, tab[[1]]$tidy$contrast)
tab[[2]]$tidy$term <- paste(tab[[2]]$tidy$term, tab[[2]]$tidy$contrast)

# back to modelsummary
modelsummary(tab, shape = "rbind", gof_map = "nobs")

相关问题