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)
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.
#### 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))
SCOMPOSIZIONE DI WOLD:
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:
#### 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))
# 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))
# 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))
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))
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:
#### 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))
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))
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