Modello ARMA (p, q)
Un modello di media mobile autoregressivo (ARMA(p, q)) combina in un unico modello l’autoregressione (AR(p)) e la media mobile (MA(q)). Il valore corrente del vettore simulato dipende sia dai valori precedenti dello stesso vettore sia dai valori precedenti del vettore del rumore.
Completa la definizione della funzione arma().
Questo esercizio fa parte del corso
Ottimizzare il codice R con Rcpp
Istruzioni dell'esercizio
- Definisci una variabile intera,
start, uguale al massimo trapeq, più uno. Ricorda chemax()è nel namespacestd. - Nel ciclo for esterno, definisci una variabile
double,value, comemupiù il valore di rumore in posizionei. - Nel primo ciclo for interno, incrementa
valuedelj-esimo elemento dithetamoltiplicato per l’elemento "imenojmeno1" dieps. - Nel secondo ciclo for interno, incrementa
valuedelj-esimo elemento diphimoltiplicato per l’elemento "i meno j meno 1" dix.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
#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()
*/