Model ARMA (p, q)
Model auto-regressive moving average (ARMA(p, q)) menggabungkan model autoregresi (AR(p)) dan moving average (MA(q)) menjadi satu. Nilai saat ini dari vektor simulasi bergantung pada nilai-nilai sebelumnya dari vektor yang sama sekaligus pada nilai-nilai sebelumnya dari vektor derau.
Lengkapi definisi fungsi arma().
Latihan ini adalah bagian dari kursus
Mengoptimalkan Kode R dengan Rcpp
Petunjuk latihan
- Definisikan variabel bertipe integer,
start, sama dengan nilai maksimum daripdanq, lalu ditambah satu. Ingat bahwamax()berada dalam namespacestd. - Di dalam perulangan for luar, definisikan variabel bertipe
double,value, sebagaimuditambah nilai derau ke-i. - Di dalam perulangan for dalam pertama, tambahkan
valuedengan elemen ke-jdarithetadikalikan dengan elemen ke-"iminusjminus1" darieps. - Di dalam perulangan for dalam kedua, tambahkan
valuedengan elemen ke-jdariphidikalikan dengan 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 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()
*/