BaşlayınÜcretsiz başlayın

AR(p) modelini simüle et

Oto-regresif (AR) modeller, zaman serileri için kullanılan ve tahmin edilen değerlerin önceki zaman noktalarındaki değerlere bağlı olduğu bir tür doğrusal regresyondur. Bu önceki zaman noktalarına bağımlılık nedeniyle, model bir zaman noktası sonrakine geçilerek hesaplanmalıdır. Bu da bir for döngüsü kullanmak demektir; işte burada C++ işe yarar!

İşte R'deki algoritma:

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 simüle edilen gözlem sayısıdır, c bir sabittir, phi otokorelasyon katsayılarının sayısal bir vektörüdür ve eps gürültünün standart sapmasıdır. ar1() fonksiyonunun C++ çevirisi olan ar2() tanımını tamamla.

Bu egzersiz, kursun bir parçasıdır

Rcpp ile R Kodunu Optimize Etme

Kursa Göz Atın

Egzersiz talimatları

  • Rcpp'in R API'sini kullanarak ortalaması c ve standart sapması eps olan normal dağılımlı bir rastgele sayı üret.
  • İçteki for döngüsünü 0dan p'ye kadar dönecek şekilde ayarla.
  • İç döngüde, value değerini phi'nin j. elemanı ile x'in "i eksi j eksi 1"inci elemanının çarpımını ekleyerek arttır.

Uygulamalı etkileşimli egzersiz

Bu egzersizi bu örnek kodu tamamlayarak deneyin.

#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()
*/
Kodu Düzenle ve Çalıştır