Bắt đầu ngayBắt đầu miễn phí

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

Xem khóa học

Hướng dẫn bài tập

  • Khai báo một biến số nguyên start bằng giá trị lớn nhất của pq, rồi cộng thêm một. Lưu ý: max() nằm trong namespace std.
  • Bên trong vòng lặp for ngoài cùng, khai báo một biến doublevalue, bằng mu cộng với giá trị nhiễu thứ i.
  • Trong vòng lặp for lồng thứ nhất, tăng value thêm phần tử thứ j của theta nhân với phần tử thứ "i trừ j trừ 1" của eps.
  • Trong vòng lặp for lồng thứ hai, tăng value thêm phần tử thứ j của phi nhân với phần tử thứ "i trừ j trừ 1" của x.

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()
*/
Chỉnh sửa và Chạy Mã