至少有两种非平稳时间序列:具备趋势的时间序列和具备单位根的时间序列(称为单整时间序列)。单位根检验不能用来评估时间序列是否平稳。它们只能检测单整时间序列。季节性单位根也是如此。html
这里考虑月平均温度数据。python
> mon=read.table("temp.txt") > plot(mon)
如今,咱们能够计算全部年份的三个不一样平稳性检验的p值app
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)}}
能够看到大部分序列在5%显著性水平下没法拒绝原检验说明序列非平稳。ui
冬天和夏天的温度是彻底不一样的。咱们能够来可视化:spa
> plot(month,(tsm)) > lines(1:12,apply(M,2,mean
或者code
plot(tsm)
> 3D(tsm)
看起来咱们的时间序列是周期性的,由于每一年都是季节性的。自相关函数:orm
如今的问题是有季节性单位根吗?这说明咱们的模型应该是htm
若是咱们忘记了自回归和移动平均份量,咱们能够估计ci
若是有季节性单位根,那么应该接近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,
VAR模型描述在同同样本期间内的n个变量(内生变量)能够做为它们过去值的线性函数。
一个VAR(p)模型能够写成为:
其中:_c_是_n_ × _1_常数向量,_Ai_是_n_ × _n_矩阵。e_t_是_n_ × _1_偏差向量,知足:
其中A是4X4矩阵。这个模型很容易估计
model=VAR(df)
矩阵A在这里
> A=rbind( + coefficients(varresult$y1)[1:4], + coefficients(varresult$y2)[1:4], + coefficients(varresult$y3)[1:4], + coefficients(varresult$y4)[1:4])
因为这个多时间序列的平稳性与这个矩阵的特征值密切相关,咱们来看一下,
> eigen(A) [1] 0.35834830 -0.32824657 -0.14042175 0.09105836 > Mod(eigen(A) [1] 0.35834830 0.32824657 0.14042175 0.09105836
看起来这里不存在平稳性问题。有限制的模型称为周期自回归模型,被称为 模型
其中
而且
这是一个_VAR(1)_ 模型,所以
能够来估计这个模型
par(wts=tsq, type="PAR", p=1) > PAR(model)
特征方程为
因此有一个(季节性的)单位根,若是
但在这里显然不是这样。能够进行 _Canova_ _Hansen_(CH)检验。_Canova_ _Hansen_(CH)检验主要用于检验季节差别并验证零假设,即季节性模式在采样期内是稳定的或随时间而变化。
检验的输出在这里
> CH.test(tsm)
看起来咱们拒绝了季节性单位根的假设。我提到如下检验程序
> nsdiffs(tsm, test="ch") [1] 0
其中输出:“1”表示有一个季节单位根,“0”表示没有季节单位根。读起来很简单,不是吗?若是咱们考虑每个月数据的周期自回归模型,输出是
> model
因此,无论是什么检验,咱们老是拒绝有季节性单位根的假设。这并不意味着咱们的序列不能是周期性的!实际上,这个序列几乎是周期性的。可是没有单位根!因此全部这些都是有意义的。
为了确保咱们获得的是正确的,考虑两个时间序列。第一个是周期序列(有很是小的噪声),第二个是单整序列。
> p1=Xp2=as.numeric(t(M)) > for(t in 13:length(M)){ + p2[t]=Xp2[t-12]+rnorm(1,0,2)
查看
3D(tsp1) 3D(tsp2)
若是咱们快速地看一下这些序列,我会说第一个没有单位根-即便它不是平稳的,但这是由于这个序列是周期性的-而第二个有单位根。若是咱们看一下 _Canova_ _Hansen_(CH)检验,咱们会获得
> CH.test(tsp1)
考虑一下
> nsdiffs(tsp1, 12,test="ch") [1] 0 > nsdiffs(tsp2, 12,test="ch") [1] 1
这里咱们有相同的结论。第一个没有单位根,可是第二个有单位根。用_Osborn-Chui-Smith-Birchenhall_检验
> nsdiffs(tsp1, 12,test="ocsb") [1] 1 > nsdiffs(tsp2, 12,test="ocsb") [1] 1
在咱们的周期序列中也有一个单位根。
因此在这里,在低频上,咱们拒绝在咱们的温度序列中有单位根的假设,甚至是季节性的单位根。
最受欢迎的看法
1.在python中使用lstm和pytorch进行时间序列预测
2.python中利用长短时间记忆模型lstm进行时间序列预测分析