1 自相关的定义
1.1 定义
在其他经典假定不变的条件下,若则称为自相关或序列相关。如果仅存在则称为一阶自相关。
一阶自相关通常可以写成如下形式:其中为一阶自相关系数,为满足经典假定的随机误差项,即,,。
一般地,如果其中是满足经典假定的误差项,是阶自相关系数。称该式为阶自回归形式。
一般情况下,自相关产生的后果与异方差类似,这里不再赘述。
1.2 产生原因
一般时间序列数据更容易出现自相关。这是因为经济变量的滞后效应、时间序列非平稳性等原因都可能引发自相关问题。一般地,产生自相关的原因主要有以下几个方面:
- 模型设定偏误:模型设定偏误一般有自变量选择偏误和模型函数形式片偏误两种;
- 经济变量的滞后效应:大量经济时间数据会表现出时间的前后关联性,这往往是由经济变量的滞后效用造成的;
- 蛛网现象:一般某种商品的供给量受前一期价格影响而表现出来的某种规律性,即呈蛛网状收敛或发散于供需的均衡点。
- 数据处理造成的自相关。
2 自相关的检测
作为随机干扰项的近似估计量,通过分析OLS所得到的残差与其自身滞后项的相关性来判断随机干扰项是否存在自相关性。几种常用的检测方法如下:
2.1 图示法
的自相关情况,该方法简单直接但精度较低,只能作为粗略判断之用。通常可以采用以下两种方式表现残差的自相关情况:
- 绘制残差与之间的散点图来表现两者的相关性;
- 直接绘制随时间变化的图形,通过图形特征来判断是否存在自相关性;如果随着时间变化逐次有规律的变化,呈现锯齿形或循环形状的变化,就可认为存在自相关。如果频繁不断地改变符号,那么存在的负自相关;如果符号改变次数较少,那么存在正的自相关。具体如下图:
2.2 DW检验
其中为和的相关系数,用该值作为和相关系数的估值。当时,即时,和不相关;当时,即时,和完全负相关;时,即时,和完全正相关。目前只需根据DW值落入临界值所界定的范围,就可以判断随机干扰项的自相关情况。具体判断情况如下:
其中,和为DW统计量的上界和下界的临界值,这两个值可以通过查表得到。DW检验的缺点和局限性如下:
- DW检验有两个不能确定的区域,一旦DW值落在这两个区域,就无法判断。这时只能增大样本容量或选取其他样本;
- DW统计量的上下界要求;
- DW检验不适用随机误差项具有高阶序列相关的检验;
- 只适用于有常数项的回归模型,且解释变量中不能含有滞后的被解释变量,并且要求解释变量为非随机的和数据序列无缺失项;
2.3 拉格朗日检验
拉格朗日检验又被称为Breusch-Godfrey检验。拉格朗日乘数检验克服了DW检验的缺陷,适用于高阶自相关以及模型中存在滞后被解释变量的模型。LM检验的步骤如下:
- 首先获得残差项;
- 将对模型中的所有的解释变量以及第一步估计得到的残差滞后值,,做回归(p的确定可以用赤池和施瓦茨信息准则来选择),具体如下:并得到该辅助回归的判定系数
- 若样本容量很大,则有,在给定显著性水平下,若则拒绝原假设,此时至少有一个不为0,说明存在自相关。
3 自相关的修正
3.1 随机误差项相关系数的估计
。但在实际上,我们并不知道这些参数的具体数值,所以必须先对他们进行估计。常用的估计方法是科克伦奥科特迭代方法。
3.2 广义差分法
广义差分法是一种广泛使用的克服自相关的有效方法。广义差分法将原模型变化为满足普通最小二乘法的差分模型,再进行普通最小二乘法估计。假设原模型为
根据该式可得到如下:
如果该模型除存在自相关之外,满足其他所有经典假定,并且其随机误差项满足如下自回归模型:结合以上可以得到如下公式将公式(1)代入到上式中即可得到:
采用最小二乘法估计模型得到的参数估计量,即为原模型参数的无偏、有效估计量。
4 实验
4.1 数据
实验中用到的数据为1995-2014年中国进口总额和国内生产总值数据,具体如下:
4.2 自相关检测
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())
其结果如下:
通过查表,可以知道,目前,所以随机误差项存在自相关。
图示法
import matplotlib.pyplot as plt
err=y_pred-y
plt.scatter(err.values[:-1],err.values[1:])
其结果如下:
4.3 确定自相关阶数及相关系数
这里确定阶数的方法来源于时间序列模型。具体如下:
#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())
具体结果如下:
从这个结果中可以近似得到:
4.4 自相关修正
这里使用广义差分法对自相关模型进行修正。具体如下:
#广义差分法
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())
具体结果如下:
参考
- 《计量经济学》