You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:48:23