R语言:用felm+Stargazer对齐OLS与IV工具变量估计结果
我明白你遇到的问题了——当用stargazer展示felm输出的OLS和IV结果时,内生变量的IV估计值会被默认标记为x(fit),而OLS的系数标签是x,这就导致两个结果没法在同一行对齐展示。这是stargazer对felm工具变量模型的默认处理逻辑,不过我们可以通过手动调整系数标签来解决这个问题。
方法1:用stargazer的coef.map参数统一标签
coef.map可以帮我们把不同模型里的系数标签映射成同一个名称,这样就能让OLS和IV的x系数在同一行对齐。修改后的代码如下:
library(lfe) library(stargazer) n<-1000 u1<-rnorm(n) u2<-rnorm(n) z=3+0.5*rnorm(n) x=0.5*z+u1 y=2*x+u2 df<-data.frame(y=y,x=x,z=z) model1<-felm(y~x,data=df) model2<-felm(y~1|0|(x~z),data=df) # 关键修改:用coef.map统一系数标签 stargazer(model1, model2, coef.map = list( "(Intercept)" = "(Intercept)", "x" = "x", "x(fit)" = "x" # 把IV模型的x(fit)重命名为x ), title = "OLS vs IV Estimation Results", type = "text") # 输出文本格式,要LaTeX的话改成"latex"
运行这段代码后,OLS和IV的x系数就会出现在同一行,完美对齐。如果不需要显示工具变量相关的额外统计量,还可以用omit.stat参数去掉冗余项,比如omit.stat = c("f", "ser")。
方法2:用modelsummary包(更简洁的替代方案)
如果你不想手动调整标签,modelsummary包对felm模型的支持更加友好,它会自动识别IV模型的内生变量,并默认将系数对齐展示,代码也更简洁:
install.packages("modelsummary") # 首次使用需要安装 library(modelsummary) models <- list("OLS" = model1, "IV" = model2) modelsummary(models, output = "text") # 支持输出HTML/LaTeX/Word等格式
这个包的默认输出格式已经很美观,还能轻松添加统计量、调整表格样式,非常适合对比不同模型的结果。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

