Stazionarietà e non stazionarietà


Articoli di approfondimento


STAZIONARIETA' E NON STAZIONARIETA'


La caratteristica principale delle serie storiche stazionarie è il mean reverting questa caratteristica implica la tendenza della serie a muoversi attorno alla media del processo.

#### Mean Reverting
    set.seed(123)
    n <- 100
    eps <- rnorm(n)
    xt<- rep(0, 100)
    xt[1]<-5
    # creo 50 valori di tre sere storiche con radici unitarie differenti
    for (i in seq.int(2, 100)){
      xt[i] <-5+ 0.2*xt[i-1] + eps[i]
    }

    plot(ts(xt),ylim=c(-5,16),col=10)
    abline(h=5, col=5)
    abline(h=0)
    legend("topleft",c("valore atteso di Xt: E[ Xt ]=5"), lty=1,col = 5)
plot of chunk unnamed-chunk-1

Ma cosa succede quanto c'è uno shock temporaneo?
Quando in un determinato periodo del processo avviene uno shock temporaneo subentra il concetto di memoria del processo; c'è assenza di memoria quando gli eventi passati non influenzano il tempo corrente ossia quando il processo non ricorda la sua storia passata e quindi risulta indipendente da essa. La funzione di autocorrelazione ci dice informazioni utili circa la memoria del processo infatti se la radice unitari presa in valore assoluto è inferiore a 1 allora il processo riassorbirà lo shock prima o poi (più essa risulta prossima allo zero meno tempo inmpiegherà a riassorbire lo shock); mentre se la radice unitaria, presa in valore assoluto, è uguale a 1 lo shock risulta essere permanente e non sara mai riappianato e quindi il processo risulta essere non stazionario.
Un processo non stazionario è detto processo a memoria permanente ed è in grado di cogliere i movimenti della serie di breve e lungo periodo
Un processo stazionario è detto processo a memoria transitoria ed è in grado di cogliere i movimenti della serie solo su brevi periodi temporali.
L'ergodicità è una condizione che limita la memoria del processo: un processo non ergodico è un processo che ha caratteristiche di persistenza così accentuate da far sì che un segmento del processo, per quanto lungo, sia insufficiente a dire alcunche sulle sue caratteristiche distributive. In un processo ergodico, al contrario, la memoria del processo è debole su lunghi orizzonti e all'aumentare dell'ampiezza del campione aumenta in modo significativo anche l'informazione in nostro possesso.

Esempio: ipotiziamo 3 AR(1):
=>Yt = μ + Y(t-1) + et
=>Yt = μ + 0.9*Y(t-1) + et
=>Yt = μ + 0.2*Y(t-1) + et
Inserendo un shock temporaneo altempo 51 i tre modelli si comporteranno in maniera differente:
#### Memoria di un processo 

    #Per semplicità di calcolo ipotizziamo mu=0 
    #(media del processo uguale a zero)
    n <- 100
    eps <- rnorm(n)
    x0 <- x2 <- x3<- rep(0, 100)

    # creo 50 valori di tre sere storiche con radici unitarie differenti
    for (i in seq.int(2, 50)){
      x0[i] <- 0.2*x0[i-1] + eps[i]
      x2[i] <- 0.9*x2[i-1] + eps[i]
      x3[i] <- 1*x3[i-1] + eps[i]
    }

    # inserisco uno shock temporaneo al tempo "51" e 
    #osservo le reazioni delle serie storiche
    x0[51]<- x2[51]<-x3[51]<-10

    for (i in seq.int(52, 100)){
      x0[i] <- 0.2*x0[i-1] + eps[i]
      x2[i] <- 0.9*x2[i-1] + eps[i]
      x3[i] <- 1*x3[i-1] + eps[i]
    }

    plot(ts(x0),ylim=c(-16,16),col=10)
    lines(ts(x2),col=3)
    lines(ts(x3),col=4)
    abline(h=0)
    legend("topleft",c("phi=0.2","phi=0.9","phi=1"), lwd=c(1,1,1),lty=1
           ,col = c(10,3,4))
plot of chunk unnamed-chunk-2

SCOMPOSIZIONE DI WOLD:





TREND STOCASTICI E TREND DETERMINISTICI


La maggior parte delle serie storiche economiche presentano andamenti nel tempo di tipo non stazionario. L'assenza di stazionarietà può riguardare la media della serie o la varianza. Il problema della non stazionarietà può essere affrontato introducendo 2 classi di modelli:

Per rendere stazionario un processo trend stazionario è necessaria l'operazione di detrendizzazione mentre nel caso di processo trend stocastico è necessaria un'operazione di differenziazione. La detrendizzazione ha l'obbiettivo di sottrarre alla serie con presenza di un trend stazionario il suo valore atteso g(t) (funzione trend). Con la differenziazione, invece, si applica una differenza DELTA=(1-L) con l'operatore di ritardo di ordine "s" pari al numero delle radici unitarie.

#### Trend stocastico e trend deterministico

    n <- 100
    eps <- rnorm(n)
    x0 <- x2 <- x3<- rep(0, 100)
    for (i in seq.int(2, 100))    {
      x0[i] <- 0.3*i
      x2[i] = 0.3*i +eps[i]
      x3[i] <- 1*x3[i-1] + eps[i]
    }

    #TREND DETERMINISTICO - DETRENDIZZAZIONE
    plot(ts(x2),ylim=c(-5,30)) #plot serie di partenza
    x2d<-x2-x0
    lines(x2d,col=4)           #plot serie detrendizzata
    legend("topleft",c("Trend stazionario","Processo stazionario"),
           lwd=c(1,1),lty=1,col = c(1,4))
plot of chunk unnamed-chunk-3
    # TREND STOCASTICO - DIFFERENZIAZIONE (RW)
    plot(ts(x3),ylim=c(-5,30))      #plot serie di partenza
    x3d<-diff(ts(x3)) #comando per differenziare la serie
    lines(x3d,col=4)  #plot serie differenziata -> rimane solo il RW
    legend("topleft",c("Trend stocastico","Processo stazionario"),
           lwd=c(1,1),lty=1,col = c(1,4))
plot of chunk unnamed-chunk-3
    # inserisco uno shock temporaneo al tempo "51"
    x3[51]<-10

    for (i in seq.int(52, 100)){
      x3[i] <- 1*x3[i-1] + eps[i]
    }
    # TREND STOCASTICO - DIFFERENZIAZIONE (RWD)
    plot(ts(x3),ylim=c(-5,30))      #plot serie di partenza
    x3d<-diff(ts(x3)) #comando per differenziare la serie
    lines(x3d,col=4)  #plot serie differenziata -> rimane solo il RW
    legend("topleft",c("Trend stocastico","Processo stazionario"),
           lwd=c(1,1),lty=1,col = c(1,4))
plot of chunk unnamed-chunk-3

La scomposizione di Beveridge Nelson è una scomposizione di processi integrati finalizzata alla separazione del trend stocastico (di lungo periodo RW) dalla componente di breve periodo interpretata da un processo stazionario (ciclo. Essa viene spesso utilizzata per individuare le componenti di trend e di ciclo presenti in una serie storica non stazionaria.
SPIEGAZIONE:

Yt = C(L)*et

C(L) = C(1) + C'(L)(1 - L)
Se definiamo un processo ut tale per cui valga Δut = et (ossia un random walk i cui incrementi siano dati da et), si arriva a:

yt = C(1)*ut + C'(L)*et = Pt + Tt

dove Pt = C(1)*ut è un Random Walk che chiamiamo componente permanente e Tt = C'(L)*e t è un processo I(0) che chiamiamo componente transitoria.


L'utilità della scomposizione BN è duplice: da un punto di vista pratico, è uno strumento che viene spesso utilizzato in macroeconometria quando si tratta di separare trend e ciclo in una serie storica. In poche parole, data una serie storica che ci interessa scomporre in trend e ciclo, si stima un modello ARMA sulle differenze prime, dopodiche si applica la scomposizione BN a partire dai parametri stimati. La scomposizione BN non è l'unico strumento per raggiungere lo scopo, e non è immune da critiche, ma su questo, come al solito, rinvio alla letteratura specializzata.
L'altro uso che si fa della scomposizione BN è teorico. Con un nome diverso (scomposizione in martingala), gioca un ruolo fondamentale nella letteratura probabilistica sui processi stocastici quando si devono analizzare certe proprietà asintotiche.

### Scomposizione Beveridge-Nelson

      trt<-vector()
      xt<-rpois(100, 1)
      eps<-runif(100, min = -1, max = 1)
      phi<-0.6
      teta<-0.5
      co<-(1+teta)/(1-phi)
      trt[1]<-xt[1]+ co * eps[1]
      for(i in 2:100)      {
        trt[i]<-trt[i-1]+ co * eps[i]
      }
      ciclo<-xt-trt

      plot(ts(xt),ylim=c(-50,50), col=10) #plot della serie
      lines(ts(trt),col=3)        #plot della componente trend
      lines(ts(ciclo),col=4)      #plot della componente ciclo
      abline(h=0)
      legend("topright",c("Processo stazionario","Random Walk","Ciclo"),
             lwd=c(1,1,1),lty=1,col = c(10,3,4))
plot of chunk unnamed-chunk-4



TEST DI NON STAZIONARIETA'


I test di radice unitaria hanno come scopo la scelta di TD o TS: se siamo in presenza di non stazionarietà non sappiamo in quali dei due casi ci troviamo e potremmo ricorrere alla detrendizzazione quando in realtà sarebbe più opportuno utilizzare la differenziazione e quindi ricorrere in errori o viceversa. Nel caso di TS il test di radice unitaria permette anche di individuare l'ordine di differenziazione S.
I test di radice unitaria sono test statistici di verifica di ipotesi, e hanno come ipotesi nulla la presenza nella componente autoregressiva di una radice unitaria. Come ipotesi alternativa possono essere considerate di volta in volta situazioni che meglio si adattano ai dati, quali ad esempio la presenza di un trend deterministico lineare, di un trend esponenziale, oppure situazioni in cui l'ipotesi alternativa è che il processo sia stazionario. Test di questo tipo sono detti test di non stazionarietà, perchè nell'ipotesi nulla è specificata l'esistenza di un trend stocastico.

Tutti i test di stazionarietà e non stazionarietà presentano delle caratteristiche comuni che ne limitano la flessibilità di utilizzo:


In questa sede ci limiteremo soltanto a trattare il caso del test di Dickey-Fuller (dimostrazione dispensa), la cui ipotesi nulla è specificata nella presenza di una radice unitaria e quindi di un trend stocastico. Si suppone che il processo generatore dei dati Xt sia interpretabile mediante processo AR(1) intorno ad una componente deterministica CDt che può variare al variare di t, si ha quindi che:
(Xt - CDt) = α(Xt-1 - CDt-1) + ut

Esistono tre tipi di test DF, sottopongo a verifica l'ipotesi:
H0: α = 1
H1: |α| < 1

#### Test Dickey-Fuller


    x1<-y1<-z1<-vector()
    x1 <- round(rnorm(100),3) # serie stazionaria
    y1 <- x1 + 10 # serie stazionaria attorno a una costante     
    for (i in 1:100) {
      z1[i] <- 0.3*i + 2 + x1[i] #AR(1) attorno ad un trend lineare
    }

    plot(ts(x1),ylim=c(-4,40))
    lines(ts(y1),lty=1,col=3)
    lines(ts(z1),lty=1,col=4)
    legend("topleft",c("Processo stazionario","Stazionario + k",
                       "AR(1) attorno ad un trend lineare"),lty=1,
                        col = c(1,3,4))
plot of chunk unnamed-chunk-5
    dati1<-as.data.frame(cbind(x1,y1,z1))


    adfTest(x1,type="nc",lags=0) #stazionario 1 caso
## 
## Title:
##  Augmented Dickey-Fuller Test
## 
## Test Results:
##   PARAMETER:
##     Lag Order: 0
##   STATISTIC:
##     Dickey-Fuller: -10.844
##   P VALUE:
##     0.01 
## 
## Description:
##  Fri Sep 07 15:44:34 2018 by user: gieck
    adfTest(y1,type="nc",lags=0) #non stazionario 1 caso
## 
## Title:
##  Augmented Dickey-Fuller Test
## 
## Test Results:
##   PARAMETER:
##     Lag Order: 0
##   STATISTIC:
##     Dickey-Fuller: -0.6752
##   P VALUE:
##     0.3979 
## 
## Description:
##  Fri Sep 07 15:44:34 2018 by user: gieck
    adfTest(y1,type="c",lags=0)  #stazionario 2 caso
## 
## Title:
##  Augmented Dickey-Fuller Test
## 
## Test Results:
##   PARAMETER:
##     Lag Order: 0
##   STATISTIC:
##     Dickey-Fuller: -10.9287
##   P VALUE:
##     0.01 
## 
## Description:
##  Fri Sep 07 15:44:35 2018 by user: gieck
    adfTest(z1,type="nc",lags=0) #non stazionario 1 caso
## 
## Title:
##  Augmented Dickey-Fuller Test
## 
## Test Results:
##   PARAMETER:
##     Lag Order: 0
##   STATISTIC:
##     Dickey-Fuller: 1.4574
##   P VALUE:
##     0.9619 
## 
## Description:
##  Fri Sep 07 15:44:35 2018 by user: gieck
    adfTest(z1,type="c",lags=0)  #non stazionario 2 caso
## 
## Title:
##  Augmented Dickey-Fuller Test
## 
## Test Results:
##   PARAMETER:
##     Lag Order: 0
##   STATISTIC:
##     Dickey-Fuller: -0.798
##   P VALUE:
##     0.7599 
## 
## Description:
##  Fri Sep 07 15:44:35 2018 by user: gieck
    adfTest(z1,type="ct",lags=0) #stazionario 3 caso
## 
## Title:
##  Augmented Dickey-Fuller Test
## 
## Test Results:
##   PARAMETER:
##     Lag Order: 0
##   STATISTIC:
##     Dickey-Fuller: -11.0765
##   P VALUE:
##     0.01 
## 
## Description:
##  Fri Sep 07 15:44:35 2018 by user: gieck

Le statistiche test studiate nel paragrafo precedente si basano sul presupposto che i residui di regressione possano essere interpretati mediante v.c. white noise incorrelate. Una ipotesi che raramente risulta supportata dalle osservazioni, perchè non sempre un processo AR(1) riesce a catturare tutta l'autocorrelazione presente nella serie storica, a tal proposito Dickey e Fuller suggeriscono di stimare un modello AR(p) a p > 1 ritardi in sostituzione del modello AR(1).
Questo test è chiamato: Test Augmented Dickey-Fuller

#### Test Augmented Dickey-Fuller

    q1<-vector()
    eps<-rnorm(100)
    q1[1]<-q1[2]<-q1[3]<-1
    for (i in 4:100) {
      # AR(3) inventato
      q1[i]<-q1[i-1]+0.5*q1[i-1]-0.5*q1[i-2]+0.3*q1[i-2]-0.3*q1[i-3]+eps[i]

    }
    plot(ts(q1))
plot of chunk unnamed-chunk-6
    adfTest(q1,type="nc",lags=2)
## 
## Title:
##  Augmented Dickey-Fuller Test
## 
## Test Results:
##   PARAMETER:
##     Lag Order: 2
##   STATISTIC:
##     Dickey-Fuller: -1.4413
##   P VALUE:
##     0.1538 
## 
## Description:
##  Fri Sep 07 15:44:35 2018 by user: gieck
    summary(ur.df(q1,type="none",lags=2))
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression none 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.92650 -0.69417 -0.05655  0.63986  2.48003 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## z.lag.1     -0.013415   0.009307  -1.441 0.152812    
## z.diff.lag1  0.440643   0.097308   4.528 1.74e-05 ***
## z.diff.lag2  0.346108   0.099071   3.494 0.000729 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.9382 on 94 degrees of freedom
## Multiple R-squared:  0.4838,	Adjusted R-squared:  0.4673 
## F-statistic: 29.37 on 3 and 94 DF,  p-value: 1.743e-13
## 
## 
## Value of test-statistic is: -1.4413 
## 
## Critical values for test statistics: 
##      1pct  5pct 10pct
## tau1 -2.6 -1.95 -1.61
    adf.test(q1,k=2)
## 
## 	Augmented Dickey-Fuller Test
## 
## data:  q1
## Dickey-Fuller = -1.4389, Lag order = 2, p-value = 0.8091
## alternative hypothesis: stationary