时间序列的自相关是指一个给定时间点的时间序列中的值可能与另一个时间点的值具有相关性,也可以指序列数据中具有固定距离的任意两点之间是否存在相关性。
import wooldridge as woo
import pandas as pd
import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf
barium = woo.dataWoo('barium')
T = len(barium)
barium.index = pd.date_range(start='1978-02', periods=T, freq='M')
# print(barium.head())
reg = smf.ols(formula='np.log(chnimp) ~ np.log(chempi) + np.log(gas) +'
'np.log(rtwex) + befile6 + affile6 + afdec6',
data=barium)
results = reg.fit()
resid = results.resid#获取残差
1.图示法
由于残差 e t e_t et可以作为扰动项 μ t \mu_t μt的估计,因此,如果存在序列相关性,必然会由残差项 e t e_t et反映出来,因此可以用 e t e_t et的变化图形来判断随机干扰项的序列相关性。
1.1 滞后图
滞后图,就是将残差 e t e_t et和残差滞后 n n n阶的散点图,需要用到pandas
的lag_plot
函数。
from pandas.plotting import lag_plot
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style='whitegrid')
plt.figure(dpi=160)
lag_plot(resid, lag=1)
<Axes: xlabel='y(t)', ylabel='y(t + 1)'>
# 残差与滞后1-4阶的图
fig, axes = plt.subplots(1, 4, figsize=(16,5), dpi=300, sharex=True, sharey=True)
for i in range(4):
lag_plot(resid, lag=i+1, ax=axes[i])
axes[i].set_title(f'Lag{
i+1}')
1.2 自相关图
自相关图的绘制,可以使用pandas
的autocorrelation_plot
函数
from pandas.plotting import autocorrelation_plot
plt.figure(dpi=160)
autocorrelation_plot(resid)
plt.show
<function matplotlib.pyplot.show(close=None, block=None)>
1.3 自相关图和偏自相关图
自相关系数和偏自相关系数的区别
- 假设时间序列数据 y t y_t yt
- y t = α 0 + α 1 y t − 1 y_t=\alpha_0 + \alpha_1y_{t-1} yt=α0+α1yt−1, α 1 \alpha_1 α1就是 y t y_t yt和 y t − 1 y_{t-1}