时间序列模型中的相关性识别与校正

2025年03月18日 由 alex 发表 3989 0

时间序列中的动态模型常常表现出序列相关性,即误差项随时间存在相关性。序列相关性违反了误差项独立的经典假设,从而导致估计效率低下、标准误差错误以及统计推断具有误导性。


序列相关性,也称为自相关性,是指回归模型的残差(ϵt)与过去的残差(ϵt−1, ϵt−2,…)之间存在相关性。在动态模型中,变量的过去值会影响当前值,因此序列相关性是一个常见问题。


序列相关性的存在意味着:


1


其中:

  • ϵt 是时间 t 时的误差项。
  • k 是滞后阶数。
  • 如果 ρ>0,则存在正序列相关性(误差项在同一方向上同步变化)。
  • 如果 ρ<0,则存在负序列相关性(误差项的符号交替出现)。


如果动态模型中存在序列相关性,那么标准误差会有偏差。这会导致统计检验具有误导性。这也意味着我们违反了普通最小二乘法(OLS,即回归)的假设,因此置信区间和假设检验变得不可靠。结果,使用该模型进行的任何预测都会不够准确,并且容易将误差传播到未来的预测中(即产生不良结果)。


检测序列相关性

有几种方法可以检验残差中的序列相关性:

  1. Durbin-Watson 检验:一种用于检测一阶自相关的简单统计方法。
  2. Breusch-Godfrey 检验:一种更通用的检验方法,可以检测更高滞后阶数的自相关。
  3. 自相关函数(ACF):绘制不同时间滞后下残差之间的相关性图。


让我们使用来自 FRED 的数据(密歇根大学:通货膨胀预期(MICH))来检查分布滞后模型中的序列相关性。


import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.graphics.tsaplots as tsaplots
from statsmodels.stats.diagnostic import acorr_breusch_godfrey
from statsmodels.regression.linear_model import GLS, GLSAR
from datetime import datetime
from pandas_datareader import data as web
import matplotlib.pyplot as plt
from visualization import plot_time_series, plot_decomposition
# Function to fetch data from FRED
def get_fred_data(series_id, start_date="2000-01-01", end_date=None):
    if end_date is None:
        end_date = datetime.now().strftime("%Y-%m-%d")
    df = web.DataReader(series_id, 'fred', start_date, end_date)
    return df.dropna()
# Fetch University of Michigan Consumer Sentiment Index (MICH)
series_id = "MICH"
mich_data = get_fred_data(series_id)
mich_data = mich_data.pct_change().dropna()  # Convert to percentage change
# Prepare DataFrame
mich_data = mich_data.rename(columns={series_id: "MICH"})
mich_data["Date"] = mich_data.index  # Ensure a date column for plotting
# Create lagged MICH values
for lag in range(1, 3):  # Include 2 lags
    mich_data[f"MICH_lag{lag}"] = mich_data["MICH"].shift(lag)
# Drop missing values due to lagging
mich_data.dropna(inplace=True)
# Define independent and dependent variables
X_lags = ["MICH", "MICH_lag1", "MICH_lag2"]
X_matrix = sm.add_constant(mich_data[X_lags])  # Add intercept
y_vector = mich_data["MICH"]  # Target is MICH itself (can be changed)
# Fit a distributed lag model
model = sm.OLS(y_vector, X_matrix).fit()
# Perform the Breusch-Godfrey test for serial correlation
bg_test = acorr_breusch_godfrey(model, nlags=2)
print(f"Breusch-Godfrey Test p-value: {bg_test[1]:.4f}")


2


Breusch-Godfrey 检验(p 值 = 0.0000)用于检查残差中的序列相关性。p 值为 0.0000 意味着拒绝无序列相关性的原假设。因此,我们得出结论,残差存在自相关性,这表明模型的误差项不是独立的。


处理序列相关性

如果检测到序列相关性,有几种方法可以纠正它:


广义最小二乘法(GLS)通过考虑序列相关性的结构来修改普通最小二乘法(OLS):


from statsmodels.regression.linear_model import GLS
gls_model = GLS(y_vector, X_matrix).fit()
print(gls_model.summary())


3


广义最小二乘法(GLS)模型显示,MICH 的系数为 1.0000,t 统计量接近 0。MICH_lag1 和 MICH_lag2 的影响接近零,且 p 值较高。R² = 1.000,表明拟合完美(这非常可疑)。Durbin-Watson 统计量为 2.392,接近 2,表明自相关性得到了一定程度的修正。


Cochrane-Orcutt 方法使用迭代程序来转换回归模型,以消除序列相关性。


from statsmodels.regression.linear_model import GLSAR
cochrane_orcutt = GLSAR(y_vector, X_matrix, rho=1).iterative_fit()
print(cochrane_orcutt.summary())


4


GLSAR(Cochrane-Orcutt)方法显示,MICH 的系数仍为 1.0000,这证实了存在近乎完美的相关性。MICH_lag1 和 MICH_lag2 现在变得显著(p < 0.05),表明它们增加了一些解释力。Durbin-Watson 统计量为 1.533,仍表明存在一些自相关性,但相较于 GLS 模型有所改善。


Newey-West 稳健标准误

如果我们无法修正模型结构,Newey-West 稳健标准误可以提供有效的推断。


model_robust = model.get_robustcov_results(cov_type="HAC", maxlags=2)"HAC", maxlags=2)
print(model_robust.summary())


5


Newey-West(也称为具有异方差自相关(HAC)的 OLS)调整了自相关和异方差性下的标准误。令人惊讶的是,系数几乎保持不变。MICH_lag1 和 MICH_lag2 仍然不显著,表明它们没有提供太多解释力。Durbin-Watson 统计量为 2.392,接近 2,表明自相关性有所减少。


为了诊断序列相关性,我们可以绘制残差的自相关函数(ACF)图。


import statsmodels.graphics.tsaplots as tsaplots
# Extract residuals
residuals = model.resid
# Plot ACF
plt.figure(figsize=(10, 5))
tsaplots.plot_acf(residuals, lags=20, alpha=0.05)
plt.xlabel("Lag")
plt.ylabel("Autocorrelation")
plt.title("Autocorrelation of Residuals")
plt.savefig("residual_acf.png")
plt.show()


自相关函数(ACF)图证实了序列相关性的存在。滞后1期的尖峰表明存在强烈的自相关性。大多数其他滞后期都保持在置信带内,这意味着问题主要出现在较低的滞后期。该图支持了 Breusch-Godfrey 检验的结果。


在此情况下,我们得出结论,存在序列相关性(由 Breusch-Godfrey 检验(p = 0.0000)和 ACF 图证实)。如 Durbin-Watson 统计量所示,广义最小二乘法(GLS)和广义最小二乘自回归(GLSAR)模型处理序列相关性的效果优于普通最小二乘法(OLS)。密歇根大学的通货膨胀预期数据存在高度自相关性,且滞后期对解释的贡献很小。


我们可以通过研究差分模型或使用 ARIMA 等工具来改进这一分析。


序列相关性是动态模型(特别是涉及滞后预测变量的模型)中的常见问题。如果忽视它,会导致估计效率低下和推断结果具有误导性。Breusch-Godfrey 检验有助于检测序列相关性,而 GLS、Cochrane-Orcutt 和 Newey-West 校正方法则有助于解决这一问题。

文章来源:https://medium.com/@kylejones_47003/identifying-and-correcting-for-serial-correlation-in-dynamic-models-for-time-series-afffeeacbde2
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消