21 oct 2014

Ejercicios de simulación de series de tiempo en Stata

1.1. Ruido Blanco

clear all
*Generar un Ruido Blanco
set obs 100
gen obs=_n
tsset  obs

generate normal=invnorm(uniform())
line normal obs


1.2.    Paseo aleatorio

*----------------------------------------------------------------
*RANDOM WALKS

forvalues i=1(1)3 {
    gen random_walk_`i'=100
}

*Initial condition: y(0) = 100
*N(0,1) *N(0,5) *N(0,10)
       replace random_walk_1= random_walk_1[_n-1] +    normal if _n>=2
       replace random_walk_2= random_walk_2[_n-1] +  5*normal if _n>=2
       replace random_walk_3= random_walk_3[_n-1] + 10*normal if _n>=2

Se gráfican las series generadas

twoway line random_walk_1 obs ||line random_walk_2 obs ||line // random_walk_3 obs, ylabel(, nogrid)

Una vez obtenidas las series se calculan las funciones de autocorrelación simple y parcial del proceso son:

ac  random_walk_2, saving(Random_Walks_ac, replace)
pac random_walk_2, saving(Random_Walks_pac, replace)

gr combine Random_Walks_ac.gph Random_Walks_pac.gph

Modificando el código anterior se puede generar caminatas aleatorias partiendo del cero.

*RANDOM WALKS (Around zero)
*Initial condition: y(0) = 0
  gen random_walk00 = 0
      replace random_walk00 = random_walk00[_n-1] +  5*normal if _n>=2

line random_walk00 obs

1.3. Proceso autoregresivo

forvalues i=1(1)3 {
    gen AR_`i'=0
}

* AR-coef: ,99 * AR-coef: ,90 *AR-coef: ,30
       replace AR_1 = (0.99*AR_1[_n-1]) +  5*normal if _n>=2
       replace AR_2 = (0.90*AR_2[_n-1]) +  5*normal if _n>=2
       replace AR_3 = (0.30*AR_3[_n-1]) +  5*normal if _n>=2

twoway line AR_1 obs ||line AR_2 obs ||line AR_3 obs, ylabel(, nogrid)

Las funciones de autocorrelación simple y parcial se obtienen en el siguiente comando, observando como a medida que el parámetro se acerca a 1, este se aleja de la estacinariedad.

*Funciones ACS y ACP
ac  AR_3, saving(AR_ac30, replace)
pac AR_3, saving(AR_pac30, replace)
gr combine AR_ac30.gph AR_pac30.gph

*Funciones ACS y ACP
ac  AR_1, saving(AR_ac99, replace)
pac AR_1, saving(AR_pac99, replace)
gr combine AR_ac99.gph AR_pac99.gph

Las series anteriores podrían incluir una una constante, simplemente modificando las lineas de comando donde generamos las series.

*---------------------------------------------
local alpha=5

forvalues i=1(1)3 {
    gen AR_`i'`i'=0
}

AR-coef: ,99 * AR-coef: ,90 *AR-coef: ,30
      replace AR_11 = `alpha'+(0.99*AR_1[_n-1]) +  5*normal if _n>=2
      replace AR_22 = `alpha'+(0.90*AR_2[_n-1]) +  5*normal if _n>=2
      replace AR_33 = `alpha'+(0.30*AR_3[_n-1]) +  5*normal if _n>=2

twoway line AR_11 obs ||line AR_22 obs ||line AR_33 obs, ylabel(, nogrid) saving(AR, replace)

1.4. Ruido Blanco con constante

Continuando el primer apartado.  un camino aleatorio puede tener una constante, A la innovación, se le suman constante iguales a 4 o 5. Estos pueden tener media no nula.

gen ruido_noise_drift3 = 3+normal
gen ruido_noise_drift5 = 5+normal
twoway line ruido_noise_drift3 obs ||line ruido_noise_drift5 obs

Las funciones de autocorrelación simple y parcial del proceso se representan por:

*Funciones ACS y ACP
ac  ruido_noise_drift3, saving(ruido_noise_drift3ac, replace)
pac ruido_noise_drift3, saving(ruido_noise_drift3pac, replace)
gr combine ruido_noise_drift3ac.gph ruido_noise_drift3pac.gph

1.5. Ruido Blanco con  deriva

Sumar una constante a un camino aleatoria, se genera una tendencia, No determinista. No se parece a una tendencia determinista, aunque parecería

T(t)= alpha+t(t-1)+e(t)

*WHITE NOISE with drift

forvalues i=1(1)2 {
    gen random_walk_drift_`i'=100
}

*Initial condition: y(0) = 100
 *N(0,5)
       replace random_walk_drift_1 = random_walk_drift_1[_n-1]+ 1 +  5*normal if _n>=2
       replace random_walk_drift_2 = random_walk_drift_2[_n-1]+ 5 +  5*normal if _n>=2

twoway line random_walk_drift_1 obs ||line random_walk_drift_1 obs

1.6. Proceso autoregresivo con tendencia estocástica y deterministica

*----------------------------------------------------------------
*AUTOREGRESSIVE PROCESSES with tendencia estocastica y deterministica

gen AR_det_1 = 150
gen AR_est_1 = 150

local alpha=10
*AR-coef: ,99
       replace AR_est_1 = `alpha'+(0.9*AR_est_1[_n-1]) +  0.5*normal if _n>=2
       replace AR_det_1 = `alpha'+(0.9*AR_det_1[_n-1])               if _n>=2

twoway line AR_est_1 obs ||line AR_det_1 obs

         1.7. Proceso autoregresivo de orden dos AR(2) (Estacionarios y no)

*AUTOREGRESSIVE PROCESSES AR(2)
*stationary
 
       gen AR_sta_2 = 100
          replace AR_sta_2 = 100+normal if _n==2
          replace AR_sta_2 = `alpha'+ 0.6*AR_sta_2[_n-1] +  0.3*AR_sta_2[_n-2] + normal if _n>=3
   
   twoway line AR_sta_2 obs    

Ahora se genera un proceso no estacionario de orden 2.

No estacionario

*Nostationary
      gen AR_nsta_2 = 100
          replace AR_nsta_2 = 100+normal if _n==2
          replace AR_nsta_2 = 1.5*AR_nsta_2[_n-1] -  0.5*AR_nsta_2[_n-2] + normal if _n>=3
   
   twoway line AR_nsta_2 obs   ||  line AR_sta_2 obs  

   1.8. Proceso media móvil, MA(1)

Estimación del modelo HP mediante máxima verosimilitud

El filtro de Hodrick–Prescott (HP) se utiliza ampliamente para descomponer una serie macroeconómica en un componente cíclico y transitorio. ...