没有单位根的序列是非平稳的很好的例子?

机器算法验证 时间序列 单位根 平稳性 增强的 dickey-fuller
2022-02-01 05:46:00

我曾多次看到人们在增强的 Dickey-Fuller 测试中拒绝 null ,然后声称这表明他们的系列是固定的(不幸的是,我无法展示这些说法的来源,但我想类似的说法存在各处一种或另一种期刊)。

我认为这是一种误解(拒绝单位根的零值不一定与具有平稳序列相同,特别是因为在进行此类测试时很少研究甚至考虑其他形式的非平稳性)。

我寻求的是:

a)一个很好的明确反例(我现在可以想象一对夫妇,但我敢打赌,除了我之外的其他人会有比我想象的更好的东西)。它可以是对特定情况的描述,可能带有数据(模拟的或真实的;两者各有优势);或者

b) 一个令人信服的论点,为什么应将增强的 Dickey-Fuller 中的拒绝视为建立平稳性

(或者如果你觉得很聪明,甚至可以同时使用(a)和(b))

3个回答

这是一个非平稳序列的示例,即使是白噪声测试也无法检测到(更不用说 Dickey-Fuller 类型测试):

这不是白噪声

是的,这可能令人惊讶,但这不是白噪声

大多数非平稳反例都基于违反平稳的前两个条件:确定性趋势(非常数均值)或单位根/异方差时间序列(非常数方差)。但是,您也可以有具有恒定均值和方差的非平稳过程,但它们违反了第三个条件:自协方差函数 (ACVF)cov(xs,xt)应该随着时间的推移是恒定的,并且是|st|只要。

上面的时间序列是此类序列的一个示例,其均值为零,单位方差,但 ACVF 取决于时间。更准确地说,上面的过程是一个局部平稳的 MA(1) 过程,其参数使得它变成了虚假的白噪声(参见下面的参考资料):MA 过程的参数xt=εt+θ1εt1随时间变化

θ1(u)=0.51u,

在哪里u=t/T是标准化时间。这看起来像白噪声(即使根据数学定义它显然不是)的原因是随时间变化的 ACVF 随着时间的推移积分为零。由于样本 ACVF 收敛到平均 ACVF,这意味着样本自协方差(和自相关 (ACF))将收敛到看起来像白噪声的函数。因此,即使是 Ljung-Box 测试也无法检测到这种非平稳性。关于针对局部静止替代方案测试白噪声的论文(免责声明:我是作者)提出了 Box 测试的扩展,以处理这种局部静止过程。

有关更多 R 代码和更多详细信息,另请参阅此博客文章

mpiktas 评论后更新

确实,这可能看起来就像一个在实践中看不到的理论上有趣的案例。我同意在现实世界的数据集中不太可能直接看到这种虚假的白噪声,但你会在几乎任何静止模型拟合的残差中看到这一点。无需过多的理论细节,只需想象一个通用的时变模型 θ(u)具有时变协方差函数γθ(k,u). 如果你拟合一个常数模型θ^,那么这个估计值将接近真实模型的时间平均值θ(u); 自然地,残差现在将接近θ(u)θ^,通过构造θ^将积分为零(大约)。有关详细信息,请参见 Goerg (2012)。

让我们看一个例子

library(fracdiff)
library(data.table)

tree.ring <- ts(fread(file.path(data.path, "tree-rings.txt"))[, V1])
layout(matrix(1:4, ncol = 2))
plot(tree.ring)
acf(tree.ring)
mod.arfima <- fracdiff(tree.ring)
mod.arfima$d


## [1] 0.236507

所以我们用参数拟合分数噪声d^=0.23(自从d^<0.5我们认为一切都很好,我们有一个固定的模型)。让我们检查残差:

arfima.res <- diffseries(tree.ring, mod.arfima$d)
plot(arfima.res)
acf(arfima.res)

时间序列和 acf 图

看起来不错吧?好吧,问题是残差是虚假的白噪声我怎么知道?首先,我可以测试一下

Box.test(arfima.res, type = "Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  arfima.res
## X-squared = 1.8757, df = 1, p-value = 0.1708

Box.test.ls(arfima.res, K = 4, type = "Ljung-Box")
## 
##  LS Ljung-Box test; Number of windows = 4; non-overlapping window
##  size = 497
## 
## data:  arfima.res
## X-squared = 39.361, df = 4, p-value = 5.867e-08

其次,我们从文献中得知树木年轮数据实际上是局部平稳的分数噪声:参见Goerg (2012)Ferreira、Olea 和 Palma (2013)

这表明我的——诚然——理论上看起来的例子,实际上发生在大多数现实世界的例子中。

众所周知,单位根测试非常困难。使用一项测试通常是不够的,您必须非常小心测试使用的确切假设。

ADF 的构造方式使其容易受到一系列简单的非线性趋势的影响,这些趋势具有添加的白噪声。这是一个例子:

library(dplyr)
library(tseries)
set.seed(1000)
oo <- 1:1000  %>% lapply(function(n)adf.test(exp(seq(0, 2, by = 0.01)) + rnorm(201)))
pp <- oo %>% sapply("[[","p.value")

> sum(pp < 0.05)
[1] 680

在这里,我们有指数趋势,我们看到 ADF 的表现很差。它在 30% 的时间里接受单位根的空值,在 70% 的时间里拒绝它。

通常任何分析的结果都不是声称该系列是平稳的。如果分析中使用的方法需要平稳性,则错误假设序列是平稳的,而实际上并非如此,通常会以某种方式表现出来。所以我个人看整个分析,而不仅仅是单位根测试部分。例如,OLS 和 NLS 适用于非平稳数据,其中非平稳性是均值,即趋势。因此,如果有人错误地声称该系列是平稳的并应用 OLS/NLS,那么这种说法可能不相关。

示例 1

已知具有强负 MA 分量的单位根过程会导致 ADF 测试的经验规模远高于名义规模(例如,Schwert,JBES 1989)。

也就是说,如果

Yt=Yt1+ϵt+θϵt1,
θ1,AR 和 MA 部分的根将几乎抵消,因此该过程将类似于有限样本中的白噪声,导致许多错误拒绝零,因为该过程仍然具有单位根(非平稳)。

以下是您提到的 ADF 测试的示例。[Schwert 模拟,如果您查看系数统计量,可以使用不那么极端的 MA 结构生成更极端的经验大小T(ρ^1)或 Phillips-Perron 检验,参见他的表 5-10。]

library(urca)
reps <- 1000
n <- 100
rejections <- matrix(NA,nrow=reps)

for (i in 1:reps){
  y <- cumsum(arima.sim(n = n, list(ma = -0.98)))
  rejections[i] <- (summary(ur.df(y, type = "drift", selectlags="Fixed",lags=12*(n/100)^.25))@teststat[1] < -2.89)
}
mean(rejections)

示例 2

均值回归但不是静止的过程。例如,Yt可能是一个 AR(1) 过程,其 AR 系数的绝对值小于 1,但具有一个创新过程,其方差在某个时间点永久变化(“无条件异方差”)。然后该过程没有单位根,但也不是静止的,因为它的无条件分布随时间而变化。

根据方差变化的类型,ADF 测试仍会频繁拒绝。在下面的示例中,我们有一个向下的方差中断,这使测试“相信”该系列收敛,导致拒绝单位根的零值。

library(urca)
reps <- 1000
n <- 100
rejections <- matrix(NA,nrow=reps)

for (i in 1:reps){
  u_1 <- rnorm(n/2,sd=5)
  u_2 <- rnorm(n/2,sd=1)
  u <- c(u_1,u_2)
  y <- arima.sim(n=n,list(ar = 0.8),innov=u)
  rejections[i] <- (summary(ur.df(y, type = "drift"))@teststat[1] < -2.89)      
}
mean(rejections)

(顺便说一句,在存在无条件异方差的情况下,ADF 检验“失去”了其关键的渐近零分布。)