R Fixest 包:无需进一步外生变量的 IV 估计

Chr*_*Chr 1 regression r panel-data

fixest我打算使用包的函数运行具有固定效应的工具变量回归feols。但是,我在没有进一步外源控制的情况下指定估计的语法存在问题。

考虑以下示例:

# Load package
require("fixest")

# Load data
df <- airquality
Run Code Online (Sandbox Code Playgroud)

我想要类似以下的内容,即通过仪器化内生变量和固定效应解释结果:

feols(Temp | Month + Day | Ozone ~ Wind, df)
Run Code Online (Sandbox Code Playgroud)

然而,这会产生一个错误:

The dependent variable is a constant. Estimation cannot be done.
Run Code Online (Sandbox Code Playgroud)

仅当我添加更多外生协变量时(如文档示例中所示),它才有效:

feols(Temp ~ Solar.R | Month + Day | Ozone ~ Wind, df)
Run Code Online (Sandbox Code Playgroud)

我该如何解决?在没有进一步控制的情况下,如何运行估算,例如Solar.R在本例中?

注意:我将其发布在 Stack Overflow 上而不是 Cross Validated 上,因为该问题涉及编码语法问题,而不是估计背后的计量经济学技术。

Lau*_*rgé 5

实际上,对于如何编写公式似乎存在误解。

语法是:Dep_var ~ Exo_vars | Fixed-effects | Endo_vars ~ Instruments.

零件Fixed-effectsEndo_vars ~ Instruments是可选的。另一方面, 的部分Exo_vars必须始终存在,即使只有截距。

知道这一点后,可以进行以下操作:

base = iris
names(base) = c("y", "x1", "x_endo", "x_inst", "fe")

feols(y ~ 1 | x_endo ~ x_inst, base)
#> TSLS estimation, Dep. Var.: y, Endo.: x_endo, Instr.: x_inst
#> Second stage: Dep. Var.: y
#> Observations: 150 
#> Standard-errors: Standard 
#>             Estimate Std. Error t value  Pr(>|t|)    
#> (Intercept) 4.345900    0.08096  53.679 < 2.2e-16 ***
#> fit_x_endo  0.398477    0.01964  20.289 < 2.2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> RMSE: 0.404769   Adj. R2: 0.757834
#> F-test (1st stage): stat = 1,882.45  , p < 2.2e-16 , on 1 and 148 DoF.
#>         Wu-Hausman: stat =     3.9663, p = 0.048272, on 1 and 147 DoF.

# Same with fixed-effect
feols(y ~ 1 | fe | x_endo ~ x_inst, base)
#> TSLS estimation, Dep. Var.: y, Endo.: x_endo, Instr.: x_inst
#> Second stage: Dep. Var.: y
#> Observations: 150 
#> Fixed-effects: fe: 3
#> Standard-errors: Clustered (fe) 
#>            Estimate Std. Error t value Pr(>|t|)    
#> fit_x_endo 0.900061   0.117798  7.6407 0.016701 *  
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> RMSE: 0.333489     Adj. R2: 0.833363
#>                  Within R2: 0.57177 
#> F-test (1st stage): stat = 44.77    , p = 4.409e-10, on 1 and 146 DoF.
#>         Wu-Hausman: stat =  0.001472, p = 0.969447 , on 1 and 145 DoF.
Run Code Online (Sandbox Code Playgroud)

回到原来的例子:

  • feols(Temp | Month + Day | Ozone ~ Wind, df)意味着因变量将Temp | Month + Day | Ozone与此处的管道一起表示逻辑或,导致所有观察结果为 1。因此出现错误消息。
  • 要修复它并获得适当的行为,请使用feols(Temp ~ 1 | Month + Day | Ozone ~ Wind, df).