Simular modelo AR(p)
Los modelos autorregresivos (AR) son un tipo de regresión lineal para series temporales en los que los valores predichos dependen de los valores en puntos temporales anteriores. Debido a esta dependencia, el modelo debe calcularse punto a punto en el tiempo. Eso implica usar un bucle for, ¡así que C++ viene de perlas!
Aquí tienes el algoritmo en R:
ar1 <- function(n, constant, phi, eps) {
p <- length(phi)
x <- numeric(n)
for(i in seq(p + 1, n)) {
value <- rnorm(1, constant, eps)
for(j in seq_len(p)) {
value <- value + phi[j] * x[i - j]
}
x[i] <- value
}
x
}
n es el número de observaciones simuladas, c es una constante, phi es un vector numérico de coeficientes de autocorrelación y eps es la desviación estándar del ruido. Completa la definición de ar2(), una traducción a C++ de ar1().
Este ejercicio forma parte del curso
Optimizar código de R con Rcpp
Instrucciones del ejercicio
- Genera un número aleatorio con distribución normal con media
cy desviación estándareps, usando la API de R de Rcpp. - Haz que el bucle for interno itere de
0ap. - Dentro del bucle interno, incrementa
valuepor el elementojdephimultiplicado 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 ar2(int n, double c, NumericVector phi, double eps) {
int p = phi.size();
NumericVector x(n);
// Loop from p to n
for(int i = p; i < n; i++) {
// Generate a random number from the normal distribution
double value = ___::___(___, ___);
// Loop from zero to p
for(int j = ___; j < ___; j++) {
// Increase by the jth element of phi times
// the "i minus j minus 1"th element of x
value += ___[___] * ___[___];
}
x[i] = value;
}
return x;
}
/*** R
d <- data.frame(
x = 1:50,
y = ar2(50, 10, c(1, -0.5), 1)
)
ggplot(d, aes(x, y)) + geom_line()
*/