Để trả lời câu hỏi của bạn, về cơ bản bạn cần phải biết cách tính phần dư tức là trong một mô hình. Bởi vì sau đó . Trước tiên chúng ta hãy tạo dữ liệu giả ( ) từ và khớp với mô hình (không có ý nghĩa):^ X t = X t - e t X tetarma
Xt^= Xt- etXtarima(.5,.6)
arma
library(forecast)
n=1000
ts_AR <- arima.sim(n = n, list(ar = 0.5,ma=0.6))
f=arima(ts_AR,order=c(1,0,1),include.mean=FALSE)
summary(f)
Series: ts_AR
ARIMA(1,0,1) with zero mean
Coefficients:
ar1 ma1
0.4879 0.5595
s.e. 0.0335 0.0317
sigma^2 estimated as 1.014: log likelihood=-1426.7
AIC=2859.4 AICc=2859.42 BIC=2874.12
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set 0.02102758 1.00722 0.8057205 40.05802 160.1078 0.6313145
Bây giờ tôi tạo phần dư như sau: (vì không có phần dư tại 1) và với chúng ta có: , trong đó và là phần trung bình tự động hồi quy và di chuyển ước tính trong mô hình được trang bị ở trên. Đây là mã:t = 2 , . . . , N đ t = X t - Một r * X t - 1 - M một * e t - 1 Một r M mộte1= 0t = 2 , . . . , net=Xt−Ar∗Xt−1−Ma∗et−1ArMa
e = rep(1,n)
e[1] = 0 ##since there is no residual at 1, e1 = 0
for (t in (2 : n)){
e[t] = ts_AR[t]-coef(f)[1]*ts_AR[t-1]-coef(f)[2]*e[t-1]
}
Khi bạn tìm thấy phần dư , các giá trị được trang bị chỉ là . Vì vậy, trong phần sau đây, tôi đã so sánh 10 giá trị được trang bị đầu tiên thu được từ R và các giá trị tôi có thể tính toán từ tôi đã tạo ở trên (tức là thủ công).^ X t = X t - e t e tetXt^=Xt−etet
cbind(fitted.from.package=fitted(f)[1:10],fitted.calculated.manually=ts_AR[1:10]-e[1:10])
fitted.from.package fitted.calculated.manually
[1,] -0.4193068 -1.1653515
[2,] -0.8395447 -0.5685977
[3,] -0.4386956 -0.6051324
[4,] 0.3594109 0.4403898
[5,] 2.9358336 2.9013738
[6,] 1.3489537 1.3682191
[7,] 0.5329436 0.5219576
[8,] 1.0221220 1.0283511
[9,] 0.6083310 0.6048668
[10,] -0.5371484 -0.5352324
Như bạn thấy có gần nhưng không hoàn toàn giống nhau. Lý do là khi tôi tạo phần dư tôi đặt . Có những lựa chọn khác mặc dù. Ví dụ, dựa trên tệp trợ giúp , phần dư và phương sai của chúng được tìm thấy bởi bộ lọc Kalman và do đó cách tính của sẽ hơi khác so với tôi. Nhưng thời gian trôi qua họ đang hội tụ.
Bây giờ cho mô hình Ar (1). Tôi đã trang bị mô hình (không có ý nghĩa) và trực tiếp chỉ cho bạn cách tính các giá trị được trang bị bằng các hệ số. Lần này tôi không tính toán số dư. Lưu ý rằng tôi đã báo cáo 10 giá trị được trang bị đầu tiên loại bỏ giá trị đầu tiên (vì một lần nữa nó sẽ khác nhau tùy thuộc vào cách bạn xác định nó). Như bạn có thể thấy, chúng hoàn toàn giống nhau.e te1=0arima
et
f=arima(ts_AR,order=c(1,0,0),include.mean=FALSE)
cbind(fitted.from.package=fitted(f)[2:10],fitted.calculated.manually=coef(f)*ts_AR[1:9])
fitted.from.package fitted.calculated.manually
[1,] -0.8356307 -0.8356307
[2,] -0.6320580 -0.6320580
[3,] 0.0696877 0.0696877
[4,] 2.1549019 2.1549019
[5,] 2.0480074 2.0480074
[6,] 0.8814094 0.8814094
[7,] 0.9039184 0.9039184
[8,] 0.8079823 0.8079823
[9,] -0.1347165 -0.1347165
arima
họ nói: "(...) những đổi mới và phương sai của chúng được tìm thấy bởi bộ lọc Kalman." Vì vậy, hàm rõ ràng bằng cách nào đó sử dụng bộ lọc Kalman cho các giá trị ban đầu.