Ước tính ARIMA bằng tay


15

Tôi đang cố gắng hiểu làm thế nào các tham số được ước tính trong mô hình ARIMA / Hộp Jenkins (BJ). Thật không may, không có cuốn sách nào tôi gặp phải mô tả thủ tục ước tính, chẳng hạn như thủ tục ước tính Log-Likabilities một cách chi tiết. Tôi tìm thấy trang web / tài liệu giảng dạy rất hữu ích. Sau đây là phương trình từ nguồn tham khảo ở trên.

LL(θ)=n2log(2π)n2log(σ2)t=1net22σ2

Tôi muốn học ước lượng ARIMA / BJ bằng cách tự làm. Vì vậy, tôi đã sử dụng để viết mã để ước tính ARMA bằng tay. Dưới đây là những gì tôi đã làm trong ,RR

  • Tôi mô phỏng ARMA (1,1)
  • Đã viết phương trình trên như là một hàm
  • Đã sử dụng dữ liệu mô phỏng và chức năng tối ưu để ước tính các tham số AR và MA.
  • Tôi cũng đã chạy ARIMA trong gói số liệu thống kê và so sánh các tham số ARMA từ những gì tôi đã làm bằng tay. Dưới đây là so sánh:

So sánh

** Dưới đây là những câu hỏi của tôi:

  • Tại sao có sự khác biệt nhỏ giữa các biến ước tính và tính toán?
  • Có phải ARIMA hoạt động trong R phát lại hoặc làm thủ tục ước tính khác với những gì được nêu dưới đây trong mã của tôi không?
  • Tôi đã gán e1 hoặc lỗi tại quan sát 1 là 0, điều này có đúng không?
  • Ngoài ra có cách nào để ước tính giới hạn tin cậy của các dự báo bằng cách sử dụng hessian của tối ưu hóa không?

Cảm ơn rất nhiều vì sự giúp đỡ của bạn như mọi khi.

Dưới đây là mã:

## Load Packages

library(stats)
library(forecast)

set.seed(456)


## Simulate Arima
y <- arima.sim(n = 250, list(ar = 0.3, ma = 0.7), mean = 5)
plot(y)

## Optimize Log-Likelihood for ARIMA

n = length(y) ## Count the number of observations
e = rep(1, n) ## Initialize e

logl <- function(mx){

  g <- numeric
  mx <- matrix(mx, ncol = 4)

  mu <- mx[,1] ## Constant Term
  sigma <- mx[,2] 
  rho <- mx[,3] ## AR coeff
  theta <- mx[,4] ## MA coeff

  e[1] = 0 ## Since e1 = 0

  for (t in (2 : n)){
    e[t] = y[t] - mu - rho*y[t-1] - theta*e[t-1]
  }

  ## Maximize Log-Likelihood Function 
  g1 <-  (-((n)/2)*log(2*pi) - ((n)/2)*log(sigma^2+0.000000001) - (1/2)*(1/(sigma^2+0.000000001))*e%*%e)

  ##note: multiplying Log-Likelihood by "-1" in order to maximize in the optimization
  ## This is done becuase Optim function in R can only minimize, "X"ing by -1 we can maximize
  ## also "+"ing by 0.000000001 sigma^2 to avoid divisible by 0
  g <- -1 * g1

  return(g)

}

## Optimize Log-Likelihood
arimopt <- optim(par=c(10,0.6,0.3,0.5), fn=logl, gr = NULL,
                 method = c("L-BFGS-B"),control = list(), hessian = T)
arimopt

############# Output Results###############
ar1_calculated = arimopt$par[3]
ma1_calculated = arimopt$par[4]
sigmasq_calculated = (arimopt$par[2])^2
logl_calculated = arimopt$val
ar1_calculated
ma1_calculated
sigmasq_calculated
logl_calculated

############# Estimate Using Arima###############
est <- arima(y,order=c(1,0,1))
est

1
TnTT=n+1g1+0.000000001σ

Tôi đã thay đổi phương trình và bây giờ phản ánh những gì trong mã. Tôi không chắc chắn làm thế nào tôi có thể xóa +0.000000001 vì nó sẽ gây ra "NaNs" do chia hết cho 0 và cũng do vấn đề của log (0)
forecaster

2
Có khái niệm về khả năng chính xác. Nó đòi hỏi kiến ​​thức về các tham số ban đầu như giá trị nắm đấm của lỗi MA (một trong những câu hỏi của bạn). Việc triển khai thường khác nhau về cách họ đối xử với các giá trị ban đầu. Điều tôi thường làm là (điều không được đề cập trong nhiều cuốn sách) là cũng tối đa hóa ML wrt các giá trị ban đầu.
Cagdas Ozgenc

3
Xin hãy nhìn vào những điều sau đây từ Tsay, nó không bao gồm tất cả các trường hợp, nhưng khá hữu ích cho tôi: faculty.chicagobooth.edu/ruey.tsay/teaching/uts/lec8-08.pdf
Cagdas Ozgenc

1
@CagdasOzgenc như được chỉ ra bởi các giá trị ban đầu của bạn là nguyên nhân của sự khác biệt. Tôi có thể chấp nhận bình luận của bạn dưới dạng câu trả lời nếu bạn đăng bình luận của bạn dưới dạng câu trả lời.
dự báo

Câu trả lời:


6

Có khái niệm về khả năng chính xác. Nó đòi hỏi kiến ​​thức về các tham số ban đầu, chẳng hạn như giá trị nắm đấm của lỗi MA (một trong những câu hỏi của bạn). Việc triển khai thường khác nhau về cách họ đối xử với các giá trị ban đầu. Điều tôi thường làm là (điều không được đề cập trong nhiều cuốn sách) là cũng tối đa hóa ML wrt các giá trị ban đầu.

Xin hãy xem những điều sau đây từ Tsay, nó không bao gồm tất cả các trường hợp, nhưng khá hữu ích cho tôi:

http://facemony.chicagobooth.edu/ruey.tsay/teaching/uts/lec8-08.pdf


3

Bạn đã đọc trang trợ giúp của arimachức năng? Đây là đoạn trích có liên quan:

Khả năng chính xác được tính toán thông qua biểu diễn không gian trạng thái của quy trình ARIMA, và các đổi mới và phương sai của chúng được tìm thấy bởi bộ lọc Kalman. Việc khởi tạo quy trình ARMA khác biệt sử dụng tính ổn định và dựa trên Gardner et al. (1980). Đối với một quá trình khác biệt, các thành phần không cố định được đưa ra một khuếch tán trước (được kiểm soát bởi kappa). Các quan sát vẫn được kiểm soát bởi khuếch tán trước (được xác định bằng mức tăng Kalman ít nhất 1e4) được loại trừ khỏi các tính toán khả năng. (Điều này cho kết quả tương đương với arima0 khi không có các giá trị bị thiếu, khi các quan sát bị loại trừ chính xác là các kết quả bị loại bỏ bởi sự khác biệt.)

Cũng có liên quan là một tham số method=c("CSS-ML", "ML", "CSS"):

Phương pháp lắp: khả năng tối đa hoặc tối thiểu hóa tổng bình phương có điều kiện. Mặc định (trừ khi có các giá trị bị thiếu) là sử dụng tổng bình phương có điều kiện để tìm giá trị bắt đầu, sau đó khả năng tối đa.

Kết quả của bạn không khác nhiều so với kết quả được tạo bởi arimachức năng, vì vậy bạn chắc chắn đã làm mọi thứ đúng.

Hãy nhớ rằng nếu bạn muốn so sánh kết quả của hai quy trình tối ưu hóa, bạn cần đảm bảo rằng các giá trị bắt đầu là như nhau và sử dụng cùng một phương pháp tối ưu hóa, nếu không thì kết quả có thể khác nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.