线性回归:自相关检测及其处理方法
线性回归的自相关问题
1 自相关的定义
1.1 定义
对于线性回归模型
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阶自回归形式。
一般情况下,自相关产生的后果与异方差类似,这里不再赘述。
1.2 产生原因
一般时间序列数据更容易出现自相关。这是因为经济变量的滞后效应、时间序列非平稳性等原因都可能引发自相关问题。一般地,产生自相关的原因主要有以下几个方面:
- 模型设定偏误:模型设定偏误一般有自变量选择偏误和模型函数形式片偏误两种;
- 经济变量的滞后效应:大量经济时间数据会表现出时间的前后关联性,这往往是由经济变量的滞后效用造成的;
- 蛛网现象:一般某种商品的供给量受前一期价格影响而表现出来的某种规律性,即呈蛛网状收敛或发散于供需的均衡点。
- 数据处理造成的自相关。
2 自相关的检测
依据自相关的定义,自相关的检验就是寻找能够判断随机误差项与其自身一阶或多阶滞后项是否相关的方法。这里仍然采用OLS估计模型所得到的残差 e t e_{t} et作为随机干扰项的近似估计量,通过分析OLS所得到的残差与其自身滞后项的相关性来判断随机干扰项是否存在自相关性。几种常用的检测方法如下:
2.1 图示法
图示法通过图形来表现残差 e t e_{t} et的自相关情况,该方法简单直接但精度较低,只能作为粗略判断之用。通常可以采用以下两种方式表现残差的自相关情况:
- 绘制残差 e t e_{t} et与 e t − 1 e_{t-1} et−1之间的散点图来表现两者的相关性;
- 直接绘制
e
t
e_{t}
et随时间变化的图形,通过图形特征来判断是否存在自相关性;如果
e
t
e_{t}
et随着时间
t
t
t变化逐次有规律的变化,呈现锯齿形或循环形状的变化,就可认为
e
t
e_{t}
et存在自相关。如果
e
t
e_{t}
et频繁不断地改变符号,那么存在的负自相关;如果
e
t
e_{t}
et符号改变次数较少,那么存在正的自相关。具体如下图:
2.2 DW检验
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检验的缺点和局限性如下:
- DW检验有两个不能确定的区域,一旦DW值落在这两个区域,就无法判断。这时只能增大样本容量或选取其他样本;
- DW统计量的上下界要求 n ≥ 15 n\geq15 n≥15;
- DW检验不适用随机误差项具有高阶序列相关的检验;
- 只适用于有常数项的回归模型,且解释变量中不能含有滞后的被解释变量,并且要求解释变量为非随机的和数据序列无缺失项;
2.3 拉格朗日检验
拉格朗日检验又被称为Breusch-Godfrey检验。拉格朗日乘数检验克服了DW检验的缺陷,适用于高阶自相关以及模型中存在滞后被解释变量的模型。LM检验的步骤如下:
- 首先获得残差项 e t e_{t} et;
- 将 e t e_{t} et对模型中的所有的解释变量 X X X以及第一步估计得到的残差滞后值 e t − 1 e_{t-1} et−1, … \dots …, e t − p e_{t-p} et−p做回归(p的确定可以用赤池和施瓦茨信息准则来选择),具体如下: e t = α 1 + α 2 X 2 t + ⋯ + α k X k t + ρ ^ 1 e t − 1 + ρ ^ 2 e t − 2 + ⋯ + ρ ^ p e t − p + ϵ t e_{t}=\alpha_{1}+\alpha_{2}X_{2t}+\dots+\alpha_{k}X_{kt}+\hat \rho_{1}e_{t-1}+\hat \rho_{2}e_{t-2}+\dots+\hat \rho_{p}e_{t-p}+\epsilon_{t} et=α1+α2X2t+⋯+αkXkt+ρ^1et−1+ρ^2et−2+⋯+ρ^pet−p+ϵt并得到该辅助回归的判定系数 R 2 R^{2} R2
- 若样本容量很大,则有 ( n − p ) R 2 ∼ χ 2 ( p ) (n-p)R^{2}\sim \chi^{2}(p) (n−p)R2∼χ2(p),在给定显著性水平下,若 ( n − p ) R 2 > χ 2 ( p ) (n-p)R^{2}>\chi^{2}(p) (n−p)R2>χ2(p)则拒绝原假设,此时至少有一个 ρ \rho ρ不为0,说明存在自相关。
3 自相关的修正
3.1 随机误差项相关系数的估计
在对自相关问题进行修正之前,必须先知道不同样本之间随机误差项的相关系数 ρ 1 , ρ 2 , … , ρ p \rho_{1},\rho_{2},\dots,\rho_{p} ρ1,ρ2,…,ρp。但在实际上,我们并不知道这些参数的具体数值,所以必须先对他们进行估计。常用的估计方法是科克伦奥科特迭代方法。
3.2 广义差分法
广义差分法是一种广泛使用的克服自相关的有效方法。广义差分法将原模型变化为满足普通最小二乘法的差分模型,再进行普通最小二乘法估计。假设原模型为
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采用最小二乘法估计模型得到的参数估计量,即为原模型参数的无偏、有效估计量。
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())
其结果如下:
通过查表,可以知道
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<d_{L}
DW=0.526<dL,所以随机误差项存在自相关。
图示法
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())
具体结果如下:
从这个结果中可以近似得到:
e
t
=
0.780
∗
e
t
−
1
e_{t}=0.780*e_{t-1}
et=0.780∗et−1
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())
具体结果如下:
参考
- 《计量经济学》
- https://blog.csdn.net/mfsdmlove/article/details/124769371
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)