Modelul ARMA (p, q)
Un model de medie mobilă autoregresivă (ARMA(p, q)) combină modelele autoregresiv (AR(p)) și de medie mobilă (MA(q)) într-unul singur. Valoarea curentă a vectorului simulat depinde atât de valorile anterioare ale aceluiași vector, cât și de valorile anterioare ale vectorului de zgomot.
Completează definiția funcției arma().
Acest exercițiu face parte din cursul
Optimizarea codului R cu Rcpp
Instrucțiuni pentru exercițiu
- Definește o variabilă întreagă,
start, egală cu maximul dintrepșiq, plus unu. Amintește-ți cămax()se află în spațiul de numestd. - În interiorul buclei
forexterioare, definește o variabilădouble,value, camuplus valoarea de zgomot de pe pozițiai. - În interiorul primei bucle
forinterioare, măreștevaluecu elementuljdinthetaînmulțit cu elementul "iminusjminus1" dineps. - În interiorul celei de-a doua bucle
forinterioare, măreștevaluecu elementuljdinphiînmulțit cu elementul "i minus j minus 1" dinx.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
#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()
*/