Simulasikan model AR(p)
Model auto-regressive (AR) adalah jenis regresi linear untuk deret waktu di mana nilai prediksi bergantung pada nilai pada titik waktu sebelumnya. Karena ketergantungan pada titik waktu sebelumnya, model harus dihitung satu per satu titik waktu secara berurutan. Itu berarti menggunakan perulangan for, sehingga C++ sangat berguna!
Berikut algoritme dalam 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 adalah jumlah observasi hasil simulasi, c adalah konstanta, phi adalah vektor numerik koefisien autokorelasi, dan eps adalah simpangan baku dari noise. Lengkapi definisi ar2(), terjemahan C++ dari ar1().
Latihan ini adalah bagian dari kursus
Mengoptimalkan Kode R dengan Rcpp
Petunjuk latihan
- Hasilkan bilangan acak berdistribusi normal dengan mean
cdan simpangan bakueps, menggunakan R API dari Rcpp. - Buat perulangan for bagian dalam berjalan dari
0hinggap. - Di dalam perulangan bagian dalam, tambahkan
valuedengan elemen ke-jdariphidikalikan elemen ke-"i minus j minus 1" darix.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
#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()
*/