如何在 stargazer 包中报告标准化模型?

How to report a standardized model in stargazer package?

我制作了以下简单的回归模型,并使用 stargazer 输出了一个 table,它绘制了标准化与非标准化回归模型的系数、标准误差和 p 值。

library(lm.beta)

mod <- lm(mpg ~ cyl + disp, mtcars)
summary(mod)
mod_std <- lm.beta(mod)
summary(mod_std)$coe[, 2]


library(stargazer)
stargazer(mod, mod_std, 
          coef = list(mod$coefficients, 
                      mod_std$standardized.coefficients),
          type='text')

这是输出:

==========================================================
                                  Dependent variable:     
                              ----------------------------
                                          mpg             
                                   (1)            (2)     
----------------------------------------------------------
cyl                              -1.587**       -0.470    
                                 (0.712)        (0.712)   
                                                          
disp                             -0.021**      -0.423***  
                                 (0.010)        (0.010)   
                                                          
Constant                        34.661***        0.000    
                                 (2.547)        (2.547)   
                                                          
----------------------------------------------------------
Observations                        32            32      
R2                                0.760          0.760    
Adjusted R2                       0.743          0.743    
Residual Std. Error (df = 29)     3.055          3.055    
F Statistic (df = 2; 29)        45.808***      45.808***  
==========================================================
Note:                          *p<0.1; **p<0.05; ***p<0.01

从这里可以看出,stargazer 报告的标准误差(对于系数)对于标准化模型和非标准化模型是相同的。这是不正确的,因为标准误差应该随着系数的标准化而改变。有没有办法报告正确的标准错误?或者,如果没有,只需删除它们?

最后,从标准化模型到非标准化模型的变化还有(系数的)显着性水平。这些不应更改,因为它们不受标准化的影响。有没有办法防止观星者修改它们? p 或 p.auto 参数可能会起作用,但我不知道如何使用它们。

lm.beta 的参考文献:Stefan Behrendt (2014)。 lm.beta:将标准化回归系数添加到 lm 对象。 R 包版本 1.5-1。 https://CRAN.R-project.org/package=lm.beta

您需要为每个模型手动输入附加值,list-wise,因为您从系数开始。标准化 se=p= 值(对于星星),...以及 GOF(R2,R2adj., ...), 阅读帮助页面中的选项:?stargazer.

然而,lm.beta 似乎只添加标准化系数,并且 none 尚未计算以报告它们。

标准化标准误差使用公式 SE*beta_star/beta.

计算得出

所以你可以包装一个函数,然后计算它们,以便将它们填入 stargazer table:

std_se <- \(x) x[, 'Std. Error']*x[, 'Standardized']/x[, 'Estimate']

std_se(summary(mod_std)$coefficients)
# (Intercept)         cyl        disp 
#   0.0000000   0.2109356   0.2109356 

但是,计算一个实际的标准化模型肯定会更容易

mod_std2 <- lm(mpg ~ cyl + disp, as.data.frame(scale(mtcars)))
summary(mod_std2) |> getElement('coefficients')
#                Estimate Std. Error   t value     Pr(>|t|)
# (Intercept) 34.66099474 2.54700388 13.608536 4.022869e-14
# cyl         -1.58727681 0.71184427 -2.229809 3.366495e-02
# disp        -0.02058363 0.01025748 -2.006696 5.418572e-02

并将其放入:

stargazer(mod, mod_std2, type='text')
# ==========================================================
#                                   Dependent variable:     
#                               ----------------------------
#                                           mpg             
#                                    (1)            (2)     
# ----------------------------------------------------------
# cyl                              -1.587**      -0.470**   
#                                  (0.712)        (0.211)   
                                                          
# disp                             -0.021*        -0.423*   
#                                  (0.010)        (0.211)   
                                                          
# Constant                        34.661***       -0.000    
#                                  (2.547)        (0.090)   
                                                          
# ----------------------------------------------------------
# Observations                        32            32      
# R2                                0.760          0.760    
# Adjusted R2                       0.743          0.743    
# Residual Std. Error (df = 29)     3.055          0.507    
# F Statistic (df = 2; 29)        45.808***      45.808***  
# ==========================================================
# Note:                          *p<0.1; **p<0.05; ***p<0.01

我成功制作了以下脚本:

stargazer(mod_std, 
          coef=list(mod_std$standardized.coefficients),
          se=list(summary(mod_std)$coe[, 2]),
          p=list(summary(mod)$coe[, 4]),
          type='text',
          omit.stat = c("all"),
          keep = c("cyl","disp"),
          report = c('vcp'), notes.append = FALSE,
          notes = "Coefficients are standardized")

输出如下:

===================================
           Dependent variable:     
      -----------------------------
                   mpg             
-----------------------------------
cyl              -0.470            
                p = 0.034          
                                   
disp             -0.423            
                p = 0.055          
                                   
===================================
===================================
Note: Coefficients are standardized

此处报告了标准化系数,以及来自原始模型的 p-values(在标准化过程中应该保持不变)。