1. Učit se
  2. /
  3. Kurzy
  4. /
  5. Optimizing R Code with Rcpp

Connected

cvičení

Simulace modelu MA(q)

Modely klouzavého průměru (MA) také závisí na předchozí iteraci. Na rozdíl od AR modelů je závislost na složce šumu.

Tady je algoritmus v R:

ma1 <- function(n, mu, theta, sd) {
  q <- length(theta)
  x <- numeric(n)
  eps <- rnorm(n, 0, sd)
  for(i in seq(q + 1, n)) {
    value <- mu + eps[i]
    for(j in seq_len(q)) {
      value <- value + theta[j] * eps[i - j]
    }
    x[i] <- value
  }
  x
}

n je počet simulovaných pozorování, mu je střední hodnota, theta je numerický vektor koeficientů klouzavého průměru a sd je směrodatná odchylka šumu.

Dříve v kapitole jsi používal/a R::rnorm() pro vygenerování jednoho čísla z normálního rozdělení. Existuje také Rcpp::rnorm(), které dokáže vygenerovat celý numerický vektor najednou. Přijímá stejné argumenty jako R-ková funkce rnorm(). Dokonči definici funkce ma2(), což je překlad ma1() do C++.

Pokyny

100 XP
  • Vygeneruj vektor šumu jako eps. Použij rnorm() z jmenného prostoru Rcpp (ne z jmenného prostoru R).
  • Uvnitř vnější smyčky for vypočítej value jako mu plus i-tá hodnota šumu.
  • Uvnitř vnitřní smyčky for zvyš value o j-tý prvek vektoru theta vynásobený prvkem eps na pozici „i minus j minus 1".
  • Po skončení smyček nastav i-tý prvek vektoru x na value.