如何用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结果只需保证时变自变量(即
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
相关产品推荐
相关产品推荐

