Začněte nyníZačněte zdarma

Model ARMA (p, q)

Model autoregresního klouzavého průměru (ARMA(p, q)) kombinuje autoregresní model (AR(p)) a model klouzavého průměru (MA(q)) v jeden. Aktuální hodnota simulovaného vektoru závisí jak na předchozích hodnotách téhož vektoru, tak na předchozích hodnotách vektoru šumu.

Doplň definici funkce arma().

Toto cvičení je součástí kurzu

Optimizing R Code with Rcpp

Zobrazit kurz

Pokyny k cvičení

  • Definuj celočíselnou proměnnou start jako maximum z p a q plus jedničku. Nezapomeň, že funkce max() patří do jmenného prostoru std.
  • Uvnitř vnějšího cyklu for definuj proměnnou value typu double jako mu plus hodnotu šumu na indexu i.
  • Uvnitř prvního vnitřního cyklu for zvyš value o j-tý prvek vektoru theta vynásobený prvkem vektoru eps na indexu "i minus j minus 1".
  • Uvnitř druhého vnitřního cyklu for zvyš value o j-tý prvek vektoru phi vynásobený prvkem vektoru x na indexu "i minus j minus 1".

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

#include 
using namespace Rcpp;

// [[Rcpp::export]]
NumericVector arma(int n, double mu, NumericVector phi, NumericVector theta, double sd) {
  int p = phi.size();
  int q = theta.size();   
  NumericVector x(n);
  
  // Generate the noise vector
  NumericVector eps = rnorm(n, 0.0, sd);
  
  // Start at the max of p and q plus 1
  ___
  
  // Loop i from start to n
  for(int i = start; i < n; i++) {
    // Value is mean plus noise
    ___
    
    // The MA(q) part
    for(int j = 0; j < q; j++) {
      // Increase by the jth element of theta times
      // the "i minus j minus 1"th element of eps
      ___
    }
    
    // The AR(p) part
    for(int j = 0; j < p; j++) {
      // Increase by the jth element of phi times
      // the "i minus j minus 1"th element of x
      ___
    }
    
    x[i] = value;
  }
  return x;
}

/*** R
d <- data.frame(
  x = 1:50,
  y = arma(50, 10, c(1, -0.5), c(1, -0.5), 1)
)
ggplot(d, aes(x, y)) + geom_line()
*/
Upravit a spustit kód