R 中的平稳性检验,检查均值、方差和协方差

Dav*_*vid 5 statistics r

前言

我不确定这个问题是否属于stackoverflowstackexchange,我把它贴在了上面,stackoverflow因为它包含R-code。但是,如果您觉得它属于 ,您可以自由移动它stackexchange

R当我注意到一些奇怪的事情时,我正在建模一些时间序列并在 中尝试不同的平稳性测试。我们是否有平稳性测试来检查平稳时间序列的所有三个分量(根据维基百科:常数均值、常数方差和常数协方差)?

模拟一些时间序列,我发现通常的测试无法找到一些非平稳的时间序列。现在的问题是,我是否遗漏了什么,或者我做错了什么,或者有没有比上面提到的测试更好的选择?

模拟一些数据

第一个时间序列应该是平稳的,而其他 5 个被模拟为具有不同的均值或不同的方差。

set.seed(123)
dat <- data.frame(x = 1:1000,

                  # stationary
                  ts1 = rnorm(1000),

                  # random walk
                  ts2 = cumsum(rnorm(1000)), 

                  # jumps in mean
                  ts3 = c(rnorm(200), rnorm(400, mean = 5), rnorm(400)),

                  # jumps in variance
                  ts4 = c(rnorm(100), rnorm(300, sd = 5), rnorm(500), rnorm(100)), 

                  # increasing variance
                  ts5 = sapply(1:1000, function(x) rnorm(1, sd = x/1000)),

                  # variance as a squared function
                  ts6 = sapply(1:1000, function(x) rnorm(1, sd = (x - 500)^2))/1000000)
Run Code Online (Sandbox Code Playgroud)

该系列看起来像这样。我会说很明显只有第一个系列具有恒定的均值和方差,而其他系列是非平稳的。

时间序列

测试的问题(?)

到目前为止,我看着成4周不同的测试:adf.testBox.testkpss.test,和PP.test(均来自tseries-packages。

虽然在一个显著p值adf.testPP.test表示平稳序列,一个显著值表示非平稳其他两个测试。

library(tseries)
tests <- c("adf.test", "Box.test", "kpss.test", "PP.test")

sapply(tests, function(test){
  apply(dat[, c("ts1", "ts2", "ts3", "ts4", "ts5", "ts6")], 2, function(x) {
    get(test)(x)$p.value
  })
})

# resulting in 
#      adf.test    Box.test kpss.test   PP.test  # stat:non_stat
# ts1 0.0100000 0.386053779      0.10 0.0100000  # 4:0 clearly stat
# ts2 0.4195604 0.000000000      0.01 0.3260713  # 0:4 clearly non-stat
# ts3 0.5467517 0.000000000      0.01 0.0100000  # 1:3 most-likely non-stat
# ts4 0.0100000 0.004360365      0.10 0.0100000  # 2:2 ?!
# ts5 0.0100000 0.033007310      0.10 0.0100000  # 2:2 ?!
# ts6 0.0100000 0.307453035      0.10 0.0100000  # 4:0 stationary ?!
Run Code Online (Sandbox Code Playgroud)

虽然所有四个测试都发现第一个系列是平稳的,但其他系列的测试存在问题,尤其是方差不断变化的系列在许多情况下被错误分类。

您是否知道是否有更好的测试来解释方差和/或协方差的变化?

非常感谢您的想法、想法和解决方案。