fixest包feols设置国家-年份交互固定效应报错求解
报错原因
- 写法
feols(y ~ x | country*year, data):fixest固定效应解析逻辑对公式中*操作符存在边界bug,当交互项包含数值型变量(你的year为数值格式)时,会触发未捕获的下标越界报错。R公式中*默认展开为主效应+交互项,本身逻辑等价于手动写主效应加交互,但在feols的固定效应块中该解析不稳定。 - 写法
feols(y ~ x | country + year + country:year, data):直接在固定效应块用:连接字符型country和数值型year时,分组匹配逻辑出错,同样触发下标越界报错。 - 写法
feols(y ~ x | country + year + I(country*year), data):语法逻辑错误,country是文本型变量,无法直接做乘法运算,I()不适用于此场景。
*你的观测单元是次国家行政区(对应数据中NAME_1.y字段的省/州级单元),每个国家-年份组合下存在多个观测,因此加入国家-年份交互固定效应不存在完全共线性问题,可以正常识别。
正确实现方式
最稳妥、不受fixest版本影响的写法是提前在数据集中生成国家-年份交互分组变量,再放入固定效应块:
library(fixest) # 生成国家-年份交互分组变量 df$country_year <- interaction(df$country, df$year, drop = TRUE) # 运行回归,同时控制国家FE、年份FE、国家-年份交互FE feols(sngq ~ yearvalue | country + year + country_year, data = df)
如果你使用0.11.0及以上版本的fixest,也可以直接在公式中写交互,需先将数值型year转为因子避免类型解析错误:
feols(sngq ~ yearvalue | country + factor(year) + country^factor(year), data = df)
补充说明
如果你实际要控制的是国家特定线性时间趋势,而非完全吸收所有国家层面年度冲击的离散国家-年份交互固定效应,不需要手动生成交互变量,直接用fixest内置的趋势语法即可:
# 控制国家FE、年份FE、国家线性时间趋势 feols(sngq ~ yearvalue | country + year + country[year], data = df)
两种设定的经济学含义差异很大:离散国家-年份交互FE会吸收所有国家层面随年份变动的不可观测冲击,而国家线性趋势仅控制每个国家随年份线性变化的特征,需要根据实际研究需求选择。
内容的提问来源于stack exchange,提问作者Anton
相关产品推荐
相关产品推荐

