R 多时间序列平稳性检验

R 多时间序列平稳性检验,r,time-series,R,Time Series,我有一系列的数据。现在,pd是区分不同元素(有2228个唯一元素)的标识符,Date是日期,excess只是一列值。我想使用Box.test、adf.test和kpss.test在fpp包中测试每个pd的超额的平稳性。为了说明我的意思,以pd=1为例: library(fpp) pd1 <- read.delim("E:/something/something/pd1.txt") # Here I just extracted only the corresponding values

我有一系列的数据。现在,
pd
是区分不同元素(有2228个唯一元素)的标识符,
Date
是日期,
excess
只是一列值。我想使用
Box.test
adf.test
kpss.test
fpp
包中测试每个
pd
超额
的平稳性。为了说明我的意思,以
pd
=1为例:

library(fpp)

pd1 <- read.delim("E:/something/something/pd1.txt") # Here I just extracted only the corresponding values for pd = 1 from the data file #

excessret <- matrix(0,dim(pd1),1)

excessret[,1] <- pd1[,3]

Box.test(excessret[,1], lag=20, type="Ljung-Box")

adf.test(excessret[,1], alternative="stationary")

kpss.test(excessret[,1])
假设我设定了5%的显著性水平。那么规则是:

1) 对于
框。如果p值<0.05=>静止,则测试

2) 对于
adf.测试
,如果p值<0.05=>平稳

3) 对于
kpss.test
,如果p值>0.05=>平稳(注意不等式的变化)

因此在这种情况下,
Box.test
kpss.test
建议pd=1是固定的,而
adf.test
建议pd=1是非固定的

我的问题是,我希望对每一个
pd
都这样做,然后计算三个测试中有多少
pd
是静止的。例如,使用
Box.test
,我希望对每个
pd
应用
Box.test
,然后查看2228个唯一元素中,有多少被归类为静止元素。然后对其他两个测试重复此步骤


谢谢。

您可以这样做,例如:

library(data.table)
DT <- as.data.table(returns)
DT[,Date := as.Date(Date,format='%d/%m/%Y')]
library(fpp)
library(xts)
DT[,{ x = xts(excess,Date)
      list(box= Box.test(x)$p.value <0.05 ,
           adf= adf.test(x)$p.value <0.05 ,
           kpss= kpss.test(x)$p.value >0.05)
},pd]

         pd   box  adf  kpss
   1:     1  TRUE TRUE FALSE
   2:    21  TRUE TRUE FALSE
   3:    26  TRUE TRUE FALSE
   4:    29  TRUE TRUE FALSE
   5:    31 FALSE TRUE FALSE
  ---                       
2224: 82840  TRUE TRUE FALSE
2225: 82848 FALSE TRUE FALSE
2226: 82850  TRUE TRUE FALSE
2227: 83053 FALSE TRUE FALSE
2228: 83273  TRUE TRUE FALSE
库(data.table)

从什么时候开始,Ljung-Box测试是平稳性测试?老实说,我这么问是因为你不是第一个这么说的人,我想知道这是不是真的。@Paul我实际上回答了你所联系的问题(尽管它根本没有被提升)。我的观点是,LB测试是一种较强的白噪声条件,因此将错过许多平稳但非白噪声的时间序列。例如,在大时间限制下的强均值回复时间序列(如许多OU过程或AR过程)。它们将无法通过LB测试,但仍处于静止状态。
library(data.table)
DT <- as.data.table(returns)
DT[,Date := as.Date(Date,format='%d/%m/%Y')]
library(fpp)
library(xts)
DT[,{ x = xts(excess,Date)
      list(box= Box.test(x)$p.value <0.05 ,
           adf= adf.test(x)$p.value <0.05 ,
           kpss= kpss.test(x)$p.value >0.05)
},pd]

         pd   box  adf  kpss
   1:     1  TRUE TRUE FALSE
   2:    21  TRUE TRUE FALSE
   3:    26  TRUE TRUE FALSE
   4:    29  TRUE TRUE FALSE
   5:    31 FALSE TRUE FALSE
  ---                       
2224: 82840  TRUE TRUE FALSE
2225: 82848 FALSE TRUE FALSE
2226: 82850  TRUE TRUE FALSE
2227: 83053 FALSE TRUE FALSE
2228: 83273  TRUE TRUE FALSE