对于线性回归模型 Y i = β 0 + β 1 X 1 i + β 2 X 2 i + ⋯ + β n X n i + u i Y_{i}=\beta_{0}+\beta_{1}X_{1i}+\beta_{2}X_{2i}+\dots+\beta_{n}X{ni}+u_{i} Yi=β0+β1X1i+β2X2i+⋯+βnXni+ui在其他经典假定不变的条件下,若 C o v ( u i , u j ) = E ( u i u j ) ≠ 0 ( i ≠ j ) Cov(u_{i},u_{j})=E(u_{i}u_{j})\neq0 \quad (i\neq j) Cov(ui,uj)=E(uiuj)=0(i=j)则称为自相关或序列相关。如果仅存在 C o v ( u t , u t + 1 ) ≠ 0 ( t = 1 , 2 , … , n ) Cov(u_{t},u_{t+1})\neq 0\quad(t=1,2,\dots,n) Cov(ut,ut+1)=0(t=1,2,…,n)则称为一阶自相关。
一阶自相关通常可以写成如下形式: u t = ρ u t − 1 + v t ( − 1 < ρ < 1 ) A R ( 1 ) u_{t}=\rho u_{t-1}+v_{t} \quad (-1<\rho<1) \quad AR(1) ut=ρut−1+vt(−1<ρ<1)AR(1)其中 ρ \rho ρ为一阶自相关系数, v t v_{t} vt为满足经典假定的随机误差项,即 E ( v t ) = 0 E(v_{t})=0 E(vt)=0, V a r ( v t ) = σ 2 Var(v_{t})=\sigma^{2} Var(vt)=σ2, C o v ( v t , v t + i ) = 0 Cov(v_{t},v_{t+i})=0 Cov(vt,vt+i)=0。
一般地,如果 u t = ρ 1 u t − 1 + ρ 2 u t − 2 + ⋯ + ρ m u t − m + v t A R ( m ) u_{t}=\rho_{1}u_{t-1}+\rho_{2}u_{t-2}+\dots+\rho_{m}u_{t-m}+v_{t}\quad AR(m) ut=ρ1ut−1+ρ2ut−2+⋯+ρmut−m+vtAR(m)其中 v t v_{t} vt是满足经典假定的误差项, ρ m \rho_{m} ρm是 m m m阶自相关系数。称该式为 m m m阶自回归形式。
一般情况下,自相关产生的后果与异方差类似,这里不再赘述。
一般时间序列数据更容易出现自相关。这是因为经济变量的滞后效应、时间序列非平稳性等原因都可能引发自相关问题。一般地,产生自相关的原因主要有以下几个方面:
依据自相关的定义,自相关的检验就是寻找能够判断随机误差项与其自身一阶或多阶滞后项是否相关的方法。这里仍然采用OLS估计模型所得到的残差 e t e_{t} et作为随机干扰项的近似估计量,通过分析OLS所得到的残差与其自身滞后项的相关性来判断随机干扰项是否存在自相关性。几种常用的检测方法如下:
图示法通过图形来表现残差 e t e_{t} et的自相关情况,该方法简单直接但精度较低,只能作为粗略判断之用。通常可以采用以下两种方式表现残差的自相关情况:
DW检验师一种适用于小样本的检验方法,并且该检验方法只能检验随机误差项具有一阶自回归形式的自相关问题。该检验构造的DW统计量为: D W ≈ 2 ( 1 − ρ ^ ) DW\approx2(1-\hat \rho) DW≈2(1−ρ^)其中 ρ ^ \hat \rho ρ^为 e t e_{t} et和 e t − 1 e_{t-1} et−1的相关系数,用该值作为 u t u_{t} ut和 u t − 1 u_{t-1} ut−1相关系数 ρ \rho ρ的估值。当 ρ ^ = 0 \hat \rho=0 ρ^=0时,即 D W ≈ 2 DW\approx 2 DW≈2时, e t e_{t} et和 e t − 1 e_{t-1} et−1不相关;当 ρ ^ = − 1 \hat \rho=-1 ρ^=−1时,即 D W ≈ 4 DW\approx 4 DW≈4时, e t e_{t} et和 e t − 1 e_{t-1} et−1完全负相关; ρ ^ = 1 \hat \rho=1 ρ^=1时,即 D W ≈ 0 DW\approx 0 DW≈0时, e t e_{t} et和 e t − 1 e_{t-1} et−1完全正相关。目前只需根据DW值落入临界值所界定的范围,就可以判断随机干扰项的自相关情况。具体判断情况如下:
其中, d U d_{U} dU和 d L d_{L} dL为DW统计量的上界和下界的临界值,这两个值可以通过查表得到。DW检验的缺点和局限性如下:
拉格朗日检验又被称为Breusch-Godfrey检验。拉格朗日乘数检验克服了DW检验的缺陷,适用于高阶自相关以及模型中存在滞后被解释变量的模型。LM检验的步骤如下:
在对自相关问题进行修正之前,必须先知道不同样本之间随机误差项的相关系数 ρ 1 , ρ 2 , … , ρ p \rho_{1},\rho_{2},\dots,\rho_{p} ρ1,ρ2,…,ρp。但在实际上,我们并不知道这些参数的具体数值,所以必须先对他们进行估计。常用的估计方法是科克伦奥科特迭代方法。
广义差分法是一种广泛使用的克服自相关的有效方法。广义差分法将原模型变化为满足普通最小二乘法的差分模型,再进行普通最小二乘法估计。假设原模型为
Y i = β 0 + β 1 X 1 i + β 2 X 2 i + ⋯ + β n X n i + u i Y_{i}=\beta_{0}+\beta_{1}X_{1i}+\beta_{2}X_{2i}+\dots+\beta_{n}X{ni}+u_{i} Yi=β0+β1X1i+β2X2i+⋯+βnXni+ui根据该式可得到如下:
u t = Y t − β 0 − β 1 X 1 t − ⋯ − β n X n t u t − 1 = Y t − 1 − β 0 − β 1 X 1 , t − 1 − ⋯ − β n X n , t − 1 u t − 2 = Y t − 2 − β 0 − β 1 X 1 , t − 2 − ⋯ − β n X n , t − 2 ⋯ u t − p = Y t − p − β 0 − β 1 X 1 , t − p − ⋯ − β n X n , t − p (1) \begin{aligned}\tag{1}u_{t}&=Y_{t}-\beta_{0}-\beta_{1}X_{1t}-\dots-\beta_{n}X_{nt}\\u_{t-1}&=Y_{t-1}-\beta_{0}-\beta_{1}X_{1,t-1}-\dots-\beta_{n}X_{n,t-1}\\u_{t-2}&=Y_{t-2}-\beta_{0}-\beta_{1}X_{1,t-2}-\dots-\beta_{n}X_{n,t-2}\\\cdots\\u_{t-p}&=Y_{t-p}-\beta_{0}-\beta_{1}X_{1,t-p}-\dots-\beta_{n}X_{n,t-p}\end{aligned} utut−1ut−2⋯ut−p=Yt−β0−β1X1t−⋯−βnXnt=Yt−1−β0−β1X1,t−1−⋯−βnXn,t−1=Yt−2−β0−β1X1,t−2−⋯−βnXn,t−2=Yt−p−β0−β1X1,t−p−⋯−βnXn,t−p(1)如果该模型除存在自相关之外,满足其他所有经典假定,并且其随机误差项满足如下自回归模型: u t = ρ 1 u t − 1 + ρ 2 u t − 2 + ⋯ + ρ p u t − p + v t u_{t}=\rho_{1}u_{t-1}+\rho_{2}u_{t-2}+\dots+\rho_{p}u_{t-p}+v_{t} ut=ρ1ut−1+ρ2ut−2+⋯+ρput−p+vt结合以上可以得到如下公式 Y t = β 0 + β 1 X 1 t + β 2 X 2 t + ⋯ + β n X n t + ρ 1 u t − 1 + ρ 2 u t − 2 + ⋯ + ρ p u t − p + v t Y_{t}=\beta_{0}+\beta_{1}X_{1t}+\beta_{2}X_{2t}+\dots+\beta_{n}X_{nt}+\rho_{1}u_{t-1}+\rho_{2}u_{t-2}+\dots+\rho_{p}u_{t-p}+v_{t} Yt=β0+β1X1t+β2X2t+⋯+βnXnt+ρ1ut−1+ρ2ut−2+⋯+ρput−p+vt将公式(1)代入到上式中即可得到:
Y t − ρ 1 Y t − 1 − ρ 2 Y t − 2 − ⋯ − ρ p Y t − p = β 0 ( 1 − ρ 1 − ρ 2 − ⋯ − ρ p ) + β 1 ( X 1 t − ρ 1 X 1 , t − 1 − ρ 2 X 1 , t − 2 ⋯ − ρ p X 1 , t − p ) + … + β n ( X n t − ρ 1 X n , t − 1 − ρ 2 X n , t − 2 − ⋯ − ρ p X n , t − p ) + v t \begin{aligned}&Y_{t}-\rho_{1}Y_{t-1}-\rho_{2}Y_{t-2}-\dots-\rho_{p}Y_{t-p}\\&=\beta_{0}(1-\rho_{1}-\rho_{2}-\dots-\rho_{p})\\&+\beta_{1}(X_{1t}-\rho_{1}X_{1,t-1}-\rho_{2}X_{1,t-2}\dots-\rho_{p}X_{1,t-p})+\dots\\ &+\beta_{n}(X_{nt}-\rho_{1}X_{n,t-1}-\rho_{2}X_{n,t-2}-\dots-\rho_{p}X_{n,t-p})+v_{t} \end{aligned} Yt−ρ1Yt−1−ρ2Yt−2−⋯−ρpYt−p=β0(1−ρ1−ρ2−⋯−ρp)+β1(X1t−ρ1X1,t−1−ρ2X1,t−2⋯−ρpX1,t−p)+…+βn(Xnt−ρ1Xn,t−1−ρ2Xn,t−2−⋯−ρpXn,t−p)+vt采用最小二乘法估计模型得到的参数估计量,即为原模型参数的无偏、有效估计量。
实验中用到的数据为1995-2014年中国进口总额和国内生产总值数据,具体如下:
DW检验
Python中statsmodels.api中的OLS模型中已经集成了DW检验,所以的这里就直接使用OLS模型来做自相关检验。具体如下:
import numpy as np
import statsmodels.api as sm
import pandas as pd
data=[[61129.8,11048.1],[71572.3,11557.4],[79429.5,11806.5],
[84883.7,11626.1],[90187.7,13736.4],[99776.3,18638.8],
[110270.4,20159.2],[121002.0,24430.3],[136564.6,34195.6],
[160714.4,46435.8],[185895.8,54273.7],[217656.6,63376.9],
[268019.4,73300.1],[316751.7,79526.5],[345629.2,68618.4],
[408903.0,94699.3],[484123.5,113161.4],[534123.0,114801.0],
[588018.8,121037.5],[636138.7,120358.0]]
data=np.array(data)
X,y=data[:,0],data[:,1]
X=pd.DataFrame(X,columns=['X1'])
y=pd.DataFrame(y,columns=['val'])
X=sm.add_constant(X)
model=sm.OLS(y,X)
results=model.fit()
y_pred=pd.DataFrame(model.predict(results.params,X),
columns=['val'])
print(results.summary())
其结果如下:
通过查表,可以知道 d L = 1.20 , d U = 1.41 d_{L}=1.20,d_{U}=1.41 dL=1.20,dU=1.41,目前 D W = 0.526 < d L DW=0.526
图示法
import matplotlib.pyplot as plt
err=y_pred-y
plt.scatter(err.values[:-1],err.values[1:])
这里确定阶数的方法来源于时间序列模型。具体如下:
#1.确定阶数
import warnings
warnings.filterwarnings('ignore')
AR=sm.tsa.stattools.arma_order_select_ic(err_abs)['bic_min_order'][0]
print(AR) #结果为1
#2.确定系数
y_1=err.values[1:]
x_1=err.values[:-1]
model=sm.OLS(y_1,x_1)
result=model.fit()
print(result.summary())
具体结果如下:
从这个结果中可以近似得到: e t = 0.780 ∗ e t − 1 e_{t}=0.780*e_{t-1} et=0.780∗et−1
这里使用广义差分法对自相关模型进行修正。具体如下:
#广义差分法
X_new=X['X1']-0.780*X['X1'].shift(periods=1)
y_new=y['val']-0.780*y['val'].shift(periods=1)
X_new=X_new.dropna()
y_new=y_new.dropna()
X_new=sm.add_constant(X_new)
X_new['const']=(1-0.780)*X_new['const']
model=sm.OLS(y_new,X_new)
result=model.fit()
print(result.summary())