我这里有一系列数据.现在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个独特元素,有多少被归类为静止.然后对其他两个测试重复此操作.
谢谢.
你可以这样做:
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)