ComenzarEmpieza gratis

Modelo ARMA (p, q)

Un modelo de media móvil autorregresiva (ARMA(p, q)) combina los modelos de autorregresión (AR(p)) y media móvil (MA(q)) en uno. El valor actual del vector simulado depende tanto de valores anteriores del propio vector como de valores anteriores del vector de ruido.

Completa la definición de la función arma().

Este ejercicio forma parte del curso

Optimizar código de R con Rcpp

Ver curso

Instrucciones del ejercicio

  • Define una variable entera, start, igual al máximo de p y q, más uno. Recuerda que max() está en el espacio de nombres std.
  • Dentro del bucle externo, define una variable double, value, como mu más el valor de ruido i-ésimo.
  • Dentro del primer bucle interno, incrementa value con el elemento j-ésimo de theta multiplicado por el elemento "i menos j menos 1" de eps.
  • Dentro del segundo bucle interno, incrementa value con el elemento j-ésimo de phi multiplicado por el elemento "i menos j menos 1" de x.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

#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()
*/
Editar y ejecutar código