如何对数据框中的多个时间序列进行多个静态测试

2024-01-16

我有以下 df:

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 个变量进行 Box.test、adf.test 和 kpss.test:

假设我将显着性水平设置为 5%。那么规则是:

1) 对于 Box.test,如果 p 值 平稳

2) 对于 adf.test,如果 p 值 平稳

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

这是针对所有变量一次完成一个......

但我想一次性对所有 var & 在某种数据框中输出的测试进行所有这些测试,如果可能的话,可能是这样的:

   var         box.pvalue  box  adf.pvalue adf  kpss.pvalue kpss
   repo          0.03      TRUE    0.03   TRUE     0.03    FALSE
   Callrate      0.03      TRUE    0.03   TRUE     0.03    FALSE
   WPI           0.03      TRUE    0.03   TRUE     0.03    FALSE
   GDP           0.03      TRUE    0.03   TRUE     0.03    FALSE
   FED           0.51      FALSE   0.03   TRUE     0.03    FALSE
   nse           0.03      TRUE    0.03   TRUE     0.03    FALSE
   usd           0.45      FALSE   0.03   TRUE     0.03    FALSE

其中 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<- 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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对数据框中的多个时间序列进行多个静态测试 的相关文章

随机推荐