AR / MA / ARMA / ARIMA — Họ Box-Jenkins
Đây là họ mô hình chuỗi thời gian đơn biến kinh điển để mô tả và dự báo một chuỗi dựa trên chính quá khứ của nó:
- AR(p) — Autoregressive: phụ thuộc các giá trị trễ của chính nó.
- MA(q) — Moving Average: phụ thuộc các sai số (cú sốc) trễ.
- ARMA(p,q) — kết hợp AR và MA cho chuỗi dừng.
- ARIMA(p,d,q) — thêm sai phân bậc để xử lý chuỗi không dừng.
Khi nào dùng
Đặc tả mô hình
ARMA(p,q):
ARIMA(p,d,q): áp dụng ARMA(p,q) cho chuỗi đã sai phân lần .
Quy trình Box-Jenkins
Thực hiện trong EcoLab
- Module Mô hình hóa → họ Chuỗi thời gian đơn biến → ARIMA.
- Chọn chuỗi ; khai báo hoặc dùng auto-ARIMA (AIC/BIC).
- Chạy; xem chẩn đoán phần dư + dự báo kèm khoảng tin cậy; xuất mã tái lập.
Minh họa mã tái lập
- Stata
- R
- Python
* === ARIMA — Họ Box-Jenkins ===
* --- Kiểm định tính dừng ---
dfuller gdp_growth, lags(4) regress
kpss gdp_growth
* --- Ước lượng ARIMA(1,1,1) ---
arima gdp_growth, arima(1,1,1)
* --- Hoặc: sai phân thủ công + ARMA ---
gen d_gdp = D.gdp_growth
arima d_gdp, ar(1) ma(1)
* --- Chẩn đoán phần dư ---
predict resid, residuals
corrgram resid, lags(20)
wntestq resid, lags(12)
* --- Dự báo ---
tsappend, add(12)
predict gdp_hat, dynamic(.)
# === ARIMA — Họ Box-Jenkins ===
library(forecast)
library(tseries)
# --- Kiểm định tính dừng ---
adf.test(ts_data)
# --- Tự động ch ọn bậc ARIMA (AIC) ---
fit <- auto.arima(ts_data)
summary(fit)
# --- Chẩn đoán phần dư ---
checkresiduals(fit)
# --- Dự báo 12 kỳ ---
fc <- forecast(fit, h = 12)
plot(fc)
print(fc)
# === ARIMA — Họ Box-Jenkins ===
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.tsa.stattools import adfuller
from statsmodels.stats.diagnostic import acorr_ljungbox
import matplotlib.pyplot as plt
# --- Kiểm định tính dừng ---
result = adfuller(y)
print(f"ADF Statistic: {result[0]:.4f}, p-value: {result[1]:.4f}")
# --- Ước lượng ARIMA(1,1,1) ---
model = ARIMA(y, order=(1, 1, 1)).fit()
print(model.summary())
# --- Chẩn đoán phần dư ---
lb_test = acorr_ljungbox(model.resid, lags=12)
print(lb_test)
# --- Dự báo 12 kỳ ---
forecast = model.forecast(steps=12)
print(forecast)
Hạn chế
- Giả định quan hệ tuyến tính và cấu trúc ổn định; kém khi có gãy cấu trúc.
- Không mô hình hóa phương sai thay đổi theo thời gian ⇒ dùng ARCH/GARCH.