R中fixest包feols强制计算因子参考水平交互项问题求助
问题原因
fixest包的feols()函数在处理多水平因子间的交互时,默认会生成所有水平组合的交互项。当你将多水平因子var1与分组因子group(参考水平为group1)做交互时,group1:var1的各水平项会与模型中的var1主效应或固定效应产生完全共线性,因此被函数自动识别并剔除。而二分变量var2本质是2水平因子,其与group的交互中,group1:var2的组合恰好被共线性完全抵消,函数会直接跳过该交互项的生成,所以不会出现先计算再剔除的情况。
解决方法
以下几种方法可以实现仅计算group2、group3与var1的交互项,同时保留var1的因子类型:
方法1:使用
i()函数精准控制交互项
利用fixest内置的i()函数,通过ref参数指定group的参考水平,直接生成非参考水平与var1的交互项:reg_target <- feols( y ~ var1 + i(group, var1, ref = "group1") + fe(fixed_effect), data = your_data )这种方法无需手动构造变量,由函数直接生成目标交互项,完全避免共线性项的生成。
方法2:手动构造目标交互项
提前生成group2、group3与var1的交互因子,再纳入模型:# 生成group2与var1的交互因子 your_data$group2_var1 <- as.factor(your_data$group == "group2"):your_data$var1 # 生成group3与var1的交互因子 your_data$group3_var1 <- as.factor(your_data$group == "group3"):your_data$var1 # 运行回归,仅加入目标交互项 reg_target <- feols( y ~ var1 + group2_var1 + group3_var1 + fe(fixed_effect), data = your_data )方法3:调整公式写法避免全交互
不要使用group*var1这种会生成全组合交互的写法,替换为上述i()函数的写法,或者明确列出需要的交互项,从根源上避免参考水平交互项的生成。
内容的提问来源于stack exchange,提问作者flâneur
相关产品推荐
相关产品推荐

