feols使用自定义公式时sw()逐步固定效应失效问题及解决
fixest中as.formula与sw()组合失效的原因及解决办法
问题重现
在使用fixest包的feols()函数时,直接在公式中嵌入sw()可以正常估计多固定效应模型:
library(fixest) # 可正常运行 feols(mpg ~ disp | sw(gear, gear + carb), data = mtcars)
但如果用as.formula()生成核心公式后再与sw()组合,代码会报错:
# 无法运行 feols(as.formula("mpg ~ disp") | sw(gear, gear + carb), data = mtcars)
失效原因
fixest的sw()是包内专属的特殊语法,它需要在feols()的公式解析阶段被识别并展开为多个模型。而as.formula()返回的是标准R公式对象,当用|连接标准公式和sw()时,fixest无法将右侧的sw()识别为自身的特殊语法,而是将其当作普通函数处理,导致解析逻辑出错。
解决方法
方法1:将完整公式(含sw())转为公式对象
把包含sw()的整个表达式写成字符串,再用as.formula()转换,让fixest能识别完整的特殊语法:
feols(as.formula("mpg ~ disp | sw(gear, gear + carb)"), data = mtcars)
方法2:使用fixest的xpd()函数构建公式
xpd()是fixest提供的扩展公式构建函数,支持解析包内特殊语法,可以动态拼接公式:
base_form <- as.formula("mpg ~ disp") feols(xpd(base_form | sw(gear, gear + carb)), data = mtcars)
方法3:直接拼接公式字符串
如果核心公式是动态生成的字符串,可以直接拼接固定效应部分的字符串,再转成公式:
base_form_str <- "mpg ~ disp" fe_form_str <- "sw(gear, gear + carb)" full_form <- as.formula(paste(base_form_str, "|", fe_form_str)) feols(full_form, data = mtcars)
内容的提问来源于stack exchange,提问作者lethalSinger
相关产品推荐
相关产品推荐

