You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在stargazer包中报告标准化系数?

如何让stargazer报告线性回归的标准化系数

你遇到的问题其实很常见——lm.beta()返回的模型对象虽然包含了标准化系数,但stargazer默认不会自动识别这个额外的属性,它还是会提取原始lm模型里的非标准化系数。而且你感觉到的显著性变化应该是个误解,标准化操作不会改变回归的显著性水平(p值),只是系数的尺度变了。下面给你两种靠谱的解决方法:

方法1:手动指定标准化系数和p值

这种方法不需要重新拟合模型,直接提取lm.beta()生成的标准化系数,再结合原模型的p值传给stargazer:

# 1. 拟合原始模型
mod <- lm(mpg ~ cyl + disp, data = mtcars)
# 2. 获取标准化系数
mod_std <- lm.beta(mod)
std_coefs <- mod_std$standardized.coefficients
# 3. 获取原模型的p值
p_vals <- summary(mod)$coefficients[, 4]
# 4. 用stargazer输出,手动指定系数和p值
stargazer(mod, 
          coef = list(std_coefs), 
          p = list(p_vals),
          p.auto = FALSE, 
          align = TRUE, 
          no.space = TRUE, 
          out = "./mtcars.htm", 
          type = 'html',
          title = "标准化系数回归结果")

这里注意要把原模型mod传给stargazer,然后用coef参数覆盖默认的系数,p参数指定原模型的p值,这样输出的就是标准化系数,同时显著性水平和原模型完全一致。

方法2:先标准化变量再拟合模型

另一种更直接的方式是先对所有变量(因变量和自变量)进行标准化,然后重新拟合回归模型,这样stargazer输出的系数就是标准化后的结果,p值也和原模型一致:

# 标准化变量后拟合模型
mod_scaled <- lm(scale(mpg) ~ scale(cyl) + scale(disp), data = mtcars)
# 直接用stargazer输出
stargazer(mod_scaled,
          p.auto = FALSE, 
          align = TRUE, 
          no.space = TRUE, 
          out = "./mtcars.htm", 
          type = 'html',
          title = "标准化变量回归结果")

这种方法的好处是不需要额外处理系数和p值,模型本身的系数就是标准化的,stargazer会直接识别输出。

为什么原来的方法不行?

lm.beta()的作用是给原始的lm模型对象添加一个standardized.coefficients属性,但stargazer在处理lm对象时,默认是从模型的coefficients属性(也就是非标准化系数)中提取值,不会主动读取standardized.coefficients,所以才会出现你看到的依然输出非标准化系数的情况。

内容的提问来源于stack exchange,提问作者Codrin Mironiuc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 19:27:45