feols固定效应回归用delta方法估计最优N速率及标准误
fixest回归对象适配Delta方法的实现方案
问题原因
car包的deltaMethod默认适配R基础回归类(如lm、glm),直接传入feols对象会触发两类报错:
- 函数内部调用
vcov()时传入了fixest不支持的complete参数,触发参数无效警告 - 函数无法自动识别feols的系数结构:一方面feols控制高维固定效应时会吸收截距项,不会输出截距系数;另一方面feols的系数命名直接沿用自变量名,和默认的b0/b1/b2命名规则不匹配,最终出现找不到对象的报错。
最优实现方案(无需依赖car包)
fixest包本身内置了完全适配feols对象的delta_method()函数,会自动继承回归时指定的异方差稳健标准误,系数直接使用模型中的自变量名引用,无需手动做参数映射,计算效率和feols原生逻辑一致,完全适配大样本、高维固定效应场景。
对应代码如下:
# 直接调用fixest内置delta方法计算最优N投入及标准误 optimal_n_res <- delta_method( yield, # 直接用模型中的变量名引用对应系数:N是一次项系数,N_square是二次项系数 "(4 - N)/(2*N_square)" ) # 输出结果,包含点估计、标准误、z值、p值、95%置信区间 print(optimal_n_res)
兼容car包deltaMethod的实现方案
如果需要使用car包的deltaMethod功能,不要直接传入feols模型对象,手动提取系数向量和方差协方差矩阵传入即可,注意参数名要和feols输出的系数顺序一一对应:
library(car) # 提取feols回归的非固定效应系数,顺序为N、N_square、P、K、S est_coef <- coef(yield) # 提取回归时已计算的异方差稳健方差协方差矩阵 est_vcov <- vcov(yield) # 手动传入系数和vcov调用deltaMethod car_res <- deltaMethod( est_coef, g = "(4 - b1)/(2*b2)", vcov. = est_vcov, # 按系数顺序命名:共5个非固定效应系数,N对应b1,N_square对应b2 parameterNames = c("b1", "b2", "b3", "b4", "b5") ) print(car_res)
注意:之前代码中设置
parameterNames= paste("b", 0:2, sep="")本身存在错误,feols输出的系数中不存在被固定效应吸收的截距项b0,且非固定效应系数共5个,仅设置3个参数名会导致位置映射完全错乱。
两种方案得到的最优N投入点估计、标准误结果完全一致,优先使用fixest内置方法,避免额外的参数适配问题。
内容的提问来源于stack exchange,提问作者Erin
相关产品推荐
相关产品推荐

