FELM + Stargazer - 将工具变量估计值与 OLS 对齐
FELM + Stargazer - Align instrumental variables estimates with OLS
我在 R 中有一个 felm 对象,我正在尝试 table 比较来自 OLS 估计和 IV 估计的系数估计。下面的代码生成一个 table,在不同的行中有两个系数估计值 x 和 `x(fit)`。
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)
stargazer(model1, model2, df)
===========================================================
Dependent variable:
----------------------------
y
(1) (2)
-----------------------------------------------------------
x 2.003***
(0.031)
`x(fit)` 1.795***
(0.149)
Constant -0.041 0.274
(0.057) (0.227)
-----------------------------------------------------------
Observations 1,000 1,000
R2 0.804 0.796
Adjusted R2 0.804 0.795
Residual Std. Error (df = 998) 1.005 1.027
===========================================================
Note: *p<0.1; **p<0.05; ***p<0.01
我想要的是 table 如下所示:
===========================================================
Dependent variable:
----------------------------
y
(1) (2)
-----------------------------------------------------------
x 2.003*** 1.795***
(0.031) (0.149)
Constant -0.041 0.274
(0.057) (0.227)
-----------------------------------------------------------
Observations 1,000 1,000
R2 0.804 0.796
Adjusted R2 0.804 0.795
Residual Std. Error (df = 998) 1.005 1.027
===========================================================
Note: *p<0.1; **p<0.05; ***p<0.01
我试过
rownames(model2$coefficients)[rownames(model2$coefficients=="`x(fit)`"]<-"x"
但运行在Wald测试中出现错误。如果我要检测多个变量,这也很烦人。
是否有更简单的方法来更广泛地对齐 Stargazer 或 R 中不同行的协变量?
如果您使用 texreg 而不是 stargazer,这非常简单:
library(lfe)
library(texreg)
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)
screenreg(list(model1, model2),
custom.coef.names = c("(Intercept)", "x", "x"))
#>
#> ===============================================
#> Model 1 Model 2
#> -----------------------------------------------
#> (Intercept) 0.05 0.11
#> (0.05) (0.13)
#> x 1.98 *** 1.93 ***
#> (0.03) (0.09)
#> -----------------------------------------------
#> Num. obs. 1000 1000
#> R^2 (full model) 0.82 0.81
#> R^2 (proj model) 0.82 0.81
#> Adj. R^2 (full model) 0.81 0.81
#> Adj. R^2 (proj model) 0.81 0.81
#> ===============================================
#> *** p < 0.001, ** p < 0.01, * p < 0.05
正如您所看到的,这是通过指定系数标签的向量来实现的,如果 texreg 发现这些值重复,它将把这些估计值放在同一行(顺便说一句,生成乳胶使用 texreg(list(model1, model2))
而不是 screenreg
).
还值得注意的是,如果您将 NA
插入 custom.coef.names
,它将默认返回当前名称,因此如果您在模型中有 100 个其他协变量,您可以 custom.coef.names = c(NA, "x", "x", rep(NA, 100))
而不是全部写出来。
我在 R 中有一个 felm 对象,我正在尝试 table 比较来自 OLS 估计和 IV 估计的系数估计。下面的代码生成一个 table,在不同的行中有两个系数估计值 x 和 `x(fit)`。
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)
stargazer(model1, model2, df)
===========================================================
Dependent variable:
----------------------------
y
(1) (2)
-----------------------------------------------------------
x 2.003***
(0.031)
`x(fit)` 1.795***
(0.149)
Constant -0.041 0.274
(0.057) (0.227)
-----------------------------------------------------------
Observations 1,000 1,000
R2 0.804 0.796
Adjusted R2 0.804 0.795
Residual Std. Error (df = 998) 1.005 1.027
===========================================================
Note: *p<0.1; **p<0.05; ***p<0.01
我想要的是 table 如下所示:
===========================================================
Dependent variable:
----------------------------
y
(1) (2)
-----------------------------------------------------------
x 2.003*** 1.795***
(0.031) (0.149)
Constant -0.041 0.274
(0.057) (0.227)
-----------------------------------------------------------
Observations 1,000 1,000
R2 0.804 0.796
Adjusted R2 0.804 0.795
Residual Std. Error (df = 998) 1.005 1.027
===========================================================
Note: *p<0.1; **p<0.05; ***p<0.01
我试过
rownames(model2$coefficients)[rownames(model2$coefficients=="`x(fit)`"]<-"x"
但运行在Wald测试中出现错误。如果我要检测多个变量,这也很烦人。
是否有更简单的方法来更广泛地对齐 Stargazer 或 R 中不同行的协变量?
如果您使用 texreg 而不是 stargazer,这非常简单:
library(lfe)
library(texreg)
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)
screenreg(list(model1, model2),
custom.coef.names = c("(Intercept)", "x", "x"))
#>
#> ===============================================
#> Model 1 Model 2
#> -----------------------------------------------
#> (Intercept) 0.05 0.11
#> (0.05) (0.13)
#> x 1.98 *** 1.93 ***
#> (0.03) (0.09)
#> -----------------------------------------------
#> Num. obs. 1000 1000
#> R^2 (full model) 0.82 0.81
#> R^2 (proj model) 0.82 0.81
#> Adj. R^2 (full model) 0.81 0.81
#> Adj. R^2 (proj model) 0.81 0.81
#> ===============================================
#> *** p < 0.001, ** p < 0.01, * p < 0.05
正如您所看到的,这是通过指定系数标签的向量来实现的,如果 texreg 发现这些值重复,它将把这些估计值放在同一行(顺便说一句,生成乳胶使用 texreg(list(model1, model2))
而不是 screenreg
).
还值得注意的是,如果您将 NA
插入 custom.coef.names
,它将默认返回当前名称,因此如果您在模型中有 100 个其他协变量,您可以 custom.coef.names = c(NA, "x", "x", rep(NA, 100))
而不是全部写出来。