mmmm123 发表于 2025-2-9 16:47:50

时间序列计量经济学中的主要因果推断方法总结

<div id="container" data-v-1d7a5742="" data-element="root" contentScore="1936">经济时间序列中的因果关系研究已超越了传统的相关性分析范畴。本文系统性地探讨了时间序列经济数据中因果关系的识别与量化方法,涵盖从经典的格兰杰因果检验到现代因果推断技术的全方位论述。

格兰杰因果检验

格兰杰因果检验是评估时间序列预测能力的基础性计量工具,用于检验一个时间序列对另一个时间序列的预测贡献。
import numpy as np   import pandas as pd   import statsmodels.api as sm   from statsmodels.tsa.stattools import grangercausalitytests   from statsmodels.tsa.api import VAR      class GrangerAnalysis:       def __init__(self, data):         self.data = data       def test_granger_causality(self, variable1, variable2, max_lags=12):         """执行双变量格兰杰因果检验"""         data = pd.concat(, self.data], axis=1)         results = grangercausalitytests(data, maxlag=max_lags)         causality_results = pd.DataFrame(               index=range(1, max_lags + 1),               columns=['F-statistic', 'p-value']          )         for lag in range(1, max_lags + 1):               causality_results.loc = [                   results['ssr_ftest'],                   results['ssr_ftest']            ]         return causality_results       def plot_causality_results(self, results):         """绘制各滞后阶的显著性检验结果"""         import matplotlib.pyplot as plt         plt.figure(figsize=(10, 6))         plt.plot(results.index, results['p-value'], marker='o')         plt.axhline(y=0.05, color='r', linestyle='--', label='5% significance')         plt.xlabel('Lag Order')         plt.ylabel('p-value')         plt.title('Granger Causality Test Results')         plt.legend()         plt.show()

[*]1.
[*]2.
[*]3.
[*]4.
[*]5.
[*]6.
[*]7.
[*]8.
[*]9.
[*]10.
[*]11.
[*]12.
[*]13.
[*]14.
[*]15.
[*]16.
[*]17.
[*]18.
[*]19.
[*]20.
[*]21.
[*]22.
[*]23.
[*]24.
[*]25.
[*]26.
[*]27.
[*]28.
[*]29.
[*]30.
[*]31.
[*]32.
[*]33.
[*]34.





结构向量自回归模型(SVAR)

结构向量自回归模型通过引入经济理论支持的结构性约束,对传统向量自回归(VAR)框架进行了扩展。
from statsmodels.tsa.api import VAR      class SVARModel:       def __init__(self, data):         self.data = data         self.var_model = None         self.svar_results = None       def fit(self, lags=1, A=None, B=None):         """基于短期和长期约束拟合SVAR模型"""         self.var_model = VAR(self.data)         var_results = self.var_model.fit(lags)         if A is None:               A = np.eye(len(self.data.columns))         if B is None:               B = np.eye(len(self.data.columns))         self.svar_results = var_results.svar(A=A, B=B)         return self.svar_results       def impulse_response(self, periods=20):         """估计脉冲响应函数"""         return self.svar_results.irf(periods=periods)       def forecast_error_variance_decomposition(self, periods=20):         """进行预测误差方差分解"""         return self.svar_results.fevd(periods=periods)

[*]1.
[*]2.
[*]3.
[*]4.
[*]5.
[*]6.
[*]7.
[*]8.
[*]9.
[*]10.
[*]11.
[*]12.
[*]13.
[*]14.
[*]15.
[*]16.
[*]17.
[*]18.
[*]19.
[*]20.
[*]21.
[*]22.
[*]23.





局部投影法的因果分析

局部投影法为脉冲响应估计提供了一种稳健的非参数化方法,摆脱了传统VAR模型的参数假设限制。
import statsmodels.api as sm      class LocalProjections:       def __init__(self, data):         self.data = data       def estimate_impulse_response(self, dependent_var, shock_var, controls=None, horizons=20):         """采用局部投影法估计动态脉冲响应"""         responses = []         confidence_intervals = []         for h in range(horizons + 1):               y = self.data.shift(-h)               X = self.data[]               if controls is not None:                   X = pd.concat(], axis=1)               X = sm.add_constant(X)               valid_idx = y.notna()               y = y               X = X               model = sm.OLS(y, X)               results = model.fit(cov_type='HAC', cov_kwds={'maxlags': h})               responses.append(results.params)               confidence_intervals.append(results.conf_int().loc)         return np.array(responses), np.array(confidence_intervals)

[*]1.
[*]2.
[*]3.
[*]4.
[*]5.
[*]6.
[*]7.
[*]8.
[*]9.
[*]10.
[*]11.
[*]12.
[*]13.
[*]14.
[*]15.
[*]16.
[*]17.
[*]18.
[*]19.
[*]20.
[*]21.
[*]22.
[*]23.





合成控制法

合成控制法通过构建最优权重组合的对照组,为反事实因果分析提供了系统性的方法论框架。
from scipy.optimize import minimize      class SyntheticControl:       def __init__(self, data, treatment_unit, control_units, treatment_period, outcome_var):         self.data = data         self.treatment_unit = treatment_unit         self.control_units = control_units         self.treatment_period = treatment_period         self.outcome_var = outcome_var       def construct_synthetic_control(self):         """构建最优权重的合成控制单元"""         pre_treatment = self.data[self.data.index
页: [1]
查看完整版本: 时间序列计量经济学中的主要因果推断方法总结