如何用Python Statsmodels IV2SLS实现EViews中误差项AR(1)设定?
问题
我正尝试将EViews代码复现到Python中,需拟合含常数项、若干需工具变量法处理的内生变量、若干外生变量的回归模型,因变量为LR_(某国长期利率),且需为多个国家执行该操作。
在EViews中,函数代码如下:
equation {%eq_name}.TSLS(COV=HAC,M=2000,C=1e-06) LR_{%country} c SR_{%country} INF_{%country} GDP_{%country} LR_W_{%country} AR(1 to !order_ar) @ instr_list_{%country}
其中instr_list_包含多个工具变量。如代码所示,EViews中的AR(1 to !order_ar)参数用于指定对应国家回归模型的误差项为AR(p)结构。
请问能否使用Python Statsmodels包的IV2SLS函数实现相同功能?
回答
可以用Statsmodels的IV2SLS实现,但需要手动处理AR(p)误差结构的部分,同时配置HAC稳健协方差来匹配EViews的设置,具体步骤如下:
1. 核心逻辑说明
EViews里的TSLS + AR(1 to !order_ar)本质是带AR(p)误差修正的两阶段最小二乘回归,同时使用HAC(异方差自相关一致)协方差估计。Statsmodels的IV2SLS本身不直接内置AR误差结构的自动处理,需要手动构造滞后残差项来模拟这一逻辑,再结合稳健协方差计算实现对齐。
2. 分步实现代码
前置准备
import statsmodels.api as sm import pandas as pd
单国家回归实现
假设已加载目标国家的时间序列数据(DataFrame格式),包含因变量LR、内生变量SR/INF/GDP/LR_W、工具变量列,以及指定的AR阶数order_ar:
# 1. 提取基础变量 y = df_country["LR"] # 内生变量(需工具变量处理的变量) endog_vars = df_country[["SR", "INF", "GDP", "LR_W"]] # 工具变量列表,需与EViews的instr_list_{%country}完全一致 instruments = df_country[instr_list] # 2. 拟合初始IV回归,获取残差以构造AR项 initial_model = sm.IV2SLS(y, sm.add_constant(endog_vars), instruments=instruments) initial_results = initial_model.fit() residuals = initial_results.resid # 3. 构造AR(p)项:滞后残差 ar_terms = pd.DataFrame() for i in range(1, order_ar + 1): ar_terms[f"AR({i})"] = residuals.shift(i) # 4. 合并变量并清理缺失值(滞后项会产生NA) final_X = sm.add_constant(pd.concat([endog_vars, ar_terms], axis=1)).dropna() final_y = y.loc[final_X.index] final_instruments = instruments.loc[final_X.index] # 5. 拟合最终IV回归,计算HAC协方差 final_model = sm.IV2SLS(final_y, final_X, instruments=final_instruments) final_results = final_model.fit() # 匹配EViews的HAC参数:maxlags=2000对应M=2000,tol=1e-6对应C=1e-06 hac_results = final_results.get_robustcov_results(cov_type="hac", maxlags=2000, tol=1e-6) # 查看回归结果 print(hac_results.summary())
多国家批量处理
只需将上述单国家逻辑封装进循环,遍历所有目标国家即可:
# 示例国家列表 country_list = ["USA", "UK", "JPN"] # 存储所有国家的结果 country_results = {} for country in country_list: # 加载对应国家的数据(需根据实际存储方式调整) df_country = pd.read_csv(f"{country}_data.csv") # 执行上述单国家回归步骤... # 将结果存入字典 country_results[country] = hac_results
3. 关键注意事项
- AR项构造:EViews的
AR(1 to !order_ar)会自动迭代估计残差和AR系数,上述代码是简化的可行估计方式,若需完全对齐EViews的迭代逻辑,可增加循环迭代残差和AR项的步骤。 - HAC参数匹配:确保
maxlags和tol参数与EViews代码中的M=2000、C=1e-06完全一致。 - 样本一致性:构造滞后项后要清理缺失值,保证回归使用的样本与EViews处理后的样本一致。
内容的提问来源于stack exchange,提问作者user20587286




