至少有两种非平稳时间序列:具有趋势的时间序列和具有单位根的时间序列(称为单整时间序列)。
单位根检验不能用来评估时间序列是否平稳。它们只能检测单整时间序列。季节性单位根也是如此。
可下载资源
这里考虑月平均温度数据。
> mon=read.table("temp.txt")
> plot(mon)
![](https://img-blog.csdnimg.cn/20210409145545135.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
现在,我们可以计算所有年份的三个不同平稳性检验的p值
for(y in 1955:2013){
Temp[which(Year==y)]
as.numeric(pp.test(Zc)$p.value)
as.numeric(kpss.test(Zc)$p.value)
as.numeric(adf.test(Zc)$p.value)
从视觉上看,如果红色表示非平稳,蓝色表示平稳,我们得到
polygon(y,col=CL[1+(D[y-1954,i]==1)*5],border=NA)}}
![](https://img-blog.csdnimg.cn/20210409145346984.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
可以看到大部分序列在5%显著性水平下无法拒绝原检验说明序列非平稳。
冬天和夏天的温度是完全不同的。我们可以来可视化:
> plot(month,(tsm))
> lines(1:12,apply(M,2,mean
![](https://img-blog.csdnimg.cn/20210409145801986.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
或者
plot(tsm)
![](https://img-blog.csdnimg.cn/20210409145836941.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
> 3D(tsm)
![](https://img-blog.csdnimg.cn/20210409150303730.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
看起来我们的时间序列是周期性的,因为每年都是季节性的。自相关函数:
![](https://img-blog.csdnimg.cn/20210409150035746.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-106.gif)
ARIMA模型
现在的问题是有季节性单位根吗?这意味着我们的模型应该是
![](https://img-blog.csdnimg.cn/20210409135059784.png)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-108.gif)
如果我们忘记了自回归和移动平均分量,我们可以估计
随时关注您喜欢的主题
![](https://img-blog.csdnimg.cn/20210409135110104.png)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-107.gif)
如果有季节性单位根,那么应该接近1。
arima(x = tsm, order = c(0, 0, 0), seasonal = list(order = c(1, 0, 0), period = 12))
Coefficients:
sar1 intercept
0.9702 6.4566
s.e. 0.0071 2.1515
和1差不多。实际上,它不能太接近1。如果是的话,我们会收到一条错误信息…
为了说明一些有趣的模型,让我们考虑季度温度,
sp(1:4,N,theta=-50,col="yellow",shade=TRUE,
![](https://tecdat.cn/wp-content/uploads/2021/04/image-109.gif)
![](https://img-blog.csdnimg.cn/20210409150412887.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-110.gif)
VAR季度温度模型
VAR模型描述在同一样本期间内的n个变量(内生变量)可以作为它们过去值的线性函数。
一个VAR(p)模型可以写成为:
![y_{t}=c + A_{1}y_{t-1} + A_{2}y_{t-2} + cdots + A_{p}y_{t-p} + e_{t}, y_{t}=c + A_{1}y_{t-1} + A_{2}y_{t-2} + cdots + A_{p}y_{t-p} + e_{t},](https://img-blog.csdnimg.cn/img_convert/52f24ca21d2eb5fb52ac32f692f586bf.png)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-111.gif)
其中:c\_是\_n × \_1\_常数向量,Ai\_是\_n × n\_矩阵。e\_t\_是\_n × \_1\_误差向量,满足:
—误差项的均值为0
—误差项的协方差矩阵为Ω(一个\_n\_ × ‘n\_正定矩阵)\_
(对于所有不为0的\_k\_都满足)—误差项不存在自相关
其中A是4X4矩阵。这个模型很容易估计
model=VAR(df)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-112.gif)
![](https://img-blog.csdnimg.cn/20210409150524107.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-113.gif)
![](https://img-blog.csdnimg.cn/20210409150539482.png)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-115.gif)
矩阵A在这里
> A=rbind(
+ coefficients(varresult$y1)[1:4],
+ coefficients(varresult$y2)[1:4],
+ coefficients(varresult$y3)[1:4],
+ coefficients(varresult$y4)[1:4])
![](https://tecdat.cn/wp-content/uploads/2021/04/image-114.gif)
![](https://img-blog.csdnimg.cn/20210409150612827.png)
由于这个多时间序列的平稳性与这个矩阵的特征值密切相关,我们来看一下,
> eigen(A)
[1] 0.35834830 -0.32824657 -0.14042175 0.09105836
> Mod(eigen(A)
[1] 0.35834830 0.32824657 0.14042175 0.09105836
![](https://tecdat.cn/wp-content/uploads/2021/04/image-117.gif)
周期自回归(PAR)模型
看起来这里不存在平稳性问题。有限制的模型称为周期自回归模型,被称为 模型
![](https://img-blog.csdnimg.cn/20210409153520393.png)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-118.gif)
其中
![](https://img-blog.csdnimg.cn/20210409153525522.png)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-119.gif)
并且
![](https://img-blog.csdnimg.cn/20210409153530474.png)
这是一个VAR(1)模型,因此
![](https://img-blog.csdnimg.cn/20210409153540728.png)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-122.gif)
可以来估计这个模型
par(wts=tsq, type="PAR", p=1)
> PAR(model)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-120.gif)
![](https://img-blog.csdnimg.cn/20210409150719943.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-123.gif)
特征方程为
![](https://img-blog.csdnimg.cn/20210409153602772.png)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-125.gif)
所以有一个(季节性的)单位根,如果
![](https://img-blog.csdnimg.cn/20210409153607618.png)
但在这里显然不是这样。可以进行 Canova Hansen(CH)检验。
Canova Hansen(CH)检验主要用于检验季节差异并验证零假设,即季节性模式在采样期内是稳定的或随时间而变化。
检验的输出在这里
> CH.test(tsm)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-126.gif)
![](https://img-blog.csdnimg.cn/2021040915163571.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
看起来我们拒绝了季节性单位根的假设。我提到以下检验程序
> nsdiffs(tsm, test="ch")
[1] 0
![](https://tecdat.cn/wp-content/uploads/2021/04/image-128.gif)
其中输出:“1”表示有一个季节单位根,“0”表示没有季节单位根。读起来很简单,不是吗?如果我们考虑每月数据的周期自回归模型,输出是
> model
![](https://tecdat.cn/wp-content/uploads/2021/04/image-129.gif)
![](https://img-blog.csdnimg.cn/20210409151731131.png)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-130.gif)
所以,不管是什么检验,我们总是拒绝有季节性单位根的假设。这并不意味着我们的序列不能是周期性的!实际上,这个序列几乎是周期性的。但是没有单位根!所以所有这些都是有意义的。
为了确保我们得到的是正确的,考虑两个时间序列。第一个是周期序列(有非常小的噪声),第二个是单整序列。
> p1=Xp2=as.numeric(t(M))
> for(t in 13:length(M)){
+ p2[t]=Xp2[t-12]+rnorm(1,0,2)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-131.gif)
![](https://img-blog.csdnimg.cn/20210409152017265.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-132.gif)
![](https://img-blog.csdnimg.cn/20210409152026394.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-133.gif)
查看
3D(tsp1)
3D(tsp2)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-134.gif)
![](https://img-blog.csdnimg.cn/20210409153109595.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-135.gif)
如果我们快速地看一下这些序列,我会说第一个没有单位根-即使它不是平稳的,但这是因为这个序列是周期性的-而第二个有单位根。如果我们看一下 Canova Hansen(CH)检验,我们会得到
> CH.test(tsp1)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-136.gif)
![](https://img-blog.csdnimg.cn/20210409153130894.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-138.gif)
![](https://img-blog.csdnimg.cn/20210409153148512.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2021/04/image-137.gif)
考虑一下
> nsdiffs(tsp1, 12,test="ch")
[1] 0
> nsdiffs(tsp2, 12,test="ch")
[1] 1
![](https://tecdat.cn/wp-content/uploads/2021/04/image-139.gif)
这里我们有相同的结论。第一个没有单位根,但是第二个有单位根。但要小心:用\_Osborn-Chui-Smith-Birchenhall\_检验
> nsdiffs(tsp1, 12,test="ocsb")
[1] 1
> nsdiffs(tsp2, 12,test="ocsb")
[1] 1
![](https://tecdat.cn/wp-content/uploads/2021/04/image-140.gif)
我们感觉在我们的循环序列中也有一个单位根… …
所以在这里,在低频上,我们拒绝在我们的温度序列中有单位根的假设,甚至是季节性的单位根。
可下载资源
关于作者
Kaizong Ye是拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。
本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。
非常感谢您阅读本文,如需帮助请联系我们!