使用econtools的mt.reg计算Conley标准误差时出现KeyError: 'id'
解决mt.reg计算Conley标准误时的KeyError: 'id'问题
问题背景
使用econtools的mt.reg函数,同时指定固定效应fe_name='id'和Conley空间标准误参数shac时,触发KeyError: 'id'。已确认'id'列存在于数据框中,且尝试将其转为字符串类型无效。
报错原因分析
从报错栈看,问题出现在固定效应去均值(demean)的步骤:_demean函数中,将固定效应Series转为DataFrame后,执行join操作时找不到'id'列。这是econtools旧版本中force_df函数处理Series转DataFrame时的潜在bug,或内部数据处理逻辑导致固定效应列被意外排除。
解决方案
方案1:手动对变量去均值后再回归
跳过mt.reg的自动去均值逻辑,手动按'id'对被解释变量和解释变量去均值,然后不带fe_name参数跑回归:
# 手动对变量按id去均值 data['y_demeaned'] = data.groupby('id')['y'].transform(lambda col: col - col.mean()) data['x_demeaned'] = data.groupby('id')['x'].transform(lambda col: col - col.mean()) # 构造Conley标准误参数 shac_params = { 'x': 'lon', 'y': 'lat', 'kern': 'tria', 'band': 0.0025, } # 运行回归,指定nocons=True避免自动添加常数项 results = mt.reg(data, 'y_demeaned', 'x_demeaned', shac=shac_params, nocons=True)
方案2:升级econtools到最新版本
该问题可能是旧版本的已知bug,升级包即可修复:
pip install --upgrade econtools
升级后重新运行原代码即可。
方案3:验证数据基础问题(先排查)
- 确认列名无拼写错误或空格:执行
print(data.columns)检查'id'是否准确存在。 - 检查'id'列是否有缺失值:执行
print(data['id'].isna().sum()),若有缺失需先处理(如data = data.dropna(subset=['id']))。
内容的提问来源于stack exchange,提问作者TEC
相关产品推荐
相关产品推荐

