fixst vs lm - 不同的结果? (差异中的差异)

fixest vs lm - diffrent results? (difference in difference)

我正在尝试对多个时间段进行 'classic' 差异化处理。我要做的模型是:

y = a + b1x1 + b2_treat + b3_period + b_4(treat*period) + u (eq.1)

所以基本上我正在测试不同的设置,只是为了确保我使用不同的包以正确的方式指定我的模型。我想使用 fixst-package,所以我尝试将估计值与标准 lm()-package 的估计值进行比较。然而,结果不同——系数和 std.errors.

我的问题是:

  1. 是否正确指定了 lm_mod、lm_mod2 或 feols_mod 回归(如等式 1)?

如果没有,如果有人能告诉我如何在 lm() 中获得与在 feols() 中相同的结果,我将不胜感激!

# libraries
library(fixest)
library(modelsummary)
library(tidyverse)

# load data
data(base_did)

# make df for lm_mod with 5 as the reference-period
base_ref_5 <- base_did %>% 
  mutate(period = as.factor(period)) %>% 
  mutate(period = relevel(period, ref = 5))

# Notice that i use base_ref_5 for the lm model and base_did for the feol_mod.
lm_mod <- lm(y ~ x1 + treat*period, base_ref_5)
lm_mod2 <- lm(y ~ x1 + treat + period + treat*period, base_ref_5)
feols_mod <- feols(y ~ x1 + i(period, treat, ref = 5), base_did)

# compare models
models <- list("lm" = lm_mod, 
               "lm2" = lm_mod2,
               "feols" = feols_mod)

msummary(models, stars = T)

**EDIT:** 
the reason why I created base_ref_5 was so that both regressions would have period 5 as the reference period, if that was unclear.

**EDIT 2**: 
added a third model (lm_mod2) which is much closer, but there is still a difference.

这里有两个问题。

  1. lm()模型中,period变量是交互的,但被视为连续数值变量。相反,调用 i(period, treat)period 视为一个因素(这在文档中有明确解释)。
  2. i() 函数仅包含交互项,不包含本构项。

这里有两个模型来说明相似之处:

library(fixest)

data(base_did)

lm_mod <- lm(y ~ x1 + factor(period) * factor(treat), base_did)

feols_mod <- feols(y ~ x1 + factor(period) + i(period, treat), base_did)

coef(lm_mod)["x1"]

#>        x1 
#> 0.9799697

coef(feols_mod)["x1"]
#>        x1 
#> 0.9799697

请注意,我只回答了您问题中关于 lmfeols 之间相似之处的部分。 Whosebug 是一个编程问答网站。如果您对统计模型的正确规范有疑问,您可能想在 CrossValidated 上提问。