Yritän simuloida ARMA (1,1) -prosessia joiden autoregressiiviset ja liikkuvan keskiarvon parametrit ovat vastaavasti 0,74 ja 0,47. Lisäksi haluan, että simuloidun datan keskiarvo on yhtä suuri kuin 900 ja keskihajonta on yhtä suuri kuin 230. Tämän saavuttamiseksi yritin
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
Synteettisen aikasarjan keskiarvo on hyväksyttävä.
mean(fit) #922.749
Kuitenkin, kun lasken keskihajonnan, ero laskettu arvo ja arvo, jonka määrittelin standardipoikkeaman kohteelle fit
on liian suuri.
sd(fit) #511.3077 - almost two times higher than the value I thought I"d observe
Kuinka voin muuttaa koodia sen varmistamiseksi, että simuloidulla sarjalla on keskihajonta, joka on lähellä sitä, jonka määrittelen funktion
arima.sim
sisällä? p>
vastaus
sd(fit)
on $ \ sqrt {Var (y_t)} $ missä $ y_t $ on ARIMA (1,1), mutta sd
, jonka määrität puhelussa arima.sim
, on sd
sarjan valkoisesta kohinasta.
Harkitse AR (1) -prosesseja $$ y_t = b y_ {t-1} + u_t $$ $$ u_t = \ sigma \ epsilon_t $$ $$ \ epsilon_t \ sim \ mathcal N (0,1) $$ tässä, $ sd (y_t) = \ sqrt {Var (y_t)} $ , jonka voidaan todeta olevan $$ Var (y_t ) = b ^ 2Var (y_ {t-1}) + \ sigma ^ 2Var (\ epsilon_t) $$ siten, että
$$ Var (y_t) = \ frac {\ sigma ^ 2} {1-b ^ 2} $$
ja $ \ sigma $ on $ u_t $ : n keskihajonta.
Mallin määrittäminen ryhmässä 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))
palauttaa tuloksen
> sd(fit) [1] 1.041033 > sqrt(s^2/(1-b^2)) [1] 1.03923
joten sd
kohdassa arima.sim
on $ \ sigma $ .