Erro no desvio padrão ao simular um ARMA (1,1) usando arima.sim

Estou tentando simular um processo ARMA (1,1) cujos parâmetros autorregressivos e de média móvel são, respectivamente, 0,74 e 0,47. Além disso, quero que os dados simulados tenham média igual a 900 e desvio padrão igual a 230. Para isso, tentei

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 

A média da série temporal sintética é aceitável.

mean(fit) #922.749 

No entanto, quando calculo o desvio padrão, a diferença entre o valor calculado e o que estipulei como o desvio padrão para fit é muito grande.

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

Como posso alterar meu código para ter certeza de que a série simulada terá um desvio padrão próximo ao que estipulei dentro da função arima.sim?

Resposta

O sd(fit) é $ \ sqrt {Var (y_t)} $ onde $ y_t $ é ARIMA (1,1), porém o sd que você especifica na arima.sim chamada é o sd do ruído branco na série.

Considere os processos AR (1) $$ y_t = b y_ {t-1} + u_t $$ $$ u_t = \ sigma \ epsilon_t $$ $$ \ epsilon_t \ sim \ mathcal N (0,1) $$ aqui o $ sd (y_t) = \ sqrt {Var (y_t)} $ que pode ser encontrado como $$ Var (y_t ) = b ^ 2Var (y_ {t-1}) + \ sigma ^ 2Var (\ epsilon_t) $$ de modo que

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

e $ \ sigma $ é o desvio padrão de $ u_t $ .

Especificando um modelo em 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)) 

retorna a saída

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

para que sd em arima.sim é $ \ sigma $ .

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *