ARMA (p, q) modeli
Bir otomatik regresif hareketli ortalama modeli (ARMA(p, q)), otomatik regresyonu (AR(p)) ve hareketli ortalamayı (MA(q)) tek bir modelde birleştirir. Benzetimi yapılan (simüle edilen) vektörün mevcut değeri, hem aynı vektörün önceki değerlerine hem de gürültü vektörünün önceki değerlerine bağlıdır.
arma() fonksiyon tanımını tamamla.
Bu egzersiz, kursun bir parçasıdır
Rcpp ile R Kodunu Optimize Etme
Egzersiz talimatları
pveqdeğerlerinin en büyüğüne bir ekleyipstartadlı bir tamsayı değişkeni tanımla.max()fonksiyonununstdad alanında olduğunu unutma.- Dıştaki for döngüsünün içinde,
doubletüründevaluedeğişkeninimuartıi. gürültü değeri olacak şekilde tanımla. - İlk iç for döngüsünde,
valuedeğerinitheta'nınj. elemanı ileeps'in "ieksijeksi1". elemanının çarpımı kadar artır. - İkinci iç for döngüsünde,
valuedeğeriniphi'ninj. elemanı ilex'in "i eksi j eksi 1". elemanının çarpımı kadar artır.
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
#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()
*/