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

时间:2014-01-20 14:47:44

标签: r time-series

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

pd

三项测试的结果分别为:

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)对于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 ,如果p值&lt; 0.05 =&gt;固定

2)对于Box.test,如果p值< 0.05 =&gt;固定

3)对于adf.test,如果p值&gt; 0.05 =&gt;静止的(注意不平等的变化)

因此,在这种情况下,kpss.testBox.test建议pd = 1是静止的,而kpss.test建议pd = 1是非静止的。

我的问题是,我希望为每一个adf.test执行此操作,然后计算所有三个测试中有多少pd是静止的。例如,使用pd,我希望在每个Box.test上应用Box.test,然后在2228个独特元素中查看,有多少被归类为静止。然后对其他两个测试重复此操作。

感谢。

1 个答案:

答案 0 :(得分: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