如何在lfe包felm模型中实现固定效应总和为零的约束
felm实现固定效应强制零和的操作方法
通过contrasts参数实现固定效应零和约束的思路是完全可行的。felm默认输出的固定效应以第一组为基准将其效应置为0,其余组效应为相对基准的差值,这类默认结果下固定效应总和通常不为0,具体配置步骤如下:
- 前置准备:将分组固定效应变量
id转换为因子类型。contrasts规则仅对因子类变量生效,整数、字符型的分组变量会被felm自动作为吸收项处理,不会触发对比规则配置 - 核心参数配置:在felm调用中通过
contrasts参数指定对id因子使用contr.sum对比规则,该R内置对比函数的逻辑为:将因子最后一个水平的效应设为前面所有水平效应的负和,从数学上强制所有水平的效应估计值之和为0 - 结果提取调整:调用
getfe提取固定效应时,设置relabel=FALSE,关闭函数默认的“将效应偏移回基准组为0”的转换逻辑,拿到真实满足零和约束的效应值
完整可运行代码如下:
library(lfe) # 将id转换为因子类型 df$id <- factor(df$id) # 带零和约束的固定效应回归 m1 <- felm( formula = y ~ x + z | id, data = df, # 核心配置项:对id因子应用总和对比规则 contrasts = list(id = "contr.sum") ) # 提取保留零和约束的固定效应值 fx_m1 <- getfe(m1, relabel = FALSE) # 验证结果:输出值为浮点精度下的近似0 sum(fx_m1$effects)
注意事项
- 零和约束仅改变固定效应的解释基准,不会改变核心回归系数(x、z的估计值、标准误、置信区间等),与原默认模型的核心估计结果完全一致
- 因浮点计算精度,最终的和值可能是1e-15量级的极小数值,属于正常计算误差,并非配置失效
- 若需要将固定效应转换回传统的“基准组为0”的解释形式,只需对提取的零和效应值加上所有效应的均值即可,组间相对差异不会发生变化
内容的提问来源于stack exchange,提问作者user1389960
相关产品推荐
相关产品推荐

