使用 feols 在固定效应模型中包含交互项
Include interaction terms in a fixed effect model using feols
我对 fixst 包中 feols 的使用有疑问。我想要 运行 一个回归,其中解释变量 x1
是一个具有面板结构的变量,而 x2
是一个时间序列变量。因变量 y
也具有面板结构。
feols(y ~ x1 + x1*x2 | date, dat)
交互项的系数 x1*x2
很有趣。但是如果我 运行 上面的回归,会有一个警告说变量 x2
由于共线性而被删除。
我理解是因为在时间固定效应存在的情况下,任何时间序列变量都会与固定效应共线。但是我不知道为什么即使我没有在回归形式中单独包含 x2
仍然有这样的警告。
我不想使用 i()
语法,因为它会为我提供每个交互项的系数。相反,我只想为描述平均效果的相互作用项设置一个系数。有什么建议吗?
非常感谢您的帮助!提前致谢。
这不是 fixest
特定的,而是 R
解析公式的方式特有的。
看起来很奇怪,在公式中写 x1*x2
不仅会包含 x1*x2
项,还会包含 x1
和 x2
。
您正在寻找的是:
x1:x2
仅包括交互(而不包括变量)
I(x1*x2)
其中 I()
告诉 R 不要触摸里面的东西,因此有效地只添加交互。
这里有一些例子:
base = iris
names(base) = c("y", "x1", "x2", "x3", "species")
# the multiplication adds x1 and x2
head(model.matrix(y ~ x1*x2, base))
#> (Intercept) x1 x2 x1:x2
#> 1 1 3.5 1.4 4.90
#> 2 1 3.0 1.4 4.20
#> 3 1 3.2 1.3 4.16
#> 4 1 3.1 1.5 4.65
#> 5 1 3.6 1.4 5.04
#> 6 1 3.9 1.7 6.63
# x1:x2 only includes the product
head(model.matrix(y ~ x1 + x1:x2, base))
#> (Intercept) x1 x1:x2
#> 1 1 3.5 4.90
#> 2 1 3.0 4.20
#> 3 1 3.2 4.16
#> 4 1 3.1 4.65
#> 5 1 3.6 5.04
#> 6 1 3.9 6.63
# I(x1*x2): idem
head(model.matrix(y ~ x1 + I(x1*x2), base))
#> (Intercept) x1 I(x1 * x2)
#> 1 1 3.5 4.90
#> 2 1 3.0 4.20
#> 3 1 3.2 4.16
#> 4 1 3.1 4.65
#> 5 1 3.6 5.04
#> 6 1 3.9 6.63
我对 fixst 包中 feols 的使用有疑问。我想要 运行 一个回归,其中解释变量 x1
是一个具有面板结构的变量,而 x2
是一个时间序列变量。因变量 y
也具有面板结构。
feols(y ~ x1 + x1*x2 | date, dat)
交互项的系数 x1*x2
很有趣。但是如果我 运行 上面的回归,会有一个警告说变量 x2
由于共线性而被删除。
我理解是因为在时间固定效应存在的情况下,任何时间序列变量都会与固定效应共线。但是我不知道为什么即使我没有在回归形式中单独包含 x2
仍然有这样的警告。
我不想使用 i()
语法,因为它会为我提供每个交互项的系数。相反,我只想为描述平均效果的相互作用项设置一个系数。有什么建议吗?
非常感谢您的帮助!提前致谢。
这不是 fixest
特定的,而是 R
解析公式的方式特有的。
看起来很奇怪,在公式中写 x1*x2
不仅会包含 x1*x2
项,还会包含 x1
和 x2
。
您正在寻找的是:
x1:x2
仅包括交互(而不包括变量)I(x1*x2)
其中I()
告诉 R 不要触摸里面的东西,因此有效地只添加交互。
这里有一些例子:
base = iris
names(base) = c("y", "x1", "x2", "x3", "species")
# the multiplication adds x1 and x2
head(model.matrix(y ~ x1*x2, base))
#> (Intercept) x1 x2 x1:x2
#> 1 1 3.5 1.4 4.90
#> 2 1 3.0 1.4 4.20
#> 3 1 3.2 1.3 4.16
#> 4 1 3.1 1.5 4.65
#> 5 1 3.6 1.4 5.04
#> 6 1 3.9 1.7 6.63
# x1:x2 only includes the product
head(model.matrix(y ~ x1 + x1:x2, base))
#> (Intercept) x1 x1:x2
#> 1 1 3.5 4.90
#> 2 1 3.0 4.20
#> 3 1 3.2 4.16
#> 4 1 3.1 4.65
#> 5 1 3.6 5.04
#> 6 1 3.9 6.63
# I(x1*x2): idem
head(model.matrix(y ~ x1 + I(x1*x2), base))
#> (Intercept) x1 I(x1 * x2)
#> 1 1 3.5 4.90
#> 2 1 3.0 4.20
#> 3 1 3.2 4.16
#> 4 1 3.1 4.65
#> 5 1 3.6 5.04
#> 6 1 3.9 6.63