Modèle ARMA (p, q)
Un modèle d’auto-régression à moyenne mobile (ARMA(p, q)) combine en un seul modèle l’auto-régression (AR(p)) et la moyenne mobile (MA(q)). La valeur courante du vecteur simulé dépend à la fois des valeurs passées de ce même vecteur et des valeurs passées du vecteur de bruit.
Complétez la définition de la fonction arma().
Cet exercice fait partie du cours
Optimiser du code R avec Rcpp
Instructions
- Définissez une variable entière
start, égale au maximum depetq, plus un. Rappelez-vous quemax()se trouve dans l’espace de nomsstd. - À l’intérieur de la boucle for externe, définissez une variable de type
double,value, commemuplus la i-ème valeur de bruit. - À l’intérieur de la première boucle for interne, augmentez
valuede l’élémentjdethetamultiplié par l’élément «imoinsjmoins1» deeps. - À l’intérieur de la seconde boucle for interne, augmentez
valuede l’élémentjdephimultiplié par l’élément « i moins j moins 1 » dex.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
#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()
*/