Error en la desviación estándar al simular un ARMA (1,1) usando arima.sim

Estoy intentando simular un proceso ARMA (1,1) cuyos parámetros de media móvil y autorregresiva son, respectivamente, 0,74 y 0,47. Además, quiero que los datos simulados tengan una media igual a 900 y una desviación estándar igual a 230. Para lograr esto, probé

set.seed(100) fit = arima.sim(list(order = c(1,0,1), ar = 0.74, ma = 0.47), n = 10000, rand.gen= rnorm, sd = 230) + 900 

La media de la serie temporal sintética es aceptable.

mean(fit) #922.749 

Sin embargo, cuando calculo la desviación estándar, la diferencia entre El valor calculado y el que estipulé como la desviación estándar para fit es demasiado grande.

sd(fit) #511.3077 - almost two times higher than the value I thought I"d observe 

¿Cómo puedo cambiar mi código para asegurarme de que la serie simulada tendrá una desviación estándar cercana a la que estipulo dentro de la función arima.sim?

Responder

La sd(fit) es $ \ sqrt {Var (y_t)} $ donde $ y_t $ es ARIMA (1,1), sin embargo, el sd que especificas en la llamada arima.sim es el sd del ruido blanco de la serie.

Considere los procesos AR (1) $$ y_t = b y_ {t-1} + u_t $$ $$ u_t = \ sigma \ epsilon_t $$ $$ \ epsilon_t \ sim \ mathcal N (0,1) $$ aquí el $ sd (y_t) = \ sqrt {Var (y_t)} $ que puede ser $$ Var (y_t ) = b ^ 2Var (y_ {t-1}) + \ sigma ^ 2Var (\ epsilon_t) $$ tal que

$$ Var (y_t) = \ frac {\ sigma ^ 2} {1-b ^ 2} $$

y $ \ sigma $ es la desviación estándar de $ u_t $ .

Especificar un modelo en R

set.seed(100) b <- 0.5 s <- 0.9 fit = arima.sim(list(order = c(1,0,0), ar = b), n = 100000, rand.gen= rnorm, sd = s) sd(fit) sqrt(s^2/(1-b^2)) 

devuelve la salida

> sd(fit) [1] 1.041033 > sqrt(s^2/(1-b^2)) [1] 1.03923 

por lo que sd en arima.sim es $ \ sigma $ .

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *