测试许多时间序列的平稳性

use*_*733 3 r time-series

这里有一系列数据.现在pd是区分不同元素的标识符(有2228个唯一元素),Date是日期,excess只是一列值.我想测试的平稳性excess对于每个pd使用Box.test,adf.test以及kpss.test在中fpp包.为了说明我的意思,以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])
Run Code Online (Sandbox Code Playgroud)

三项测试的结果分别为:

Box-Ljung test

data:  excessret[, 1]
X-squared = 47.7202, df = 20, p-value = 0.0004656    


Augmented Dickey-Fuller Test

data:  excessret[, 1]
Dickey-Fuller = -3.2127, Lag order = 4, p-value = 0.09056
alternative hypothesis: stationary


KPSS Test for Level Stationarity

data:  excessret[, 1]
KPSS Level = 0.1942, Truncation lag parameter = 2, p-value = 0.1
Run Code Online (Sandbox Code Playgroud)

假设我设定了5%的显着性水平.然后规则是:

1)对于Box.test,如果p值<0.05 =>静止

2)对于adf.test,如果p值<0.05 =>静止

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

所以在这种情况下,Box.test并且kpss.test建议pd = 1是静止的,而adf.test建议pd = 1是非静止的.

我的问题是,我希望为每一个单独做这个pd,然后计算有多少pd是静止的,对于所有三个测试.因此,例如,使用Box.test,我希望应用于Box.test每个pd,然后看到2228个独特元素,有多少被归类为静止.然后对其他两个测试重复此操作.

谢谢.

ags*_*udy 5

你可以这样做:

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
Run Code Online (Sandbox Code Playgroud)