Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何在一个数据帧中对多个时间序列执行多个静态测试_R_Time Series - Fatal编程技术网

R 如何在一个数据帧中对多个时间序列执行多个静态测试

R 如何在一个数据帧中对多个时间序列执行多个静态测试,r,time-series,R,Time Series,我有以下建议: head(vardata) Month repo Callrate WPI GDP FED nse usd 1 2001-04-01 9.00 7.49 5.41 4.6 4.50 1125.2 46.79 2 2001-05-01 8.75 8.03 5.60 4.6 4.00 1167.9 46.92 3 2001-06-01 8.50 7.24 5.30 4.6 3.75 1107.9 47.00 4 2001-07-01

我有以下建议:

head(vardata)
       Month repo Callrate  WPI GDP  FED    nse   usd
1 2001-04-01 9.00     7.49 5.41 4.6 4.50 1125.2 46.79
2 2001-05-01 8.75     8.03 5.60 4.6 4.00 1167.9 46.92
3 2001-06-01 8.50     7.24 5.30 4.6 3.75 1107.9 47.00
4 2001-07-01 8.50     7.19 5.23 5.3 3.75 1072.8 47.14
5 2001-08-01 8.50     6.94 5.41 5.3 3.50 1053.8 47.13
6 2001-09-01 8.50     7.30 4.52 5.3 3.00  913.9 47.65
我想使用以下规则集对所有7个var执行Box.test、adf.test和kpss.test:

假设我设定了5%的显著性水平。那么规则是:

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

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

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

我单独做了以下测试:

Box.test(ts(df$repo),lag=20,type="Ljung-Box")

    Box-Ljung test

data:  ts(df$repo)
X-squared = 1100, df = 20, p-value <2e-16

adf.test(ts(df$repo),alternative = "stationary")

    Augmented Dickey-Fuller Test

data:  ts(df$repo)
Dickey-Fuller = -2.7, Lag order = 5, p-value = 0.3
alternative hypothesis: stationary

kpss.test(ts(df$repo))

    KPSS Test for Level Stationarity

data:  ts(df$repo)
KPSS Level = 0.32, Truncation lag parameter = 3, p-value = 0.1

# to extract p values
Box.test(ts(df$repo),lag=20,type="Ljung-Box")$p.value
adf.test(ts(df$repo),alternative = "stationary")$p.value
kpss.test(ts(df$repo))$p.value
其中TRUE=序列是静止的;FALSE=序列是非平稳的

更新---我的尝试 多时间序列的平稳性检验

multi_stat_tests<- function(df){
  for(i in 1:dim(df)[2]){
    df_multi<-data.frame(var=names(df)[i],box.pvalue=Box.test(ts(df[,i]),lag=20,type="Ljung-Box")$p.value,adf.pvalue=adf.test(ts(df[,i]),alternative = "stationary")$p.value,kpss.pvalue=kpss.test(ts(df[,i]))$p.value,
box=Box.test(ts(df[,i]),lag=20,type="Ljung-Box")$p.value<0.05,
adf=adf.test(ts(df[,i]),alternative = "stationary")$p.value<0.05,
kpss=kpss.test(ts(df[,i]))$p.value>0.05
)
    return(df_multi)
  }
}

>multi_stat_tests(df[,2:8])

  var box.pvalue    adf.pvalue   kpss.pvalue  box   adf  kpss
1 repo          0     0.2859         0.1     TRUE  FALSE TRUE

multi_stat_tests在循环的第一次迭代中返回结果,这就是为什么只得到第一个变量的结果。我认为这达到了你想要的

multi_stat_tests<- function(df){
    p <- ncol(df)
    df_multi <- data.frame(var=names(df),
                           box.pvalue=sapply(df, function(v) Box.test(ts(v),lag=20,type="Ljung-Box")$p.value),
                           adf.pvalue=sapply(df, function(v) adf.test(ts(v),alternative = "stationary")$p.value),
                           kpss.pvalue=sapply(df, function(v) kpss.test(ts(v))$p.value)
                           )
    df_multi$box <- df_multi$box.pvalue < 0.05
    df_multi$adf <- df_multi$adf.pvalue < 0.05
    df_multi$kpss <- df_multi$kpss.pvalue > 0.05
    df_multi
}

multi_stat_tests@Consistency.......awesme....learntsmethng new…只是一个小问题..输出有行名..我必须单独删除..它可以合并到循环中吗..@Nishant如果您不想有行名,可以执行类似
r的操作
multi_stat_tests<- function(df){
    p <- ncol(df)
    df_multi <- data.frame(var=names(df),
                           box.pvalue=sapply(df, function(v) Box.test(ts(v),lag=20,type="Ljung-Box")$p.value),
                           adf.pvalue=sapply(df, function(v) adf.test(ts(v),alternative = "stationary")$p.value),
                           kpss.pvalue=sapply(df, function(v) kpss.test(ts(v))$p.value)
                           )
    df_multi$box <- df_multi$box.pvalue < 0.05
    df_multi$adf <- df_multi$adf.pvalue < 0.05
    df_multi$kpss <- df_multi$kpss.pvalue > 0.05
    df_multi
}
multi_stat_tests<- function(df){
    p <- ncol(df)
    df_multi <- data.frame(var=names(df),
                           box.pvalue=sapply(df, function(v) Box.test(ts(v),lag=20,type="Ljung-Box")$p.value),
                           adf.pvalue=sapply(df, function(v) adf.test(ts(v),alternative = "stationary")$p.value),
                           kpss.pvalue=sapply(df, function(v) kpss.test(ts(v))$p.value)
                           )
    df_multi$box <- df_multi$box.pvalue < 0.05
    df_multi$adf <- df_multi$adf.pvalue < 0.05
    df_multi$kpss <- df_multi$kpss.pvalue > 0.05
    row.names(df_multi) <- c()
    df_multi
}