Python使用PooledOLS时长度一致却报因变量与外生变量观测数不同
问题原因及修复方案
核心触发原因
该报错的隐藏诱因是linearmodels面板回归模型对输入数据的索引对齐要求极高,哪怕两个DataFrame的shape[0]数值完全一致,只要内部索引对齐校验失败就会抛出观测数不匹配的错误,单自变量可正常运行、多自变量报错的情况基本都属于这类问题。
具体修复步骤
- 强制对齐两个数据集的索引,确保取到完全匹配的观测样本:
# 取两个数据集的公共索引 common_index = y_endog.index.intersection(X_1.index) # 按公共索引重新筛选数据 y_endog_aligned = y_endog.loc[common_index] X_1_aligned = X_1.loc[common_index] - 补充面板模型要求的双层索引结构:
PooledOLS要求输入数据必须设置为「实体ID+时间」的双层MultiIndex,如果你之前删除空值后重置为了单层整数索引,需要重新设置正确的面板索引:# 替换代码中的实体列名、时间列名为你数据集中对应的实际列名 y_endog_aligned = y_endog_aligned.set_index(['实体ID列', '时间列']) X_1_aligned = X_1_aligned.set_index(['实体ID列', '时间列']) - 排查自变量的共线性问题:
linearmodels会自动剔除完美共线性的变量(比如重复添加的常数项、完全线性相关的两个变量),多变量场景下如果存在这类变量,内部处理后维度变化也可能触发校验错误,可通过以下代码排查:# 输出相关系数大于0.999的变量组合,即为高度共线性变量 print(X_1_aligned.corr().abs() > 0.999) - 重新运行回归即可:
reg_1 = PooledOLS(y_endog_aligned, X_1_aligned).fit(cov_type = 'heteroskedastic') print(reg_1.summary())
内容的提问来源于stack exchange,提问作者Martin Harris
相关产品推荐
相关产品推荐

