如何使用 R 构建不同广义线性模型的平均部分效应的漂亮表格?

How can I build nice tables of average partial effects of different generalized linear models with R?

我正在估计具有多个变量的 logit 模型,并希望以这种方式巧妙地显示模型的平均部分效应 (APE):

基本上,显示一个类似于 stargazer 命令为任何类型的 lmglm 对象生成的 table,但使用 APE 而不是斜率系数及其标准误差,而不是斜率系数的标准误差。

我的代码是这样的:

# Estimate the models 

fit1<-glm(ctol ~ y16 + polscore + age,
          data = df46,
          family = quasibinomial(link = 'logit'))

fit2<-glm(ctol ~ y16*polscore + age,
          data = df46,
          family = quasibinomial(link = 'probit'))

fit3<-glm(ctol ~ y16 + polscore + age + ed,
          data = df46,
          family = quasibinomial(link = 'logit'))

# Calculate marginal effects

me_fit1<-margins_summary(fit1)
me_fit2<-margins_summary(fit2)
me_fit3<-margins_summary(fit3)

margins_summary 对象的输出虽然本身是一个 data.frame 对象,但不能仅传递给 stargazer 以产生与 [=15] 相同的漂亮输出=] 对象,就像我之前代码中的 fit1

> me_fit1

   factor     AME     SE       z      p   lower   upper
      age -0.0031 0.0005 -5.8426 0.0000 -0.0041 -0.0020
 polscore  0.0033 0.0031  1.0646 0.2871 -0.0028  0.0093
      y16  0.1184 0.0166  7.1271 0.0000  0.0859  0.1510

尝试将 me_fit1 传递给 stargazer 只是打印 data.frame 摘要统计信息,因为 stargazer 通常会处理此类对象。

> stargazer(me_fit1, type = 'text')

=========================================================
Statistic N Mean  St. Dev.  Min   Pctl(25) Pctl(75)  Max 
---------------------------------------------------------
AME       3 0.040  0.068   -0.003  0.0001   0.061   0.118
SE        3 0.007  0.009   0.001   0.002    0.010   0.017
z         3 0.783  6.489   -5.843  -2.389   4.096   7.127
p         3 0.096  0.166     0       0       0.1      0  
lower     3 0.026  0.052   -0.004  -0.003   0.042   0.086
upper     3 0.053  0.085   -0.002  0.004    0.080   0.151
---------------------------------------------------------

我尝试使用 stargazer 中的 coefse 选项将 stargazer(fit1) 的系数更改为 APE 及其错误。虽然显示 APE 很简单,但试图显示它们的标准误差是有问题的,因为它无法找到变量的名称以便将它们与它们的系数(在本例中是它们的 APE)相匹配。

请帮忙!由于这个问题,我一直无法提供像样的结果。你可以看到一个 MWE here.

您可以结合使用 modelsummarymarginaleffects 包来完成此操作。 (重要免责声明:我维护这两个包。)

You can install modelsummary from CRAN:

install.packages("modelsummary")

You can install marginaleffects from Github(警告:这个包还很年轻,仍在开发中):

library(remotes)
install_github("vincentarelbundock/marginaleffects")

加载库并拟合两个模型。将这两个模型存储在列表中:

library(marginaleffects)
library(modelsummary)

mod <- list(
    glm(am ~ mpg, data = mtcars, family = binomial),
    glm(am ~ mpg + factor(cyl), data = mtcars, family = binomial))

现在,我们要将 marginaleffects 函数应用于两个模型,因此我们使用 lapply 将其应用于列表的每个元素:

mfx <- lapply(mod, marginaleffects)

最后我们调用 modelsummary 并将 output 参数设置为 "markdown" 因为 Markdown 表格在 Stack Overflow 上看起来不错:

modelsummary(mfx, output = "markdown")
Model 1 Model 2
mpg 0.046 0.056
(0.017) (0.035)
factor(cyl)6 0.097
(0.174)
factor(cyl)8 0.093
(0.237)
Num.Obs. 32 32
AIC 33.7 37.4
BIC 36.6 43.3
Log.Lik. -14.838 -14.702