Egy ARMA (1,1) folyamatot próbálok szimulálni amelynek autoregresszív és mozgóátlag-paramétere 0,74 és 0,47. Ezenkívül azt akarom, hogy a szimulált adatok egyenlő 900 és szórása egyenlő legyen 230. Ennek megvalósításához megpróbáltam
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 szintetikus idősorok átlaga elfogadható.
mean(fit) #922.749
Amikor azonban kiszámítom a szórást, a a kiszámított érték és az, amelyet a fit
szórásként megadtam, túl nagy.
sd(fit) #511.3077 - almost two times higher than the value I thought I"d observe
Hogyan változtathatom meg a kódomat, hogy megbizonyosodhassak arról, hogy a szimulált sorozatnak olyan szórása van, amely közel áll ahhoz, amelyet az
arima.sim
függvényben előírok?
Válasz
A sd(fit)
$ \ sqrt {Var (y_t)} $ ahol $ y_t $ ARIMA (1,1), azonban az sd
, amelyet az arima.sim
hívásban ad meg, a sd
a sorozat fehér zajától.
Vegye figyelembe az AR (1) -processzokat $$ y_t = b y_ {t-1} + u_t $$ $$ u_t = \ sigma \ epsilon_t $$ $$ \ epsilon_t \ sim \ mathcal N (0,1) $$ itt a $ sd (y_t) = \ sqrt {Var (y_t)} $ , amely $$ Var (y_t) ) = b ^ 2Var (y_ {t-1}) + \ sigma ^ 2Var (\ epsilon_t) $$ olyan, hogy
$$ Var (y_t) = \ frac {\ sigma ^ 2} {1-b ^ 2} $$
és $ \ sigma $ a $ u_t $ szórása.
Modell megadása az R mezőben
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))
a kimenetet adja vissza
> sd(fit) [1] 1.041033 > sqrt(s^2/(1-b^2)) [1] 1.03923
így a sd
a arima.sim
$ \ sigma $ .