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
Instrucciones del ejercicio
- Define una variable entera,
start, igual al máximo depyq, más uno. Recuerda quemax()está en el espacio de nombresstd. - Dentro del bucle externo, define una variable
double,value, comomumás el valor de ruidoi-ésimo. - Dentro del primer bucle interno, incrementa
valuecon el elementoj-ésimo dethetamultiplicado por el elemento "imenosjmenos1" deeps. - Dentro del segundo bucle interno, incrementa
valuecon el elementoj-ésimo dephimultiplicado por el elemento "i menos j menos 1" dex.
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()
*/