【问题标题】:R Fixest Package: IV Estimation Without Further Exogenous VariablesR Fixest 包:没有进一步外生变量的 IV 估计
【发布时间】:2021-03-26 06:42:30
【问题描述】:

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

考虑以下示例:

# Load package
require("fixest")

# Load data
df <- airquality

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

feols(Temp | Month + Day | Ozone ~ Wind, df)

然而,这会产生错误:

The dependent variable is a constant. Estimation cannot be done.

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

feols(Temp ~ Solar.R | Month + Day | Ozone ~ Wind, df)

我该如何解决这个问题?如何在没有进一步控制的情况下运行估计,例如在这种情况下为Solar.R

注意:我将其发布在 Stack Overflow 而不是 Cross Validated 上,因为该问题与编码语法问题有关,而不是与估计所依据的计量经济学技术有关。

【问题讨论】:

    标签: r regression panel-data


    【解决方案1】:

    其实公式的写法好像有误会。

    语法是: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.
    

    回到原来的例子:

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

    【讨论】:

    • 谢谢。我看到Exo_vars 参数似乎是强制性的。但我不知道如何克服它。很高兴知道插入 1 可以解决问题。顺便说一句,不错的包裹。
    • 是的,没有办法解决 1。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多