Bel exemple où une série sans racine unitaire n'est pas stationnaire?

18

J'ai vu plusieurs fois des gens rejeter le nul dans un test de Dickey-Fuller augmenté , puis affirmer qu'il montre que leur série est stationnaire (malheureusement, je ne peux pas montrer les sources de ces affirmations, mais j'imagine que des affirmations similaires existent ici et là dans un ou un autre journal).

Je soutiens que c'est un malentendu (que le rejet du zéro d'une racine unitaire n'est pas nécessairement la même chose que d'avoir une série stationnaire, d'autant plus que d'autres formes de non-stationnarité sont rarement étudiées ou même envisagées lorsque de tels tests sont effectués).

Ce que je recherche c'est:

a) un joli contre-exemple clair de la réclamation (j'imagine un couple en ce moment mais je parie que quelqu'un d'autre que moi aura quelque chose de mieux que ce que j'ai en tête). Il peut s'agir d'une description d'une situation spécifique, peut-être avec des données (simulées ou réelles; les deux ont leurs avantages); ou

b) un argument convaincant pourquoi le rejet dans un Dickey-Fuller augmenté devrait être considéré comme établissant la stationnarité

(ou même les deux (a) et (b) si vous vous sentez intelligent)

Glen_b -Reinstate Monica
la source
3
Xn=(1)n avec probabilité 1.
cardinal
@cardinal Eh bien, cela obtiendrait certainement un rejet par le test ADF (edit: yep, c'est le cas), et c'est clairement non stationnaire (une racine sur le cercle unitaire, mais pas une racine égale à 1 que l'ADF détecte); donc ça compterait.
Glen_b -Reinstate Monica
Notez que le test ADF a des variantes où la tendance est incluse. Si le nul est rejeté, la série est stationnaire, c'est-à-dire stationnaire si la tendance est supprimée, mais pas stationnaire néanmoins.
mpiktas
+1. Glen_b, une tendance linéaire + bruit AR (1) stationnaire compterait-il comme contre-exemple?
Amoeba dit Reinstate Monica

Réponses:

15

Voici un exemple de série non stationnaire que même un test de bruit blanc ne peut pas détecter (encore moins un test de type Dickey-Fuller):

ce n'est pas du bruit blanc

Oui, cela peut être surprenant mais ce n'est pas du bruit blanc .

La plupart des contre-exemples non stationnaires sont basés sur une violation des deux premières conditions de stationnaire: tendances déterministes (moyenne non constante) ou racine unitaire / séries temporelles hétéroskédastiques (variance non constante). Cependant, vous pouvez également avoir des processus non stationnaires qui ont une moyenne et une variance constantes, mais ils violent la troisième condition: la fonction d'autocovariance (ACVF) doit être constante dans le temps et une fonction deseulement.| s - t |cov(xs,xt)|st|

La série chronologique ci-dessus est un exemple d'une telle série, qui a une moyenne nulle, une variance unitaire, mais l'ACVF dépend du temps. Plus précisément, le processus ci-dessus est un processus MA (1) localement stationnaire avec des paramètres tels qu'il devient un bruit blanc parasite (voir les références ci-dessous): le paramètre du processus MA changements au fil du tempsxt=εt+θ1εt1

θ1(u)=0.51u,

où est le temps normalisé. La raison pour laquelle cela ressemble à du bruit blanc (même si, par définition mathématique, ce n'est clairement pas le cas), c'est que la variation de temps ACVF s'intègre à zéro au fil du temps. Puisque l'échantillon ACVF converge vers l'ACVF moyen, cela signifie que l'autocovariance de l'échantillon (et l'autocorrélation (ACF)) convergera vers une fonction qui ressemble à du bruit blanc. Ainsi, même un test Ljung-Box ne pourra pas détecter cette non-stationnarité. L'article (avertissement: je suis l'auteur) sur le test du bruit blanc contre des alternatives localement stationnaires propose une extension des tests Box pour traiter de tels processus localement stationnaires.u=t/T

Pour plus de code R et plus de détails, consultez également cet article de blog .

Mise à jour après le commentaire de mpiktas :

Il est vrai que cela pourrait ressembler à un cas théoriquement intéressant qui ne se voit pas dans la pratique. Je suis d'accord qu'il est peu probable de voir un tel bruit blanc parasite directement dans un ensemble de données du monde réel, mais vous le verrez dans presque tous les résidus d'un ajustement de modèle stationnaire. Sans entrer dans trop de détails théoriques, imaginez simplement un modèle général variant dans le temps avec une fonction de covariance variant dans le temps . Si vous ajustez un modèle constant , alors cette estimation sera proche de la moyenne temporelle du vrai modèle ; et naturellement les résidus seront maintenant proches de , qui par construction dey θ ( k , u ) θ θθ(u)γθ(k,u)θ^θ(u)θ(u)θ^θ^s'intégrera à zéro (environ). Voir Goerg (2012) pour plus de détails.

Regardons un exemple

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

Nous ajustons donc le bruit fractionnel avec le paramètre (puisque nous pensons que tout va bien et nous avons un modèle stationnaire). Vérifions les résidus: d <0,5d^=0.23d^<0.5

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

série chronologique et tracé acf

Ça a l'air bien non? Eh bien, le problème est que les résidus sont un bruit blanc parasite . Comment puis-je savoir? Tout d'abord, je peux le tester

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

et deuxièmement, nous savons par la littérature que les données de l'anneau d'arbre sont en fait un bruit fractionné localement stationnaire: voir Goerg (2012) et Ferreira, Olea et Palma (2013) .

Cela montre que mon exemple, certes, d'apparence théorique, se produit réellement dans la plupart des exemples du monde réel.

Georg M. Goerg
la source
+1, très bel exemple! Je suis intéressé, mais existe-t-il des exemples réels de telles séries?
mpiktas
@mpiktas J'ai ajouté une mise à jour du message qui devrait répondre à votre question.
Georg M. Goerg
γ1(u)=θ(u)σ(u)σ(u1/T)θ(u)γ^101θ(u)du=0σ ( u ) θ ( u ) ε t01θ(u)σ2(u)du=0 , c'est-à-dire que doit être choisi conformément à pour que l'instruction contienne. Dans Ferreira et al, la définition (4) manque . σ(u)θ(u)εt
mpiktas
Votre exemple donné dit que lorsque nous avons un modèle variant dans le temps, l'ajustement d'un modèle non variable dans le temps entraînerait une inférence incorrecte. Mais cela est loin de dire que chaque série temporelle réelle peut être modélisée avec un modèle variant dans le temps. D'autre part, votre test peut être appliqué pour tester la présence de variation temporelle. Merci encore pour un aperçu intéressant.
mpiktas
σ(u)20.5T
7

Exemple 1

Les processus de racine unitaire avec une forte composante MA négative sont connus pour conduire à des tests ADF avec une taille empirique bien supérieure à celle nominale (par exemple, Schwert, JBES 1989 ).

Ouit=Ouit-1+ϵt+θϵt-1,
θ-1

T(ρ^-1)

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)

Exemple 2

Ouit

Selon le type de changement de variance, le test ADF sera toujours rejeté fréquemment. Dans mon exemple ci-dessous, nous avons une rupture de variance à la baisse, ce qui fait que le test "croit" que la série converge, conduisant à un rejet du nul d'une racine unitaire.

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)

(Soit dit en passant, le test ADF "perd" sa distribution nulle asymptotique pivot en présence d'hétéroskédasticité inconditionnelle.)

Christoph Hanck
la source
@Glen_b, cela (j'espère) pourrait être une réponse à votre premier paragraphe, mais pas vraiment au titre de votre question - y a-t-il un écart ou un manque de compréhension de ma part?
Christoph Hanck
"That" = Exemple 1
Christoph Hanck
Cela dépend de la définition de la "racine unitaire". Je l'ai appris à l'origine en tant que «racine sur le cercle unitaire» (une racine du module 1), mais il semble maintenant être (et dans le contexte du test ADF) une racine du polynôme caractéristique réellement égale à 1 . Même si j'ai le mauvais sens dans le titre, votre réponse répond à la question prévue, alors pensez que ça va.
Glen_b -Reinstate Monica
Mon point n'est probablement pas clairement formulé: dans le titre, vous recherchez des exemples de séries "sans racine unitaire", tandis que le premier paragraphe (pour moi) ressemble à la recherche d'exemples dans lesquels le rejet est mauvais. Mon premier exemple est celui de ce dernier cas, dans lequel ADF est susceptible de rejeter, bien que le processus ait une racine unitaire.
Christoph Hanck
Ah, désolé, je n'y pensais pas correctement. Oui, strictement ce n'est pas conforme à l'une ou l'autre interprétation du titre, mais il répond toujours à la question plus large dans le corps. (Les titres sont nécessairement moins nuancés, donc ce n'est pas un problème.) ... Je pense que c'est une réponse très intéressante, et si quelque chose sert mon objectif réel mieux que ce que le titre demande.
Glen_b -Reinstate Monica
7

Le test de racine unitaire est notoirement difficile. L'utilisation d'un seul test n'est généralement pas suffisante et vous devez être très prudent quant aux hypothèses exactes que le test utilise.

La façon dont l'ADF est construit le rend vulnérable à une série qui sont de simples tendances non linéaires avec un bruit blanc ajouté. Voici un exemple:

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

Ici, nous avons la tendance exponentielle et nous voyons que l'ADF fonctionne assez mal. Il accepte le zéro de la racine unitaire 30% du temps et le rejette 70% du temps.

Habituellement, le résultat d'une analyse n'est pas de prétendre que la série est stationnaire ou non. Si les méthodes utilisées dans l'analyse nécessitent une stationnarité, l'hypothèse erronée selon laquelle la série est stationnaire alors qu'elle ne l'est pas, se manifeste généralement d'une manière ou d'une autre. Je regarde donc personnellement toute l'analyse, pas seulement la partie des tests de racine unitaire. Par exemple, l'OLS et le NLS fonctionnent bien pour les données non stationnaires, où la non-stationnarité est dans la moyenne, c'est-à-dire la tendance. Donc, si quelqu'un prétend à tort que la série est stationnaire et applique OLS / NLS, cette affirmation peut ne pas être pertinente.

mpiktas
la source
1
p>0,05
Ah oui, j'ai confondu les signes. J'ai fixé la réponse en conséquence. Merci d'avoir remarqué!
mpiktas
Pourquoi n'as-tu pas utilisé sapply(oo, "[[","p.value")?
2015
Eh bien, je l'ai utilisé, uniquement avec la syntaxe des tuyaux. J'aime les pipes :)
mpiktas
1
J'aime aussi dplyr. Pour ce code, il n'est pas nécessaire, le chargement de magrittr est suffisant.
mpiktas