Mô hình ARMA (p, q)
Mô hình auto-regressive moving average (ARMA(p, q)) kết hợp hai mô hình autoregression (AR(p)) và moving average (MA(q)) trong một khuôn khổ chung. Giá trị hiện tại của vector mô phỏng phụ thuộc cả vào các giá trị trước đó của chính vector này lẫn các giá trị trước đó của vector nhiễu.
Hoàn thiện phần định nghĩa hàm arma().
Bài tập này là một phần của khóa học
Tối ưu hóa mã R với Rcpp
Hướng dẫn bài tập
- Khai báo một biến số nguyên
startbằng giá trị lớn nhất củapvàq, rồi cộng thêm một. Lưu ý:max()nằm trong namespacestd. - Bên trong vòng lặp for ngoài cùng, khai báo một biến
doublelàvalue, bằngmucộng với giá trị nhiễu thứi. - Trong vòng lặp for lồng thứ nhất, tăng
valuethêm phần tử thứjcủathetanhân với phần tử thứ "itrừjtrừ1" củaeps. - Trong vòng lặp for lồng thứ hai, tăng
valuethêm phần tử thứjcủaphinhân với phần tử thứ "i trừ j trừ 1" củax.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
#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()
*/