Ik probeer een ARMA (1,1) -proces te simuleren waarvan de autoregressieve en voortschrijdend gemiddelde parameters respectievelijk 0,74 en 0,47 zijn. Bovendien wil ik dat de gesimuleerde gegevens een gemiddelde hebben van 900 en een standaarddeviatie van 230. Om dit te bereiken, heb ik geprobeerd
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
Het gemiddelde van de synthetische tijdreeks is acceptabel.
mean(fit) #922.749
Wanneer ik echter de standaarddeviatie bereken, is het verschil tussen de berekende waarde en de waarde die ik heb opgegeven als de standaarddeviatie voor fit
is te groot.
sd(fit) #511.3077 - almost two times higher than the value I thought I"d observe
Hoe kan ik mijn code wijzigen om er zeker van te zijn dat de gesimuleerde reeks een standaarddeviatie heeft die dicht bij de afwijking ligt die ik in de
arima.sim
-functie bepaal?
Antwoord
De sd(fit)
is $ \ sqrt {Var (y_t)} $ waarbij $ y_t $ is ARIMA (1,1), maar de sd
die u opgeeft in de arima.sim
aanroep is de sd
van de witte ruis in de serie.
Beschouw het AR (1) -proces $$ y_t = b y_ {t-1} + u_t $$ $$ u_t = \ sigma \ epsilon_t $$ $$ \ epsilon_t \ sim \ mathcal N (0,1) $$ hier de $ sd (y_t) = \ sqrt {Var (y_t)} $ waarvan kan worden vastgesteld dat deze $$ Var (y_t ) = b ^ 2Var (y_ {t-1}) + \ sigma ^ 2Var (\ epsilon_t) $$ zodanig dat
$$ Var (y_t) = \ frac {\ sigma ^ 2} {1-b ^ 2} $$
en $ \ sigma $ is de standaarddeviatie van $ u_t $ .
Een model specificeren 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))
geeft de output terug
> sd(fit) [1] 1.041033 > sqrt(s^2/(1-b^2)) [1] 1.03923
dus de sd
in arima.sim
is $ \ sigma $ .