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
Egzersiz talimatları
- Rcpp'in R API'sini kullanarak ortalaması
cve standart sapmasıepsolan normal dağılımlı bir rastgele sayı üret. - İçteki for döngüsünü
0danp'ye kadar dönecek şekilde ayarla. - İç döngüde,
valuedeğeriniphi'ninj. elemanı ilex'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()
*/