ÎncepețiÎncepe gratuit

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

Vezi cursul

Instrucțiuni pentru exercițiu

  • Definește o variabilă întreagă, start, egală cu maximul dintre p și q, plus unu. Amintește-ți că max() se află în spațiul de nume std.
  • În interiorul buclei for exterioare, definește o variabilă double, value, ca mu plus valoarea de zgomot de pe poziția i.
  • În interiorul primei bucle for interioare, mărește value cu elementul j din theta înmulțit cu elementul "i minus j minus 1" din eps.
  • În interiorul celei de-a doua bucle for interioare, mărește value cu elementul j din phi înmulțit cu elementul "i minus j minus 1" din x.

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()
*/
Editează și rulează codul