fixest包feols双固定效应估计时如何指定被丢弃的虚拟变量
解决方法
你可以通过feols的collin.drop参数指定共线性发生时优先丢弃固定效应的水平,即可保留所有TIMESLOT的系数,代码如下:
# 优先丢弃固定效应水平,保留所有TIMESLOT系数 feols(y ~ 0 + i(TIMESLOT) + i(TIMESLOT, x)| FIRM, test_dt, collin.drop = "fixef")
如果需要明确指定要丢弃的FIRM基准组,可以额外搭配ref参数:
# 指定FIRM的A组为基准组 feols(y ~ 0 + i(TIMESLOT) + i(TIMESLOT, x)| FIRM, test_dt, collin.drop = "fixef", ref = list(FIRM = "A"))
上述两种写法的输出结果都和你直接把FIRM放到回归右侧的结果完全一致,同时可以享受高维固定效应的快速估计性能。
原问题原因
当你将FIRM放在|右侧作为高维固定效应时,feols默认的共线性处理规则是优先丢弃协变量的共线性列,所以会自动删掉一个TIMESLOT的虚拟变量;而把FIRM直接放到右侧时,FIRM属于普通协变量,优先级低于你手动设置的TIMESLOT变量,所以会优先删掉FIRM的基准组,符合你的预期。
手动构造X报错的原因
i()是fixest包中仅在公式语法内生效的特殊函数,依赖回归的环境上下文解析变量。你在外部data.table的j位置调用i()时,没有对应的回归环境,所以会抛出env缺失的报错。如果要手动构造X矩阵,需要自己生成TIMESLOT的虚拟变量和交乘项,不能直接调用i()函数。
内容的提问来源于stack exchange,提问作者Matthew Son
相关产品推荐
相关产品推荐

