Fout in de standaarddeviatie bij het simuleren van een ARMA (1,1) met arima.sim

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 $ .

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *