Zacznij terazZacznij za darmo

Symulacja modelu AR(p)

Modele autoregresyjne (AR) to rodzaj regresji liniowej dla szeregów czasowych, w której przewidywane wartości zależą od wartości z poprzednich punktów czasowych. Z powodu tej zależności model musi być obliczany krok po kroku. Oznacza to konieczność użycia pętli for – i właśnie tutaj C++ okazuje się niezastąpiony!

Oto algorytm w 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 to liczba symulowanych obserwacji, c to stała, phi to numeryczny wektor współczynników autokorelacji, a eps to odchylenie standardowe szumu. Uzupełnij definicję funkcji ar2(), będącej przekładem ar1() na C++.

To ćwiczenie jest częścią kursu

Optymalizacja kodu R za pomocą Rcpp

Zobacz kurs

Instrukcje do ćwiczenia

  • Wygeneruj losową liczbę z rozkładu normalnego o średniej c i odchyleniu standardowym eps, korzystając z API R dostępnego w Rcpp.
  • Spraw, żeby wewnętrzna pętla for iterowała od 0 do p.
  • Wewnątrz pętli wewnętrznej zwiększ value o iloczyn j-tego elementu phi i elementu x o indeksie „i minus j minus 1".

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

#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()
*/
Edytuj i uruchom kod