Errore nella deviazione standard durante la simulazione di un ARMA (1,1) utilizzando arima.sim

Sto cercando di simulare un processo ARMA (1,1) i cui parametri autoregressivo e media mobile sono, rispettivamente, 0,74 e 0,47. Inoltre, voglio che i dati simulati abbiano una media uguale a 900 e la deviazione standard uguale a 230. Per ottenere ciò, ho provato

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 delle serie temporali sintetiche è accettabile.

mean(fit) #922.749 

Tuttavia, quando calcolo la deviazione standard, la differenza tra la il valore calcolato e quello che ho stabilito come deviazione standard per fit è troppo grande.

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

Come posso cambiare il mio codice per assicurarmi che la serie simulata abbia una deviazione standard vicina a quella stabilita nella funzione arima.sim?

Risposta

Il sd(fit) è $ \ sqrt {Var (y_t)} $ dove $ y_t $ è ARIMA (1,1), tuttavia sd specificato nella chiamata arima.sim è sd del rumore bianco nella serie.

Considera i processi AR (1) $$ y_t = b y_ {t-1} + u_t $$ $$ u_t = \ sigma \ epsilon_t $$ $$ \ epsilon_t \ sim \ mathcal N (0,1) $$ qui il $ sd (y_t) = \ sqrt {Var (y_t)} $ che può essere trovato come $$ Var (y_t ) = b ^ 2Var (y_ {t-1}) + \ sigma ^ 2Var (\ epsilon_t) $$ tale che

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

e $ \ sigma $ è la deviazione standard di $ u_t $ .

Specificare un modello in 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)) 

restituisce loutput

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

quindi sd in arima.sim è $ \ sigma $ .

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *