You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何用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参数匹配:确保maxlagstol参数与EViews代码中的M=2000C=1e-06完全一致。
  • 样本一致性:构造滞后项后要清理缺失值,保证回归使用的样本与EViews处理后的样本一致。

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

火山引擎 最新活动