You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python估计相关随机效应(CRE)?非平衡面板数据代码疑问

相关随机效应(CRE)与固定效应(FE)模型估计差异排查

背景

我正在处理巴西供水与污水处理服务相关数据,共5500个观测值,属于非平衡面板数据。我需要估计相关随机效应(CRE)模型,根据伍德里奇的理论,CRE与固定效应的估计结果应当一致,因此我同时估计了两类模型做验证,但得到的结果差异较大,想确认是否是代码存在缺陷,也欢迎大家提供代码优化建议。

原代码实现

import pandas as pd
import linearmodels
data = pd.read_csv(path + "final_base4.csv")
data = data.set_index(['level_0', 'level_1'])
cre_estimates = {}
fe_estimates = {}

xit = ['lnPIBpc_m', 'in004_', 'const']
di = ['PIBpc_m_bar', 'in004_bar',
       '2011', '2012', '2013', '2014',
       '2015', '2016', '2017', '2018']
y = ['lnfn033__m', 'lntotinv_m',
     'lnfn033_pop', 'lntotinv_pop',
     'lnfn033_eh2o', 'lntotinv_eh2o',
     'lnfn033_toteh2o', 'lntotinv_toteh2o']

for i in range(len(y)):
    # Correlated Random Effects
    cre_estimates[f'{y[i]}'] = linearmodels.RandomEffects(data[y[i]],
                                                          data[xit + di])
    cre_estimates[f'{y[i]}_robs'] = cre_estimates[f'{y[i]}'].fit(cov_type='clustered',
                                                                 entity_cluster=True)
    cre_estimates[f'{y[i]}_hac'] = cre_estimates[f'{y[i]}'].fit(cov_type='kernel')
    cre_estimates[f'{y[i]}'] = cre_estimates[f'{y[i]}'].fit()
    # Fixed Effects
    fe_estimates[f'{y[i]}'] = linearmodels.PanelOLS(data[y[i]], data[xit + di],
                                                    entity_effects=True,
                                                    drop_absorbed=True)
    fe_estimates[f'{y[i]}_hac'] = fe_estimates[f'{y[i]}'].fit(cov_type='kernel')
    fe_estimates[f'{y[i]}_robs'] = fe_estimates[f'{y[i]}'].fit(cov_type='clustered',
                                                               entity_cluster=True)
    fe_estimates[f'{y[i]}'] = fe_estimates[f'{y[i]}'].fit()
print(linearmodels.panel.compare({'Correlated Random Effects': cre_estimates['lnfn033__m'],
                                  'Fixed Effects': fe_estimates['lnfn033__m']}))

原估计结果

CRE与FE模型估计结果对比

代码缺陷与优化建议

  • 核心设定错误:CRE与FE结果只需保证时变自变量(即lnPIBpc_m、in004_)的系数一致,截距项、个体均值变量(PIBpc_m_bar、in004_bar)、年份虚拟变量的系数本身就存在差异,无需匹配。如果仅因非时变自变量系数不同判定结果差异大,属于判断逻辑错误。
  • 冗余变量问题:FE模型无需放入个体均值变量PIBpc_m_bar、in004_bar,这类变量仅用于CRE模型中控制个体效应与时变自变量的相关性,FE模型的实体固定效应已经完成了这部分异质性的吸收,放入后会被自动判定为共线性变量剔除,虽不影响核心系数结果,但属于无效设定。
  • 代码冗余问题:当前循环中对同一个模型实例多次调用fit方法,前两次拟合的聚类稳健标准误、HAC标准误结果被最后一次默认拟合的结果覆盖,仅保留了默认标准误的结果,属于无效运算。如果需要保留不同标准误的估计结果,需分别定义不同的变量存储,不需要可直接删除多余的fit调用。
  • 均值校验问题:需确认PIBpc_m_bar、in004_bar的计算逻辑正确,即是否为每个实体对应自变量全观测期的均值,计算时是否包含当期值、是否存在缺失值处理错误的问题,均值计算错误会直接导致CRE模型系数偏移。
  • 变量吸收校验:可以输出FE模型拟合结果的dropped属性,确认是否有核心时变自变量被误吸收,避免索引设置错误导致实体、时间维度识别异常。

内容的提问来源于stack exchange,提问作者Mateus Cardoso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:15:08