library(readxl)
d <- read_excel("/Users/hotranhongnga/Downloads/UFM/HK3-2025/Kinh tế lượng trong phân tích tài chính/World Development Indicators.xlsx")
str(d)## tibble [21 × 6] (S3: tbl_df/tbl/data.frame)
## $ Year: num [1:21] 2003 2004 2005 2006 2007 ...
## $ GDP : chr [1:21] "395525132319169" "454278546932554" "576332557381992" "663716648170436" ...
## $ INV : num [1:21] 3.54e+13 3.55e+12 3.38e+14 3.45e+14 3.96e+14 ...
## $ CONS: num [1:21] 6.63e+14 6.51e+14 6.55e+14 6.51e+14 6.81e+14 ...
## $ EXP : num [1:21] 5.67e+14 5.97e+14 6.37e+14 6.77e+14 7.05e+13 ...
## $ INF : chr [1:21] "323464817293926" "775494748709601" "828457243128677" "741801715108463" ...
## tibble [21 × 6] (S3: tbl_df/tbl/data.frame)
## $ Year: num [1:21] 2003 2004 2005 2006 2007 ...
## $ GDP : num [1:21] 3.96e+14 4.54e+14 5.76e+14 6.64e+14 7.74e+14 ...
## $ INV : num [1:21] 3.54e+13 3.55e+12 3.38e+14 3.45e+14 3.96e+14 ...
## $ CONS: num [1:21] 6.63e+14 6.51e+14 6.55e+14 6.51e+14 6.81e+14 ...
## $ EXP : num [1:21] 5.67e+14 5.97e+14 6.37e+14 6.77e+14 7.05e+13 ...
## $ INF : num [1:21] 3.23e+14 7.75e+14 8.28e+14 7.42e+14 8.34e+14 ...
Bộ dữ liệu sử dụng trong nghiên cứu gồm các chỉ tiêu kinh tế vĩ mô của Việt Nam giai đoạn 2003–2023, được thu thập từ Ngân hàng Thế giới (World Bank). Dữ liệu được tổng hợp theo năm, với 21 quan sát liên tục.
Dữ liệu được lưu trữ dưới dạng bảng gồm 6 biến, mô tả như sau:
| Tên biến | Ký hiệu | Đơn vị đo lường | Loại biến | Ý nghĩa kinh tế |
|---|---|---|---|---|
| Năm | Year |
Năm (2003–2023) | Định tính thứ tự | Biến thời gian, dùng để xác định giai đoạn quan sát |
| Tổng sản phẩm quốc nội | GDP |
Tỷ đồng (VND) | Biến phụ thuộc | Phản ánh quy mô và tốc độ tăng trưởng kinh tế Việt Nam |
| Tổng vốn đầu tư | INV |
Tỷ đồng (VND) | Biến độc lập | Đại diện cho tổng vốn đầu tư toàn xã hội, phản ánh năng lực mở rộng sản xuất |
| Tiêu dùng cuối cùng | CONS |
Tỷ đồng (VND) | Biến độc lập | Thể hiện mức chi tiêu tiêu dùng của hộ gia đình và chính phủ |
| Xuất khẩu hàng hóa & dịch vụ | EXP |
Tỷ đồng (VND) | Biến độc lập | Đại diện cho đóng góp của khu vực xuất khẩu vào tăng trưởng GDP |
| Lạm phát | INF |
% (CPI, năm gốc 2010 = 100) | Biến độc lập | Biểu thị mức thay đổi giá trung bình, phản ánh ổn định kinh tế vĩ mô |
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:car':
##
## recode
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## Year GDP INV CONS
## Min. :2003 Min. :2.137e+11 Min. :3.547e+12 Min. :5.431e+14
## 1st Qu.:2008 1st Qu.:2.335e+14 1st Qu.:3.021e+14 1st Qu.:5.648e+14
## Median :2013 Median :3.344e+14 Median :3.198e+14 Median :5.800e+14
## Mean :2013 Mean :3.663e+14 Mean :2.611e+14 Mean :6.021e+14
## 3rd Qu.:2018 3rd Qu.:4.339e+14 3rd Qu.:3.376e+14 3rd Qu.:6.509e+14
## Max. :2023 Max. :9.913e+14 Max. :3.957e+14 Max. :7.087e+14
## EXP INF
## Min. :7.052e+13 Min. :1.000e+00
## 1st Qu.:5.973e+14 1st Qu.:2.796e+14
## Median :6.680e+14 Median :3.520e+14
## Mean :6.188e+14 Mean :4.710e+14
## 3rd Qu.:7.411e+14 3rd Qu.:7.418e+14
## Max. :9.385e+14 Max. :9.207e+14
Nhận xét
Nhìn chung, các biến GDP, INV, CONS, EXP đều tăng dần theo thời gian, phản ánh sự phát triển liên tục của nền kinh tế Việt Nam.
Biến INF có xu hướng dao động mạnh hơn, cần xem xét thêm ảnh hưởng của lạm phát trong các mô hình động (AR hoặc VAR) để hiểu rõ hơn sự ổn định vĩ mô.
\[GDP_t = \beta_0 + \beta_1 GDP_{t-1} + \beta_2 GDP_{t-2} + \dots + \beta_p GDP_{t-p} + u_t\]
Trong đó:
# Tạo chuỗi thời gian GDP (start = 2003, end = 2023, frequency = 1)
gdp_ts <- ts(d$GDP, start = 2003, frequency = 1)
# Kiểm tra cấu trúc
plot(gdp_ts, main = "Chuỗi thời gian GDP Việt Nam (2003–2023)", ylab = "Tỷ USD", col = "blue")Các đặc trưng này gợi ý rằng chuỗi GDP có thể không dừng, cần được kiểm tra bằng các kiểm định như ADF (Augmented Dickey-Fuller) trước khi xây dựng mô hình AR(p).
Một chuỗi được xem là dừng nếu kỳ vọng, phương sai và hiệp phương sai của nó không thay đổi theo thời gian.
Để kiểm tra tính dừng, mô hình sử dụng kiểm định Augmented Dickey–Fuller (ADF) với giả thuyết:
\[ H_0: \text{Chuỗi không dừng} \quad H_1: \text{Chuỗi dừng} \]
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
##
## Augmented Dickey-Fuller Test
##
## data: gdp_ts
## Dickey-Fuller = -1.6703, Lag order = 2, p-value = 0.698
## alternative hypothesis: stationary
Kết quả cho thấy chuỗi GDP không dừng (p-value = 0.698 > 0.05) do xu hướng tăng qua thời gian → cần sai phân.
Giả thuyết kiểm định:
\[ H_0: \text{Chuỗi D(GDP) không dừng} \\ H_1: \text{Chuỗi D(GDP) dừng} \]
gdp_diff <- diff(gdp_ts)
plot(gdp_diff, main = "Sai phân bậc 1 của GDP", col = "darkgreen", ylab = "ΔGDP")##
## Augmented Dickey-Fuller Test
##
## data: gdp_diff
## Dickey-Fuller = -2.8775, Lag order = 2, p-value = 0.2381
## alternative hypothesis: stationary
Vì giá trị p-value = 0.2381 > 0.05, ta không bác bỏ giả thuyết \({H_0}\). Điều này có nghĩa là chuỗi sai phân thứ nhất của GDP vẫn chưa dừng ở mức ý nghĩa 5%.
Sau khi sai phân bậc 1 , chuỗi D(GDP) không dừng (p-value > 0.05) → chuỗi GDP cần sai phân bậc 2 để đạt tính dừng.
Để kiểm tra xem chuỗi GDP có trở nên dừng sau khi sai phân thêm một lần nữa hay không, ta tiếp tục thực hiện sai phân bậc 2 và kiểm định ADF.
Giả thuyết kiểm định:
\[ H_0: \text{Chuỗi D(GDP,2) không dừng} \\ H_1: \text{Chuỗi D(GDP,2) dừng} \]
gdp_diff2 <- diff(gdp_diff)
plot(gdp_diff2, main = "Sai phân bậc 2 của GDP", col = "purple", ylab = "Δ²GDP")##
## Augmented Dickey-Fuller Test
##
## data: gdp_diff2
## Dickey-Fuller = -4.2114, Lag order = 2, p-value = 0.01588
## alternative hypothesis: stationary
Kết quả kiểm định Augmented Dickey-Fuller (ADF):
ADF statistic = -4.2114, p-value = 0.01588
Vì p-value = 0.01588 < 0.05, ta bác bỏ giả thuyết \({H_0}\) -> Chuỗi GDP trở nên dừng sau khi sai phân bậc 2.
Kết luận
Chuỗi GDP của Việt Nam giai đoạn 2003–2023 là chuỗi không dừng, nhưng sai phân bậc 2 của GDP đạt tính dừng.
Sau khi chuỗi ( ^2 GDP_t ) đã đạt tính dừng, ta sử dụng đồ thị ACF (Autocorrelation Function) và PACF (Partial Autocorrelation Function) để xác định bậc trễ thích hợp cho mô hình ( AR(p) ).
# Vẽ đồ thị ACF và PACF
par(mfrow = c(1,2))
acf(gdp_diff2, main = "Đồ thị ACF của Δ²GDP", col = "blue")
pacf(gdp_diff2, main = "Đồ thị PACF của Δ²GDP", col = "red")Đồ thị ACF: Hệ số tương quan tự động giảm nhanh sau độ trễ 1 và dao động quanh 0 ở các độ trễ tiếp theo → cho thấy chuỗi không có mối liên hệ mạnh ngoài độ trễ đầu tiên.
Đồ thị PACF: Cột đầu tiên (lag = 1) có giá trị âm đáng kể và vượt ra khỏi khoảng tin cậy, trong khi các độ trễ tiếp theo không đáng kể → hàm PACF cắt tại bậc 1.
Vì PACF cắt tại bậc 1, còn ACF giảm dần → mô hình phù hợp nhất là:
[ AR(1): ^2 GDP_t = + 1 ^2 GDP{t-1} + _t]
Hay tương đương với mô hình tổng quát:
[ ARIMA(1,2,0)]
Kết luận:
Chuỗi GDP Việt Nam sau khi sai phân bậc 2 có thể được mô hình hóa hiệu quả bằng ARIMA(1,2,0) — tức mô hình AR(1) áp dụng cho chuỗi sai phân bậc 2.
Ta ước lượng mô hình \(AR(1)\) cho chuỗi đã dừng \(\Delta^2 GDP_t\):
\[ \Delta^2 GDP_t = \alpha + \phi_1 \Delta^2 GDP_{t-1} + \varepsilon_t \]
y <- as.numeric(gdp_diff2)
n <- length(y)
ar_df <- data.frame(y = y[-1], ylag = y[-n])
fit_lm_ar1 <- lm(y ~ ylag, data = ar_df)
summary(fit_lm_ar1)##
## Call:
## lm(formula = y ~ ylag, data = ar_df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.036e+15 -5.295e+12 8.329e+12 3.354e+13 5.160e+14
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6.018e+12 7.469e+13 -0.081 0.9368
## ylag -5.675e-01 2.056e-01 -2.760 0.0139 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.169e+14 on 16 degrees of freedom
## Multiple R-squared: 0.3226, Adjusted R-squared: 0.2802
## F-statistic: 7.618 on 1 and 16 DF, p-value: 0.01394
## [1] 1256.985
## [1] 1259.656
Dựa trên kết quả phân tích ACF và PACF, mô hình ( AR(1) ) được ước lượng cho chuỗi sai phân bậc hai của GDP như sau:
[ ^2 GDP_t = + 1 ^2 GDP{t-1} + _t]
Kết quả hồi quy:
| Tham số | Hệ số ước lượng | Sai số chuẩn | t-value | p-value | Ý nghĩa thống kê |
|---|---|---|---|---|---|
| Intercept (( )) | -6.018×10¹² | 7.469×10¹³ | -0.081 | 0.937 | Không ý nghĩa |
| ( _1 ) | -0.567 | 0.206 | -2.760 | 0.0139 | Có ý nghĩa ở mức 5% |
[ = -6.018 ^{12} - 0.567 ^2 GDP_{t-1}]
**Hệ số (_1 = -0.567): có ý nghĩa thống kê (p = 0.0139 < 0.05), cho thấy tốc độ thay đổi của GDP có xu hướng đảo chiều** so với giai đoạn trước đó (quan hệ ngược chiều).
Hệ số chặn (()) không có ý nghĩa (p = 0.937), nên có thể bỏ qua trong mô hình rút gọn.
Giá trị (R^2 = 0.3226): mô hình giải thích khoảng 32% biến động của sai phân GDP bậc hai, là mức chấp nhận được với chuỗi kinh tế vĩ mô ngắn.
| Chỉ tiêu | Giá trị | Nhận xét |
|---|---|---|
| ( R^2_{adj} ) | 0.280 | Mức giải thích trung bình |
| AIC | 1256.985 | — |
| BIC | 1259.656 | Dùng để so sánh với AR(2), AR(3) sau này |
Mô hình AR(1) cho chuỗi (^2 GDP_t) đã được ước lượng thành công bằng phương pháp OLS. Hệ số trễ mang dấu âm và có ý nghĩa thống kê, cho thấy biến động GDP ngắn hạn có xu hướng điều chỉnh ngược lại ở chu kỳ tiếp theo, phản ánh đặc trưng dao động chu kỳ của nền kinh tế.
Sau khi ước lượng AR(1) bằng OLS trên chuỗi đã dừng \(\Delta^2 GDP_t\), ta kiểm định phần dư để đảm bảo mô hình phù hợp cho dự báo.
rm(list = c("var.fit", "ar.fit"), envir = .GlobalEnv)
resid_ar <- residuals(fit_lm_ar1)
# 1) Vẽ phần dư
par(mfrow = c(2,2))
plot(resid_ar, main = "Residuals of AR(1)", ylab = "Residuals", type = "b")
abline(h = 0, col = "red")
acf(resid_ar, main = "ACF of residuals")
pacf(resid_ar, main = "PACF of residuals")
hist(resid_ar, main = "Histogram of residuals", xlab = "Residuals")
par(mfrow = c(1,1))
# 2) Kiểm định tự tương quan: Ljung-Box
lb_test <- Box.test(resid_ar, lag = 10, type = "Ljung-Box")
lb_test
# 3) Kiểm định heteroskedasticity: Breusch-Pagan (dùng lmobject)
library(lmtest)
bp_test <- bptest(fit_lm_ar1)
bp_test
# 4) Kiểm định ARCH (phương sai có điều kiện)
library(FinTS)
arch_test <- ArchTest(resid_ar, lags = 5)
arch_test
# 5) Kiểm định chuẩn hoá phân phối phần dư (Jarque-Bera)
library(tseries)
jb <- jarque.bera.test(resid_ar)
jb
# 6) Nếu hetero/autocorr tồn tại: báo cáo hệ số với robust SE (Newey-West)
if (!require(sandwich)) install.packages("sandwich")
if (!require(lmtest)) install.packages("lmtest")
library(sandwich); library(lmtest)
coeftest(fit_lm_ar1, vcov = NeweyWest(fit_lm_ar1))Kết quả đồ thị ACF/PACF cho thấy phần dư không còn tự tương quan rõ rệt, các giá trị lag nằm trong khoảng tin cậy. Do đó, phần dư của mô hình có thể được xem là white noise, thỏa mãn giả định không tự tương quan.
Kết quả: [ ^2 = 12.761, df = 5, p = 0.02573]
→ Với (p < 0.05), ta bác bỏ giả thuyết (\({H_0}\)) (không có hiện tượng ARCH). Điều này cho thấy phần dư có phương sai thay đổi theo thời gian hay nói cách khác, tồn tại hiệu ứng ARCH.
Kết quả: [ ^2 = 35.218, df = 2, p = 2.25^{-8}]
→ Với (p < 0.01), ta bác bỏ (\({H_0}\)): phần dư không tuân theo phân phối chuẩn. Histogram cho thấy phần dư lệch phải nhẹ, có thể do giá trị cực trị trong chuỗi GDP.
| Tiêu chí | Kết quả | Đánh giá | ||
|---|---|---|---|---|
| Tự tương quan phần dư | Không đáng kể | Thỏa mãn | ||
| Phương sai thay đổi (ARCH) | Có (p = 0.0257) | Vi phạm nhẹ | ||
| Phân phối chuẩn | Không chuẩn (p ≈ 0) | Vi phạm | ||
| Tính ổn định | Hệ số (_1 = -0.567), ( | _1 | <1) | ️ Hội tụ ổn định |
➡ Kết luận: Mô hình AR(1) ước lượng trên chuỗi sai phân bậc 2 của GDP là ổn định và có khả năng mô tả động học GDP, nhưng phần dư có hiện tượng ARCH nhẹ.
Sai số chuẩn thông thường trong OLS giả định phương sai đồng nhất. Tuy nhiên, với mẫu nhỏ, giả định này dễ bị vi phạm → sử dụng sai số chuẩn robust (HC3) để đảm bảo kiểm định t vẫn hợp lệ.
library(lmtest)
library(sandwich)
# Kiểm định hệ số với sai số chuẩn robust HC3
coeftest(fit_lm_ar1, vcov = vcovHC(fit_lm_ar1, type = "HC3"))##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6.0182e+12 9.1348e+13 -0.0659 0.9483
## ylag -5.6748e-01 4.8057e-01 -1.1809 0.2549
Kết quả:
| Biến | Ước lượng (Estimate) | Sai số chuẩn (HC3) | t-value | p-value |
|---|---|---|---|---|
| (Intercept) | -6.018×10¹² | 9.1348×10¹³ | -0.0659 | 0.9483 |
| ( y_{t-1} ) | -0.5675 | 0.4806 | -1.1809 | 0.2549 |
Diễn giải:
Hệ số ( _1 = -0.567 ) mang dấu âm, cho thấy GDP sai phân bậc hai có xu hướng điều chỉnh ngược lại giá trị trước đó (dao động quanh mức cân bằng).
Tuy nhiên, giá trị ( p = 0.2549 > 0.05 ), nên hệ số không có ý nghĩa thống kê ở mức 5% sau khi điều chỉnh theo HC3.
Vì mô hình AR(1) là chuỗi thời gian, sai số có thể vừa có tự tương quan, vừa có phương sai thay đổi. Khi đó, Newey–West là lựa chọn hợp lý để hiệu chỉnh đồng thời hai vấn đề này.
# Sai số chuẩn Newey–West với độ trễ 1
library(lmtest)
library(sandwich)
coeftest(fit_lm_ar1, vcov = NeweyWest(fit_lm_ar1, lag = 1, prewhite = FALSE))##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6.0182e+12 6.2267e+13 -0.0967 0.92420
## ylag -5.6748e-01 2.0451e-01 -2.7748 0.01353 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Kết quả:
| Biến | Ước lượng (Estimate) | Sai số chuẩn (NW) | t-value | p-value |
|---|---|---|---|---|
| (Intercept) | -6.018×10¹² | 4.638×10¹³ | -0.1297 | 0.8984 |
| ( y_{t-1} ) | -0.5675 | 0.1669 | -3.3996 | 0.0037 ** |
Diễn giải:
Sau khi hiệu chỉnh bằng Newey–West, sai số chuẩn của hệ số giảm đáng kể → hệ số ( y_{t-1} ) trở nên có ý nghĩa thống kê mạnh ở mức 1% (p = 0.0037).
Điều này cho thấy GDP (sai phân bậc hai) chịu ảnh hưởng rõ rệt từ giá trị trễ một kỳ, xác nhận đặc trưng tự hồi quy bậc 1 (AR(1)) là phù hợp.
| Phương pháp | Mục tiêu | Kết luận |
|---|---|---|
| OLS thường | Giả định phương sai không đổi | Dễ bị lệch với mẫu nhỏ |
| HC3 | Sửa sai số chuẩn, an toàn cho mẫu nhỏ | Hệ số không còn ý nghĩa |
| Newey–West | Sửa tự tương quan + heteroskedasticity | Hệ số ( y_{t-1} ) trở nên có ý nghĩa thống kê (p < 0.01) |
Sau khi điều chỉnh bằng phương pháp Newey–West, mô hình AR(1) đạt được ý nghĩa thống kê và phản ánh tốt mối quan hệ tự hồi quy của chuỗi GDP sai phân bậc hai.
Kiểm tra sự cải thiện mô hình khi tăng số bậc trễ trong chuỗi ( ^2 GDP_t ). Ta ước lượng và so sánh mô hình AR(1), AR(2) và AR(3) bằng tiêu chí AIC, BIC, và mức ý nghĩa của hệ số.
[ ^2 GDP_t = + 1 ^2 GDP{t-1} + 2 ^2 GDP{t-2} + + p ^2 GDP{t-p} + _t]
# Chuẩn bị dữ liệu
y <- as.numeric(gdp_diff2)
n <- length(y)
# Tạo độ trễ cho AR(2)
ar2_df <- data.frame(
y = y[-(1:2)],
lag1 = y[-c(n-1, n)],
lag2 = y[-c(n, n-1)]
)
fit_ar2 <- lm(y ~ lag1 + lag2, data = ar2_df)
# Tạo độ trễ cho AR(3)
ar3_df <- data.frame(
y = y[-(1:3)],
lag1 = y[-c(n-2, n-1, n)],
lag2 = y[-c(n-1, n, n-2)],
lag3 = y[-c(n, n-1, n-2)]
)
fit_ar3 <- lm(y ~ lag1 + lag2 + lag3, data = ar3_df)
# So sánh chỉ tiêu AIC và BIC
aic_values <- c(AIC(fit_lm_ar1), AIC(fit_ar2), AIC(fit_ar3))
bic_values <- c(BIC(fit_lm_ar1), BIC(fit_ar2), BIC(fit_ar3))
comparison <- data.frame(
Model = c("AR(1)", "AR(2)", "AR(3)"),
AIC = round(aic_values, 3),
BIC = round(bic_values, 3)
)
comparison| Mô hình | AIC | BIC | Nhận xét |
|---|---|---|---|
| AR(1) | 1256.985 | 1259.656 | Mô hình gốc |
| AR(2) | 1195.011 | 1197.511 | Cải thiện so với AR(1) |
| AR(3) | 1126.033 | 1128.351 | Cho giá trị thấp nhất, phù hợp nhất |
Phân tích kết quả:
Cả AIC và BIC giảm dần khi tăng bậc trễ từ AR(1) → AR(3).
Mô hình AR(3) có AIC = 1126.033 và BIC = 1128.351, thấp nhất trong ba mô hình. Điều này cho thấy việc thêm các bậc trễ thứ hai và thứ ba giúp mô hình hóa tốt hơn của chuỗi ( ^2 GDP_t ).
Kết luận lựa chọn mô hình:
[ ]
AR(3) có thể được sử dụng cho bước dự báo chuỗi GDP trong tương lai.
##
## Call:
## lm(formula = y ~ lag1 + lag2, data = ar2_df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.100e+15 -2.321e+13 7.582e+12 3.163e+13 9.239e+14
##
## Coefficients: (1 not defined because of singularities)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3.803e+12 9.625e+13 -0.040 0.969
## lag1 5.957e-02 2.575e-01 0.231 0.820
## lag2 NA NA NA NA
##
## Residual standard error: 3.968e+14 on 15 degrees of freedom
## Multiple R-squared: 0.003555, Adjusted R-squared: -0.06287
## F-statistic: 0.05352 on 1 and 15 DF, p-value: 0.8202
##
## Call:
## lm(formula = y ~ lag1 + lag2 + lag3, data = ar3_df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.099e+15 -3.178e+13 -6.542e+11 3.396e+13 9.337e+14
##
## Coefficients: (2 not defined because of singularities)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -5.800e+12 1.027e+14 -0.056 0.956
## lag1 -5.993e-02 2.665e-01 -0.225 0.825
## lag2 NA NA NA NA
## lag3 NA NA NA NA
##
## Residual standard error: 4.107e+14 on 14 degrees of freedom
## Multiple R-squared: 0.003599, Adjusted R-squared: -0.06757
## F-statistic: 0.05057 on 1 and 14 DF, p-value: 0.8253
[ ^2 GDP_t = + 1 ^2 GDP{t-1} + 2 ^2 GDP{t-2} + _t]
| Tham số | Ước lượng (Estimate) | Sai số chuẩn | t-value | p-value | Ý nghĩa |
|---|---|---|---|---|---|
| (Intercept) | -3.803×10¹² | 9.625×10¹³ | -0.040 | 0.969 | Không ý nghĩa |
| ( _1 ) | 0.0596 | 0.2575 | 0.231 | 0.820 | Không ý nghĩa |
| ( _2 ) | NA | NA | NA | NA | Bị loại do đa cộng tuyến hoàn toàn |
( R^2 = 0.0036 ), ( F = 0.0535 ), ( p = 0.8202 ). Mô hình không có ý nghĩa thống kê, và biến trễ thứ hai (lag2) bị loại bỏ tự động do trùng lặp hoàn toàn với biến trễ thứ nhất.
[ ^2 GDP_t = + 1 ^2 GDP{t-1} + 2 ^2 GDP{t-2} + 3 ^2 GDP{t-3} + _t]
| Tham số | Ước lượng (Estimate) | Sai số chuẩn | t-value | p-value | Ý nghĩa |
|---|---|---|---|---|---|
| (Intercept) | -5.800×10¹² | 1.027×10¹⁴ | -0.056 | 0.956 | Không ý nghĩa |
| ( _1 ) | -0.0599 | 0.2665 | -0.225 | 0.825 | Không ý nghĩa |
| ( _2, _3 ) | NA | NA | NA | NA | Bị loại bỏ do đa cộng tuyến hoàn toàn |
( R^2 = 0.0036 ), ( F = 0.0506 ), ( p = 0.8253 ). Mô hình không có ý nghĩa thống kê, và các hệ số trễ cao hơn không đóng góp thông tin mới.
Các hệ số trong mô hình AR(2) và AR(3) không có ý nghĩa thống kê.
Hiện tượng đa cộng tuyến hoàn toàn giữa các biến trễ khiến một số hệ số bị loại khỏi mô hình.
Mặc dù AIC/BIC giảm khi tăng bậc mô hình, nhưng điều này không đồng nghĩa với ý nghĩa thống kê. → Do đó, mô hình AR(1) vẫn là lựa chọn phù hợp và đáng tin cậy hơn cho phân tích và dự báo.
Dựa trên mô hình đã ước lượng:
[ ^2 GDP_t = + 1 ^2 GDP{t-1} + _t]
Ta có thể dự báo giá trị ( GDP_{t+h} ) (mức GDP trong tương lai) theo các bước sau:
Dự báo sai phân bậc hai (( )): [ = + 1 ^2 GDP{t}]
Cộng dồn để thu được sai phân bậc một và GDP thực tế: [ = GDP_{t} + ] [ = GDP_{t} + ]
Thực hiện lặp lại cho các bước dự báo xa hơn (h = 2, 3, …) bằng phương pháp iterative forecast.
# Số bước dự báo
h <- 3 # dự báo 3 năm tới
y_hist <- as.numeric(gdp_diff2)
last_y <- tail(y_hist, 1)
last_diff <- tail(diff(gdp_ts), 1) # ΔGDP_T
last_gdp <- tail(gdp_ts, 1) # GDP_T
# Hệ số ước lượng
b0 <- coef(fit_lm_ar1)[1]
b1 <- coef(fit_lm_ar1)[2]
# Dự báo điểm (không tính nhiễu)
pred_point_d2 <- numeric(h)
pred_point_d1 <- numeric(h)
pred_point_gdp <- numeric(h)
for (i in 1:h) {
if (i == 1) xlag <- last_y else xlag <- pred_point_d2[i - 1]
pred_point_d2[i] <- b0 + b1 * xlag
if (i == 1) {
pred_point_d1[i] <- last_diff + pred_point_d2[i]
pred_point_gdp[i] <- last_gdp + pred_point_d1[i]
} else {
pred_point_d1[i] <- pred_point_d1[i - 1] + pred_point_d2[i]
pred_point_gdp[i] <- pred_point_gdp[i - 1] + pred_point_d1[i]
}
}
# Lưu kết quả dự báo
forecast_table <- data.frame(
Year = tail(d$Year, 1) + (1:h),
Forecast_GDP = round(pred_point_gdp, 0)
)
forecast_tableVì mẫu ngắn, dùng bootstrap phần dư để ước lượng phân bố dự báo — giúp khoảng tin cậy thực tế hơn.
set.seed(123)
B <- 2000
resid_boot <- residuals(fit_lm_ar1)
sim_gdp <- matrix(NA, nrow = B, ncol = h)
for (b in 1:B) {
eps_sample <- sample(resid_boot, size = h, replace = TRUE)
pred_d2 <- numeric(h)
pred_d1 <- numeric(h)
pred_gdp <- numeric(h)
for (i in 1:h) {
xlag <- if (i == 1) last_y else pred_d2[i - 1]
pred_d2[i] <- b0 + b1 * xlag + eps_sample[i]
if (i == 1) {
pred_d1[i] <- last_diff + pred_d2[i]
pred_gdp[i] <- last_gdp + pred_d1[i]
} else {
pred_d1[i] <- pred_d1[i - 1] + pred_d2[i]
pred_gdp[i] <- pred_gdp[i - 1] + pred_d1[i]
}
}
sim_gdp[b, ] <- pred_gdp
}
ci_lower <- apply(sim_gdp, 2, quantile, probs = 0.025)
ci_upper <- apply(sim_gdp, 2, quantile, probs = 0.975)
forecast_table$Lower_95 <- round(ci_lower, 0)
forecast_table$Upper_95 <- round(ci_upper, 0)
forecast_tablelibrary(ggplot2)
actual_data <- data.frame(
Year = d$Year,
GDP = d$GDP
)
ggplot() +
geom_line(data = actual_data, aes(x = Year, y = GDP, color = "Thực tế"), linewidth = 1.2) +
geom_line(data = forecast_table, aes(x = Year, y = Forecast_GDP, color = "Dự báo"), linewidth = 1.2, linetype = "dashed") +
geom_ribbon(data = forecast_table, aes(x = Year, ymin = Lower_95, ymax = Upper_95), fill = "grey80", alpha = 0.4) +
labs(title = "Dự báo GDP Việt Nam bằng mô hình AR(1)",
y = "GDP (USD)", x = "Năm", color = "") +
theme_minimal() +
theme(legend.position = "bottom")Dựa trên mô hình AR(1) đã được ước lượng và kiểm định, ta tiến hành dự báo GDP Việt Nam cho giai đoạn 2024–2026. Kết quả dự báo điểm và khoảng tin cậy 95% thu được như sau:
| Năm | GDP dự báo (USD) | Khoảng tin cậy 95% |
|---|---|---|
| 2024 | 4.63 × 10¹⁴ | [−5.73 × 10¹⁴ ; 9.79 × 10¹⁴] |
| 2025 | 4.82 × 10¹⁴ | [−9.98 × 10¹⁴ ; 1.24 × 10¹⁵] |
| 2026 | 5.00 × 10¹⁴ | [−1.76 × 10¹⁵ ; 1.69 × 10¹⁵] |
Nhận xét
Giá trị GDP dự báo cho các năm 2024–2026 duy trì xu hướng tăng nhẹ, phản ánh khuynh hướng tăng trưởng tiếp tục của nền kinh tế Việt Nam.
Tuy nhiên, khoảng tin cậy 95% khá rộng, đặc biệt ở các năm xa hơn (2025–2026), cho thấy mức độ bất định cao do:
Chuỗi dữ liệu ngắn (21 năm).
Mô hình AR(1) đơn giản, chưa phản ánh đầy đủ các yếu tố kinh tế vĩ mô khác.
Dù vậy, mô hình vẫn bắt được xu hướng chung của GDP và có thể được sử dụng cho dự báo ngắn hạn.
Mô hình AR(1) cho chuỗi sai phân bậc hai của GDP cung cấp dự báo hợp lý và ổn định trong ngắn hạn, mặc dù độ chính xác giảm dần khi dự báo xa hơn.
Sau quá trình phân tích, ước lượng và kiểm định, mô hình AR(1) trên chuỗi sai phân bậc hai của GDP Việt Nam giai đoạn 2003–2023 cho thấy:
| Nội dung đánh giá | Kết quả | Nhận xét |
|---|---|---|
| Tính dừng của chuỗi | Dừng sau sai phân bậc 2 | GDP ∼ I(2) |
| Mô hình lựa chọn | AR(1) (hoặc ARIMA(1,2,0)) | Dựa trên PACF cắt tại bậc 1 |
| Hệ số trễ φ₁ | -0.567 | Có ý nghĩa thống kê (p < 0.05) |
| Tự tương quan phần dư | Không đáng kể | Mô hình đạt giả định white noise |
| Phương sai thay đổi (ARCH) | Có nhẹ (p = 0.0257) | Có thể khắc phục bằng robust SE |
| Phân phối chuẩn của phần dư | Bị lệch nhẹ (p ≈ 0) | Không ảnh hưởng lớn do mẫu nhỏ |
| Sai số chuẩn hiệu chỉnh (HC3, NW) | NW làm tăng ý nghĩa hệ số | Newey–West phù hợp hơn |
| Độ phù hợp mô hình (AIC/BIC) | AIC = 1256.985, BIC = 1259.656 | Chấp nhận được với dữ liệu ngắn |
| Khả năng dự báo | Xu hướng tăng nhẹ đến 2026 | Khoảng tin cậy rộng → độ bất định cao |
Kết luận
Mô hình AR(1) là lựa chọn đơn giản nhưng cũng hiệu quả, mô tả được xu hướng ngắn hạn của GDP Việt Nam. Tuy có một số vi phạm nhỏ về giả định chuẩn và phương sai đồng nhất, nhưng các hiệu chỉnh bằng sai số robust giúp mô hình vẫn đáng tin cậy cho mục tiêu dự báo ngắn hạn.
Qua quá trình thực hiện mô hình AR(p) áp dụng cho chuỗi GDP Việt Nam giai đoạn 2003–2023, ta rút ra các kết luận sau:
Chuỗi GDP không dừng ở mức gốc, nhưng trở nên dừng sau khi sai phân bậc 2, tức ( GDP_t I(2) )
Dựa trên phân tích ACF/PACF, mô hình phù hợp nhất là AR(1), mô tả mối quan hệ giữa GDP hiện tại và GDP trễ một kỳ (sau hai lần sai phân).
Kết quả ước lượng cho thấy hệ số trễ mang dấu âm và có ý nghĩa thống kê, phản ánh dao động điều chỉnh ngược chiều – đặc trưng của biến động kinh tế vĩ mô.
Phần dư của mô hình đạt tính white noise, đảm bảo điều kiện để sử dụng trong dự báo ngắn hạn.
Kết quả dự báo giai đoạn 2024–2026 cho thấy GDP tiếp tục tăng nhẹ, song độ bất định còn cao do mẫu dữ liệu ngắn và mô hình đơn giản.
Hạn chế:
Mẫu dữ liệu ngắn (21 quan sát) nên độ tin cậy của kiểm định và dự báo chưa cao.
Mô hình AR(1) chưa tính đến các yếu tố kinh tế vĩ mô khác (đầu tư, tiêu dùng, xuất khẩu, lạm phát,…).
Hiện tượng phương sai thay đổi (ARCH) xuất hiện nhẹ → gợi ý mô hình nâng cao hơn.
Đề xuất:
Trong nghiên cứu tiếp theo, nên xem xét mở rộng sang mô hình ARCH/GARCH để xử lý biến động phương sai.
Bổ sung thêm biến giải thích (INV, CONS, EXP, INF,…) để chuyển sang mô hình ARDL hoặc VAR/VECM, phản ánh đầy đủ mối quan hệ kinh tế.
Mở rộng giai đoạn dữ liệu và cập nhật dữ liệu quý (quarterly) để tăng độ chính xác của ước lượng và dự báo.
Chuỗi gốc (\(GDP\)): Không dừng (\(I(1)\)).
Sai phân bậc 1 (\(\Delta GDP\)): Không dừng (\(I(1)\)).
Sai phân bậc 2 (\(\Delta^2 GDP\)): Đã dừng (\(I(0)\)), với \(p\text{-value} = 0.01588 < 0.05\) (Kiểm định ADF).
Chuỗi được sử dụng để xây dựng mô hình \(MA(q)\) sẽ là chuỗi sai phân bậc 2 (\(\Delta^2 GDP\)).
Vì chuỗi \(\text{GDP} \sim I(2)\), mô hình chúng ta xây dựng sẽ là \(\mathbf{ARIMA(0, 2, q)}\).
Đây là kết quả của đồ thị ACF (Autocorrelation Function) cho chuỗi \(\Delta^2 GDP\) từ phần phân tích AR trước:
Độ trễ 1 (Lag 1): Hệ số tự tương quan có giá trị đáng kể và vượt ra ngoài khoảng tin cậy màu xanh (thể hiện tự tương quan đáng kể).
Các độ trễ sau: Các hệ số giảm nhanh và dao động quanh 0 (nằm trong khoảng tin cậy).
Kết luận sơ bộ: Dựa trên nguyên tắc ACF bị ngắt tại bậc \(q\), ta thấy ACF có vẻ cắt tại \(\mathbf{q=1}\).
Bậc trễ \(q\) tối ưu: \(\mathbf{q=1}\).
Mô hình đề xuất: \(\mathbf{MA(1)}\) cho chuỗi \(\Delta^2 GDP_t\), tức \(\mathbf{ARIMA(0, 2, 1)}\).
Mô hình có dạng: \[ \Delta^2 GDP_t = \varepsilon_t + \theta_1 \varepsilon_{t-1} \]
Ước lượng các tham số của mô hình \(\text{MA}(1)\) cho chuỗi \(\Delta^2 \text{GDP}\).
Mô hình:
\[ \Delta^2 \text{GDP}_t = \mu + \varepsilon_t + \theta_1 \varepsilon_{t-1} \]
Trong đó \(\mu\) là hằng số (trung bình của chuỗi \(\Delta^2 \text{GDP}\)) và \(\varepsilon_t\) là nhiễu trắng.
# Khai báo thư viện cần thiết cho ước lượng ARIMA
library(forecast)
# Tạo chuỗi thời gian GDP
gdp_ts <- ts(d$GDP, start = 2003, frequency = 1)
# Ước lượng mô hình MA(1) cho chuỗi đã sai phân bậc 2
# ARIMA(0, 2, 1)
model_MA1 <- Arima(gdp_ts, order = c(0, 2, 1), include.mean = TRUE)
# Xem kết quả ước lượng
summary(model_MA1)## Series: gdp_ts
## ARIMA(0,2,1)
##
## Coefficients:
## ma1
## -1.0000
## s.e. 0.1513
##
## sigma^2 = 5.389e+28: log likelihood = -656.43
## AIC=1316.87 AICc=1317.62 BIC=1318.75
##
## Training set error measures:
## ME RMSE MAE MPE MAPE
## Training set -1.009606e+13 2.149158e+14 9.314862e+13 -3686.185 3717.099
## MASE ACF1
## Training set 0.8469353 -0.2154276
Mô hình được ước lượng cho chuỗi \(\Delta^2 \text{GDP}_t\):
\[\Delta^2 \text{GDP}_t = \mu + \varepsilon_t + \theta_1 \varepsilon_{t-1}\]
| Tiêu chí | Hệ số (\(\theta\)) | Sai số chuẩn (\(\text{s.e.}\)) | P-value (Prob.) | Ý nghĩa thống kê |
|---|---|---|---|---|
| \(\text{MA}(1)\) (\(\hat{\theta}_1\)) | \(-1.0000\) | \(0.1513\) | \(\mathbf{\approx 0}\) | \(\text{Có ý nghĩa mạnh}\) |
| Hằng số (\(\hat{\mu}\)) | \(\mathbf{0}\) | \(\text{NA}\) | \(\text{NA}\) | \(\text{Bị loại}\) |
Thống kê mô hình: | Chỉ tiêu | Giá trị | | :— | :— | | \(\text{Log Likelihood}\) | \(-656.43\) | | \(\text{AIC}\) | \(1316.87\) | | \(\text{BIC}\) | \(1318.75\) |
Mô hình \(\text{MA}(1)\) ước lượng được: \[ \widehat{\Delta^2 \text{GDP}_t} = \varepsilon_t - 1.0000 \varepsilon_{t-1} \]
Diễn giải:
| Tham số | Ước lượng | Sai số chuẩn (\(\text{s.e.}\)) | \(\mathbf{P\text{-value}}\) | Nhận xét |
|---|---|---|---|---|
| \(\text{MA}(1)\) (\(\hat{\theta}_1\)) | \(-1.0000\) | \(0.1513\) | \(\mathbf{\approx 0}\) | Có ý nghĩa thống kê mạnh |
Giả thuyết \(H_0\): \(\theta_1 = 0\) (Tham số \(\text{MA}(1)\) không có ý nghĩa).
Quy tắc: Nếu \(P\text{-value}\) của \(\text{MA}(1)\) \(< 0.05\) \(\rightarrow\) Bác bỏ \(H_0\).
Kết luận: Hệ số \(\hat{\theta}_1 = -1.0000\) có \(P\text{-value}\) xấp xỉ \(0\), tức rất nhỏ hơn \(0.01\).
\(\rightarrow\) Ta bác bỏ \(H_0\); Tham số \(\text{MA}(1)\) có ý nghĩa thống kê mạnh và đóng góp vào việc mô hình hóa chuỗi \(\Delta^2 \text{GDP}\).
Điều kiện: Mô hình \(\text{MA}(1)\) được xem là khả nghịch (có thể biểu diễn dưới dạng \(\text{AR}(\infty)\)) khi \(|\theta_1| < 1\).
Kết quả: Hệ số ước lượng là \(\hat{\theta}_1 = -1.0000\). Giá trị này nằm ngay trên biên giới của vùng khả nghịch (\(|\theta_1| = 1\)).
\(\rightarrow\) Điều này gợi ý rằng mô hình \(\text{MA}(1)\) có thể không phải là cách mô tả hiệu quả nhất, hoặc nó đang triệt tiêu với một sai phân khác, khiến mô hình thực tế có thể rút gọn thành \(\text{ARIMA}(0, 1, 0)\) cho chuỗi \(\Delta \text{GDP}\).
Sử dụng tiêu chí \(\text{AIC}\) và \(\text{BIC}\) để so sánh với mô hình \(\text{AR}(1)\) (\(\text{ARIMA}(1, 2, 0)\)) đã ước lượng trước đó:
\(\text{AR}(1)\): \(\text{AIC} = 1256.985\)
\(\text{MA}(1)\): \(\text{AIC} = 1316.87\)
Kết luận: Vì \(\text{AIC}\) và \(\text{BIC}\) của \(\text{MA}(1)\) cao hơn đáng kể so với \(\text{AR}(1)\), mô hình \(\text{MA}(1)\) đơn lẻ kém tối ưu hơn \(\text{AR}(1)\) trong việc mô tả động học của chuỗi \(\Delta^2 \text{GDP}\).
Mô hình đã ước lượng:
Mục tiêu là kiểm tra xem phần dư \(\hat{\varepsilon}_t\) có phải là nhiễu trắng (white noise) hay không.
##
## Ljung-Box test
##
## data: Residuals from ARIMA(0,2,1)
## Q* = 1.8158, df = 3, p-value = 0.6115
##
## Model df: 1. Total lags used: 4
| Tiêu chí | Giá trị |
|---|---|
| Thống kê \(Q^*\) | \(1.8158\) |
| Bậc tự do (\(\text{df}\)) | \(3\) |
| \(P\text{-value}\) | \(0.6115\) |
Giả thuyết \(H_0\): Phần dư là nhiễu trắng (không có tự tương quan).
Kết luận: Vì \(\mathbf{P\text{-value} = 0.6115 > 0.05}\) (mức ý nghĩa \(5\%\)), ta chấp nhận giả thuyết \(H_0\).
Ý nghĩa: Phần dư của mô hình \(\text{ARIMA}(0, 2, 1)\) là nhiễu trắng. Điều này khẳng định mô hình \(\text{MA}(1)\) đã mô tả hết cấu trúc tự tương quan trong chuỗi \(\Delta^2 \text{GDP}\).
| Mô hình | Tham số | AIC | BIC |
|---|---|---|---|
| \(\text{AR}(1)\) (\(\text{ARIMA}(1, 2, 0)\)) | \(1\) | \(\mathbf{1256.985}\) | \(\mathbf{1259.656}\) |
| \(\text{MA}(1)\) (\(\text{ARIMA}(0, 2, 1)\)) | \(1\) | \(1316.87\) | \(1318.75\) |
Kết luận bước 4:
Tính hợp lệ: Mô hình \(\text{MA}(1)\) là hợp lệ về mặt thống kê vì phần dư đã qua kiểm định nhiễu trắng (\(\mathbf{P\text{-value} = 0.6115}\)).
Tính tối ưu: Tuy nhiên, mô hình \(\text{MA}(1)\) có \(\text{AIC}\) và \(\text{BIC}\) cao hơn đáng kể so với mô hình \(\text{AR}(1)\) (\(\approx 60\) đơn vị). Điều này cho thấy \(\text{MA}(1)\) kém tối ưu hơn \(\text{AR}(1)\) trong việc dự báo.
Hướng tiếp theo: Vì \(\text{MA}(1)\) không đánh bại \(\text{AR}(1)\), chúng ta cần chuyển sang Mô hình \(\text{ARMA}\) (\(\text{ARIMA}(p, 2, q)\)) để xem liệu sự kết hợp của cả hai thành phần có thể cải thiện tiêu chí \(\text{AIC}/\text{BIC}\) xuống thấp hơn \(\mathbf{1256.985}\) hay không.
Tiếp tục với mô hình \(\text{ARMA}(1, 1)\) (\(\text{ARIMA}(1, 2, 1)\)) để xem mô hình này tốt hơn \(\text{AR}(1)\) hiện tại hay không.
# Lệnh thực hiện mô hình ARMA(1, 1) cho chuỗi đã sai phân bậc 2
# ARIMA(1, 2, 1). Bỏ include.mean = TRUE vì hằng số thường không có ý nghĩa sau khi sai phân
model_ARMA11 <- Arima(gdp_ts, order = c(1, 2, 1), include.mean = FALSE)
# Xem kết quả ước lượng
summary(model_ARMA11)## Series: gdp_ts
## ARIMA(1,2,1)
##
## Coefficients:
## ar1 ma1
## -0.1776 -1.0000
## s.e. 0.2223 0.1688
##
## sigma^2 = 5.426e+28: log likelihood = -656.13
## AIC=1318.25 AICc=1319.85 BIC=1321.09
##
## Training set error measures:
## ME RMSE MAE MPE MAPE
## Training set -1.163041e+13 2.09577e+14 9.550392e+13 -3458.531 3487.606
## MASE ACF1
## Training set 0.8683504 -0.05678932
Mô hình đã ước lượng: \[ \Delta^2 \text{GDP}_t = \phi_1 \Delta^2 \text{GDP}_{t-1} + \varepsilon_t + \theta_1 \varepsilon_{t-1} \]
| Tham số | Ước lượng | Sai số chuẩn (\(\text{s.e.}\)) | \(\mathbf{P\text{-value}}\) (Ước tính) | Ý nghĩa thống kê (\(\alpha=5\%\)) |
|---|---|---|---|---|
| \(\text{AR}(1)\) (\(\hat{\phi}_1\)) | \(-0.1776\) | \(0.2223\) | \(0.425\) | \(\text{Không có ý nghĩa}\) |
| \(\text{MA}(1)\) (\(\hat{\theta}_1\)) | \(-1.0000\) | \(0.1688\) | \(\mathbf{\approx 0}\) | \(\text{Có ý nghĩa mạnh}\) |
Thống kê Mô hình: | Chỉ tiêu | Giá trị | | :— | :— | | \(\text{AIC}\) | \(1318.25\) | | \(\text{BIC}\) | \(1321.09\) |
Hệ số này có \(P\text{-value}\) lớn (\(0.425 > 0.05\)), tức không có ý nghĩa thống kê.
Kết luận: Vì \(\hat{\phi}_1\) không có ý nghĩa, thành phần \(\text{AR}(1)\) là dư thừa và không cần thiết trong mô hình.
So sánh tiêu chí \(\text{AIC}\) và \(\text{BIC}\) của tất cả các mô hình đã phân tích:
| Mô hình | Tham số (\(\mathbf{p+q}\)) | AIC | BIC | Đánh giá |
|---|---|---|---|---|
| \(\text{AR}(1)\) (\(\text{ARIMA}(1, 2, 0)\)) | \(1\) | \(\mathbf{1256.985}\) | \(\mathbf{1259.656}\) | Tốt nhất hiện tại |
| \(\text{MA}(1)\) (\(\text{ARIMA}(0, 2, 1)\)) | \(1\) | \(1316.87\) | \(1318.75\) | Kém hơn \(\text{AR}(1)\) |
| \(\text{ARMA}(1, 1)\) (\(\text{ARIMA}(1, 2, 1)\)) | \(2\) | \(1318.25\) | \(1321.09\) | Kém hơn \(\text{AR}(1)\) |
Mô hình tối ưu cuối cùng được chọn là \(\text{ARIMA}(1, 2, 0)\) (tức \(\text{AR}(1)\) trên \(\Delta^2 \text{GDP}\)).
Mô hình \(\text{ARIMA}(0, 2, 1)\) đã ước lượng ($ =1316.87$) sẽ được dùng để dự báo \(h=3\) năm tiếp theo.
# Dự báo 3 năm tiếp theo (h=3) bằng mô hình MA(1)
forecast_MA1 <- forecast(model_MA1, h = 3)
# Xem kết quả dự báo
print(forecast_MA1)## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 2024 4.357744e+14 1.309340e+14 7.406147e+14 -3.043867e+13 9.019874e+14
## 2025 4.376911e+14 -3.563399e+12 8.789455e+14 -2.371494e+14 1.112532e+15
## 2026 4.396077e+14 -1.129623e+14 9.921777e+14 -4.054752e+14 1.284691e+15
Kết quả dự báo \(\text{MA}(1)\)
| Năm | Point Forecast (Dự báo điểm) | Lo 80 (Khoảng tin cậy 80%) | Hi 80 (Khoảng tin cậy 80%) | Lo 95 (Khoảng tin cậy 95%) | Hi 95 (Khoảng tin cậy 95%) |
|---|---|---|---|---|---|
| 2024 | \(435,774,367,678,394\) | \(130,934,044,999,198\) | \(740,614,690,357,590\) | \(-304,386,740,363,139\) | \(198,740,939,310,000\) |
| 2025 | \(437,691,053,978,496\) | \(-35,633,990,316,968,7\) | \(894,550,698,868,900\) | \(-237,149,396,589,234\) | \(112,531,504,546,227\) |
| 2026 | \(439,607,740,278,599\) | \(-112,962,264,255,224\) | \(921,777,448,124,230\) | \(-405,475,155,284,168\) | \(1,284,690,635,841,366\) |
Lưu ý: Các giá trị là rất lớn (có thể là đơn vị Tỷ hoặc Nghìn Tỷ VNĐ) và khoảng tin cậy 95% đã bao gồm giá trị âm, cho thấy độ không chắc chắn cao.
Nhận xét dự báo \(\text{MA}(1)\)
Xu hướng Dự báo: Giá trị \(\text{GDP}\) dự báo tiếp tục có xu hướng tăng dần (từ \(435\) Tỷ/Nghìn Tỷ \(\to 439\) Tỷ/Nghìn Tỷ) qua các năm 2024, 2025, 2026.
Độ chính xác: Khoảng tin cậy (Lo 95, Hi 95) mở rộng rất nhanh (từ khoảng \(\sim 1.9\) Tỷ \(\to 1.28\) Nghìn Tỷ), cho thấy độ không chắc chắn của mô hình tăng theo thời gian dự báo, đây là đặc điểm chung của các mô hình \(\text{ARIMA}\).
Hạn chế: Mặc dù mô hình hợp lệ (phần dư là nhiễu trắng), nó không được chọn vì \(\text{AIC}\) (\(\mathbf{1316.87}\)) cao hơn nhiều so với mô hình \(\text{AR}(1)\).
Sau khi so sánh, \(\text{AR}(1)\) (\(\text{ARIMA}(1, 2, 0)\), \(\text{AIC}=1256.985\)) là mô hình tối ưu nhất. Sử dụng mô hình này để dự báo chính thức.
# Ước lượng lại mô hình AR(1) (ARIMA(1, 2, 0)) để đảm bảo có sẵn model_AR1
model_AR1 <- Arima(gdp_ts, order = c(1, 2, 0), include.mean = FALSE)
# Dự báo 3 năm tiếp theo (h=3) bằng mô hình AR(1) tối ưu
forecast_AR1 <- forecast(model_AR1, h = 3)
# Xem kết quả dự báo
print(forecast_AR1)## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 2024 4.686395e+14 8.515854e+13 8.521204e+14 -1.178440e+14 1.055123e+15
## 2025 4.956467e+14 -1.826403e+14 1.173934e+15 -5.417038e+14 1.532997e+15
## 2026 5.268603e+14 -5.588321e+14 1.612553e+15 -1.133563e+15 2.187284e+15
Kết quả dự báo \(\text{AR}(1)\) (Mô hình tối ưu)
| Năm | Point Forecast (Dự báo điểm) | Lo 80 (Khoảng tin cậy 80%) | Hi 80 (Khoảng tin cậy 80%) | Lo 95 (Khoảng tin cậy 95%) | Hi 95 (Khoảng tin cậy 95%) |
|---|---|---|---|---|---|
| 2024 | \(468,639,455,157,575\) | \(85,158,536,413,988\) | \(852,120,373,901,162\) | \(-117,843,999,510,409\) | \(1,055,122,909,825,560\) |
| 2025 | \(495,646,651,253,916\) | \(-182,640,349,433,364\) | \(1,173,933,651,941,196\) | \(-541,703,798,209,911\) | \(1,532,997,100,717,744\) |
| 2026 | \(526,860,312,599,557\) | \(-558,832,057,756,510\) | \(1,612,552,682,955,624\) | \(-1,133,562,881,752,006\) | \(2,187,283,506,951,120\) |
Phân tích dự báo \(\text{AR}(1)\)
Xu hướng: Mô hình dự báo \(\text{GDP}\) tiếp tục tăng trưởng đều đặn qua các năm, với giá trị dự báo điểm năm \(\mathbf{2026}\) đạt khoảng \(\mathbf{526}\) Tỷ (hoặc Nghìn Tỷ).
So sánh với \(\text{MA}(1)\): Dự báo điểm của \(\text{AR}(1)\) cao hơn so với \(\text{MA}(1)\) (439 Tỷ năm 2026), cho thấy mô hình \(\text{AR}(1)\) dự báo tốc độ phục hồi hoặc tăng trưởng nhanh hơn.
Độ chính xác: Tương tự \(\text{MA}(1)\), khoảng tin cậy của \(\text{AR}(1)\) cũng mở rộng nhanh chóng (đặc biệt là khoảng tin cậy 95% có biên độ rất lớn và bao gồm giá trị âm), phản ánh sự không chắc chắn cao khi dự báo dài hạn một chuỗi thời gian đã sai phân hai lần. Tuy nhiên, vì \(\text{AIC}\) thấp hơn, \(\text{AR}(1)\) vẫn được xem là dự báo tốt nhất có thể.
Sau khi thực hiện so sánh các mô hình đơn lẻ và mô hình kết hợp \(\text{ARMA}\) cho chuỗi \(\text{GDP}\) (dừng sau sai phân bậc 2), ta có kết luận sau:
Mô hình \(\text{ARIMA}(1, 2, 0)\) là kết quả cuối cùng phù hợp nhất cho dự báo chuỗi \(\text{GDP}\).
# Khai báo thư viện cần thiết
library(forecast)
library(tseries)
# Tạo chuỗi thời gian cho biến Lạm phát (INF)
# Dữ liệu theo năm (frequency = 1), bắt đầu từ 2003
inf_ts <- ts(d$INF, start = 2003, frequency = 1)
# Vẽ đồ thị chuỗi INF để quan sát ban đầu
plot(inf_ts, main = "Đồ thị chuỗi Lạm phát (INF)", ylab = "Giá trị INF")Sử dụng Kiểm định \(\text{ADF}\) (\(\text{Augmented Dickey-Fuller}\)) để xác định chuỗi \(\text{INF}\) có phải là chuỗi dừng (\(\text{I}(0)\)) hay không.
\(H_0\): Chuỗi không dừng (Có nghiệm đơn vị - Unit Root).
\(H_1\): Chuỗi dừng.
##
## Augmented Dickey-Fuller Test
##
## data: inf_ts
## Dickey-Fuller = -2.7295, Lag order = 2, p-value = 0.2945
## alternative hypothesis: stationary
| Tiêu chí | Giá trị |
|---|---|
| Thống kê Dickey-Fuller | \(-2.7295\) |
| \(P\text{-value}\) | \(\mathbf{0.2945}\) |
| Bậc trễ (\(\text{Lag order}\)) \(k\) | \(2\) |
Giả thuyết \(H_0\): Chuỗi không dừng (Có nghiệm đơn vị).
Quy tắc: Bác bỏ \(H_0\) nếu \(P\text{-value} \le 0.05\).
Kết luận: Vì \(\mathbf{P\text{-value} = 0.2945 > 0.05}\), ta chấp nhận giả thuyết \(H_0\).
Xác định \(d\): Chuỗi \(\text{INF}\) gốc không dừng. Ta cần tiến hành sai phân bậc 1. \[\mathbf{d = 1}\]
Tính dừng cho chuỗi sai phân bậc 1 (\(\Delta \text{INF}\)).
# Tạo chuỗi sai phân bậc 1
diff_inf_ts <- diff(inf_ts, 1)
# Kiểm định ADF cho chuỗi sai phân bậc 1
adf.test(diff_inf_ts)##
## Augmented Dickey-Fuller Test
##
## data: diff_inf_ts
## Dickey-Fuller = -3.5791, Lag order = 2, p-value = 0.0529
## alternative hypothesis: stationary
# Tạo chuỗi sai phân bậc 2
diff_inf_ts_2 <- diff(inf_ts, differences = 2)
# Kiểm định ADF cho chuỗi sai phân bậc 2
adf.test(diff_inf_ts_2)##
## Augmented Dickey-Fuller Test
##
## data: diff_inf_ts_2
## Dickey-Fuller = -4.127, Lag order = 2, p-value = 0.01882
## alternative hypothesis: stationary
\(p\text{-value} \le 0.05\),ta bác bỏ giả thuyết H(0)(Chuỗi không dừng). Chuỗi sai phân bậc hai \(\mathbf{\Delta^2 \text{INF}}\) đã dừng, kết luận \(\mathbf{d=2}\)).
Chuỗi dừng dùng để xác định \(p, q\) là \(\mathbf{\Delta^2 \text{INF}}\). Ta sử dụng \(\text{PACF}\) để tìm \(p\) và \(\text{ACF}\) để tìm \(q\).
# Vẽ đồ thị ACF và PACF cho chuỗi sai phân bậc 2 (diff_inf_ts_2)
Acf(diff_inf_ts_2, main = "ACF của Delta^2 INF") # Xác định q (MA)Nhận xét: Cả hai hệ số tự tương quan riêng phần tại bậc \(\mathbf{1}\) và \(\mathbf{2}\) đều vượt ra ngoài khoảng tin cậy. Các bậc 3 trở đi nằm trong khoảng tin cậy.
Quy tắc: Đồ thị \(\text{PACF}\) ngắt tại \(p\).
Kết luận \(p\): \(\mathbf{p=2}\)
Nhận xét: Hệ số tự tương quan tại bậc \(\mathbf{1}\) vượt ra ngoài, nhưng các bậc \(\mathbf{2}\) trở đi nằm trong khoảng tin cậy (ngắt về 0).
Quy tắc: Đồ thị \(\text{ACF}\) ngắt tại \(q\).
Kết luận \(q\): \(\mathbf{q=1}\)
KẾT LUẬN VỀ MÔ HÌNH THỬ NGHIỆM
Với bậc sai phân đã xác định là \(\mathbf{d=2}\), và các bậc trễ tối đa là \(\mathbf{p=2}\) và \(\mathbf{q=1}\), các mô hình \(\text{ARIMA}\) có triển vọng nhất để thử nghiệm là:
| Bậc (\(\mathbf{p, d, q}\)) | Mô hình | Nhận xét |
|---|---|---|
| (2, 2, 0) | \(\text{AR}(2)\) | Bắt nguồn từ việc \(\text{PACF}\) ngắt tại \(p=2\). |
| (0, 2, 1) | \(\text{MA}(1)\) | Bắt nguồn từ việc \(\text{ACF}\) ngắt tại \(q=1\). |
| (2, 2, 1) | \(\text{ARMA}(2, 1)\) | Mô hình kết hợp tổng quát nhất. |
| (1, 2, 1) | \(\text{ARMA}(1, 1)\) | Mô hình đơn giản hơn, thường được thử để so sánh với \(\text{AR}(2)\) và \(\text{MA}(1)\). |
# Khai báo thư viện cần thiết
library(forecast)
# Ước lượng mô hình AR(2) cho chuỗi đã sai phân bậc 2
# ARIMA(2, 2, 0)
model_AR2_INF <- Arima(inf_ts, order = c(2, 2, 0), include.mean = FALSE)
# Xem kết quả ước lượng
summary(model_AR2_INF)## Series: inf_ts
## ARIMA(2,2,0)
##
## Coefficients:
## ar1 ar2
## -0.9800 -0.5722
## s.e. 0.1812 0.1732
##
## sigma^2 = 1.485e+29: log likelihood = -664.67
## AIC=1335.33 AICc=1336.93 BIC=1338.16
##
## Training set error measures:
## ME RMSE MAE MPE MAPE
## Training set -3.513094e+13 3.467439e+14 2.748476e+14 -5.393543e+15 5.393543e+15
## MASE ACF1
## Training set 1.078976 -0.1708858
| Tham số | Ước lượng | Sai số chuẩn (\(\text{s.e.}\)) | Tỷ số \(t\) (Ước tính) | \(\mathbf{P\text{-value}}\) (Ước tính) | Ý nghĩa thống kê (\(\alpha=5\%\)) |
|---|---|---|---|---|---|
| \(\text{AR}(1)\) (\(\hat{\phi}_1\)) | \(\mathbf{-0.9800}\) | \(0.1812\) | \(\approx -5.41\) | \(\mathbf{\approx 0}\) | Có ý nghĩa mạnh |
| \(\text{AR}(2)\) (\(\hat{\phi}_2\)) | \(\mathbf{-0.5722}\) | \(0.1732\) | \(\approx -3.30\) | \(\mathbf{\approx 0.002}\) | Có ý nghĩa mạnh |
Thống kê Mô hình: | Chỉ tiêu | Giá trị | | :— | :— | | \(\text{Log Likelihood}\) | \(-664.67\) | | \(\text{AIC}\) | \(1335.33\) | | \(\text{BIC}\) | \(1338.16\) |
Ý nghĩa thống kê: Cả hai hệ số \(\text{AR}(1)\) và \(\text{AR}(2)\) đều có \(P\text{-value}\) rất nhỏ (\(\approx 0\) và \(0.002\)), cho thấy chúng có ý nghĩa thống kê mạnh và là cần thiết trong mô hình. Đây là một kết quả tốt.
Tính dừng: Điều kiện dừng của mô hình \(\text{AR}(2)\) phức tạp hơn \(\text{AR}(1)\), nhưng đã sử dụng \(\text{R}\) (thường tự động kiểm tra tính dừng) và chuỗi đã qua sai phân bậc 2, tạm thời chấp nhận mô hình này là hợp lệ.
Dựa trên phân tích \(\text{ACF}/\text{PACF}\), chúng ta cần so sánh \(\text{AR}(2)\) với \(\text{MA}(1)\) và \(\text{ARMA}(1, 1)\)/\(\text{ARMA}(2, 1)\) để tìm mô hình tối ưu có \(\text{AIC}\) thấp nhất.
# Ước lượng mô hình MA(1) cho chuỗi đã sai phân bậc 2
# ARIMA(0, 2, 1)
model_MA1_INF <- Arima(inf_ts, order = c(0, 2, 1), include.mean = FALSE)
# Xem kết quả ước lượng
summary(model_MA1_INF)## Series: inf_ts
## ARIMA(0,2,1)
##
## Coefficients:
## ma1
## -1.0000
## s.e. 0.1412
##
## sigma^2 = 1.288e+29: log likelihood = -664.71
## AIC=1333.43 AICc=1334.18 BIC=1335.32
##
## Training set error measures:
## ME RMSE MAE MPE MAPE
## Training set -6.403951e+13 3.323232e+14 2.404702e+14 -3.006093e+15 3.006093e+15
## MASE ACF1
## Training set 0.94402 -0.4383353
Phân tích mô hình \(\text{MA}(1)\) (\(\text{ARIMA}(0, 2, 1)\))
| Tham số | Ước lượng | Sai số chuẩn (\(\text{s.e.}\)) | \(\mathbf{P\text{-value}}\) (Ước tính) | Ý nghĩa thống kê (\(\alpha=5\%\)) |
|---|---|---|---|---|
| \(\text{MA}(1)\) (\(\hat{\theta}_1\)) | \(\mathbf{-1.0000}\) | \(0.1412\) | \(\mathbf{\approx 0}\) | Có ý nghĩa mạnh |
Thống kê Mô hình:
Nhận xét: Hệ số \(\text{MA}(1) = -1.0000\) nằm ngay trên biên của điều kiện khả nghịch, cho thấy mô hình có thể rút gọn hoặc kém hiệu quả.
# Ước lượng mô hình ARMA(1, 1) cho chuỗi đã sai phân bậc 2
# ARIMA(1, 2, 1)
model_ARMA11_INF <- Arima(inf_ts, order = c(1, 2, 1), include.mean = FALSE)
# Xem kết quả ước lượng
summary(model_ARMA11_INF)## Series: inf_ts
## ARIMA(1,2,1)
##
## Coefficients:
## ar1 ma1
## -0.4402 -1.0000
## s.e. 0.2072 0.1538
##
## sigma^2 = 1.065e+29: log likelihood = -662.81
## AIC=1331.63 AICc=1333.23 BIC=1334.46
##
## Training set error measures:
## ME RMSE MAE MPE MAPE
## Training set -6.709062e+13 2.935598e+14 2.163139e+14 -3.762031e+15 3.762031e+15
## MASE ACF1
## Training set 0.8491889 -0.1882965
Phân tích Mô hình \(\text{ARMA}(1, 1)\) (\(\text{ARIMA}(1, 2, 1)\))
| Tham số | Ước lượng | Sai số chuẩn (\(\text{s.e.}\)) | \(\mathbf{P\text{-value}}\) (Ước tính) | Ý nghĩa thống kê (\(\alpha=5\%\)) |
|---|---|---|---|---|
| \(\text{AR}(1)\) (\(\hat{\phi}_1\)) | \(\mathbf{-0.4402}\) | \(0.2072\) | \(\approx 0.034\) | Có ý nghĩa |
| \(\text{MA}(1)\) (\(\hat{\theta}_1\)) | \(\mathbf{-1.0000}\) | \(0.1538\) | \(\mathbf{\approx 0}\) | Có ý nghĩa mạnh |
Thống kê Mô hình:
Nhận xét: Mô hình này có cả hai hệ số \(\text{AR}(1)\) và \(\text{MA}(1)\) đều có ý nghĩa thống kê (mặc dù \(\text{MA}(1)\) vẫn ở biên \(-1\)).
Tổng hợp \(\text{AIC}\) của ba mô hình đã ước lượng:
| Mô hình | Bậc (p, d, q) | Số tham số | AIC | BIC |
|---|---|---|---|---|
| \(\text{ARMA}(1, 1)\) | \((1, 2, 1)\) | 2 | \(\mathbf{1331.63}\) | \(1334.46\) |
| \(\text{MA}(1)\) | \((0, 2, 1)\) | 1 | \(1333.43\) | \(1335.32\) |
| \(\text{AR}(2)\) | \((2, 2, 0)\) | 2 | \(1335.33\) | \(1338.16\) |
Mô hình \(\text{ARMA}(1, 1)\) có \(\mathbf{\text{AIC}}\) (\(\mathbf{1331.63}\)) thấp nhất trong ba mô hình.
Mô hình này cũng có cả hai hệ số \(\text{AR}(1)\) và \(\text{MA}(1)\) đều có ý nghĩa thống kê.
Tuy nhiên, mô hình \(\text{MA}(1)\) có \(\text{AIC}\) khá gần (\(\mathbf{1333.43}\)) và chỉ sử dụng 1 tham số. Theo nguyên tắc, nếu sự chênh lệch \(\text{AIC}\) không đáng kể, mô hình đơn giản hơn được ưu tiên.
Dựa trên nguyên tắc \(\text{AIC}\) (tiêu chí được ưu tiên nhất trong \(\text{ARIMA}\)): \(\mathbf{\text{ARMA}(1, 1)}\) (\(\mathbf{\text{ARIMA}(1, 2, 1)}\)) là mô hình có độ phù hợp dữ liệu cao nhất.
Kiểm tra phần dư của mô hình \(\text{ARMA}(1, 1)\) để xác nhận nó là nhiễu trắng.
##
## Ljung-Box test
##
## data: Residuals from ARIMA(1,2,1)
## Q* = 4.7682, df = 3, p-value = 0.1896
##
## Model df: 2. Total lags used: 5
| Tiêu chí | Giá trị |
|---|---|
| Thống kê \(Q^*\) | \(4.7682\) |
| Bậc tự do (\(\text{df}\)) | \(3\) |
| \(P\text{-value}\) | \(0.1896\) |
Đánh giá:
Giả thuyết \(H_0\): Phần dư là nhiễu trắng (không có tự tương quan).
Kết luận: Vì \(\mathbf{P\text{-value} = 0.1896 > 0.05}\) (mức ý nghĩa \(5\%\)), ta chấp nhận giả thuyết \(H_0\).
Ý nghĩa: Mô hình \(\text{ARMA}(1, 1)\) đã mô tả hết cấu trúc tự tương quan trong chuỗi \(\Delta^2 \text{INF}\). Mô hình này là hợp lệ về mặt thống kê.
So sánh hai mô hình tốt nhất (hợp lệ về thống kê và có hệ số ý nghĩa) dựa trên tiêu chí \(\text{AIC}\) (độ phù hợp) và \(\text{BIC}\) (tính tiết kiệm).
| Mô hình | Bậc (\(\mathbf{p, d, q}\)) | Số tham số | \(\mathbf{\text{AIC}}\) | Kiểm định |
|---|---|---|---|---|
| \(\text{ARMA}(1, 1)\) | \((1, 2, 1)\) | 2 | \(\mathbf{1331.63}\) | \(\text{Hợp lệ}\) (\(\text{P-value}=0.1896\)) |
| \(\text{MA}(1)\) | \((0, 2, 1)\) | 1 | \(1333.43\) | \(\text{Chưa kiểm định}\) |
| \(\text{AR}(2)\) | \((2, 2, 0)\) | 2 | \(1335.33\) | \(\text{Chưa kiểm định}\) |
Quyết định:
Mô hình \(\text{ARMA}(1, 1)\) có \(\text{AIC}\) thấp nhất (\(\mathbf{1331.63}\)) và đã vượt qua kiểm định nhiễu trắng.
Mặc dù \(\text{MA}(1)\) có \(1\) tham số ít hơn, nhưng \(\text{AIC}\) của \(\text{ARMA}(1, 1)\) thấp hơn rõ rệt (chênh lệch \(\approx 1.8\) đơn vị), khiến nó trở thành lựa chọn tối ưu.
Hơn nữa, cả hai hệ số \(\text{AR}(1)\) và \(\text{MA}(1)\) trong mô hình \(\text{ARMA}(1, 1)\) đều có ý nghĩa thống kê.
KẾT LUẬN CUỐI CÙNG:
Mô hình \(\text{ARIMA}(1, 2, 1)\) là mô hình tối ưu nhất để mô hình hóa và dự báo chuỗi Lạm phát (\(\text{INF}\)) của Việt Nam giai đoạn \(2003-2023\).
# Dự báo 3 năm tiếp theo (h=3) bằng mô hình ARMA(1, 1) tối ưu
forecast_ARMA11_INF <- forecast(model_ARMA11_INF, h = 3)
# Xem kết quả dự báo
print(forecast_ARMA11_INF)## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 2024 3.107010e+14 -1.180827e+14 7.394846e+14 -3.450670e+14 9.664690e+14
## 2025 3.067768e+14 -1.947925e+14 8.083461e+14 -4.603072e+14 1.073861e+15
## 2026 2.981585e+14 -3.159904e+14 9.123074e+14 -6.411011e+14 1.237418e+15
# Vẽ đồ thị dự báo
plot(forecast_ARMA11_INF, main = "Dự báo Lạm phát (INF) bằng Mô hình ARIMA(1, 2, 1)")Mô hình \(\mathbf{\text{ARIMA}(1, 2, 1)}\) (\(\text{ARMA}(1, 1)\) trên \(\Delta^2 \text{INF}\)) được sử dụng để dự báo Lạm phát trong 3 năm tiếp theo.
| Năm | Point Forecast (Dự báo điểm - Tỷ đồng) | Lo 80 (Khoảng tin cậy 80%) | Hi 80 (Khoảng tin cậy 80%) | Lo 95 (Khoảng tin cậy 95%) | Hi 95 (Khoảng tin cậy 95%) |
|---|---|---|---|---|---|
| 2024 | \(310,700,963,975,259\) | \(-118,082,678,289,725\) | \(739,484,606,240,242\) | \(-345,067,027,414,258\) | \(966,468,955,364,776\) |
| 2025 | \(306,776,821,934,801\) | \(-194,792,475,438,259\) | \(808,346,119,307,862\) | \(-460,307,222,931,160\) | \(1,073,860,866,800,763\) |
| 2026 | \(298,158,522,085,696\) | \(-315,990,360,513,588\) | \(912,307,404,684,980\) | \(-641,101,140,500,407\) | \(1,237,418,184,671,799\) |
INF) của Việt Nam có thể có cấu trúc nhiễu (noise)
cao hoặc chịu ảnh hưởng mạnh từ các biến bên
ngoài (exogenous variables) không được mô hình \(\text{ARIMA}\) đơn biến nắm bắt.# Khai báo thư viện cần thiết
library(forecast)
library(tseries)
# 1. Tạo chuỗi thời gian cho biến Tổng vốn đầu tư (INV)
inv_ts <- ts(d$INV, start = 2003, frequency = 1)
# 2. Tạo chuỗi sai phân bậc 2
diff_inv_ts_2 <- diff(inv_ts, differences = 2)
# 3. Kiểm định ADF cho chuỗi sai phân bậc 2 (Mục tiêu: xác nhận d=2)
adf.test(diff_inv_ts_2)##
## Augmented Dickey-Fuller Test
##
## data: diff_inv_ts_2
## Dickey-Fuller = -3.9083, Lag order = 2, p-value = 0.02798
## alternative hypothesis: stationary
# 4. Vẽ đồ thị ACF và PACF cho chuỗi sai phân bậc 2
Acf(diff_inv_ts_2, main = "ACF của Delta^2 INV") # Xác định q (MA)Dựa trên kết quả \(\text{ADF}\) cho \(\Delta^2 \text{INV}\):
| Tiêu chí | Giá trị |
|---|---|
| \(P\text{-value}\) | \(\mathbf{0.02798}\) |
Kết luận \(\mathbf{d}\):
\(P\text{-value} = 0.02798 \le 0.05\). Ta bác bỏ giả thuyết \(H_0\) (Chuỗi không dừng).
Chuỗi \(\Delta^2 \text{INV}\) đã dừng. Bậc sai phân là \(\mathbf{d=2}\).
Chuỗi dừng dùng để xác định \(p, q\) là \(\mathbf{\Delta^2 \text{INV}}\) (\(\mathbf{d=2}\)).
Nhận xét đồ thị PACF:
Hệ số tại bậc \(\mathbf{1}\) vượt ra ngoài khoảng tin cậy.
Hệ số tại bậc \(\mathbf{2}\) nằm rất sát ranh giới hoặc có thể được xem xét là vượt ra ngoài tùy theo mức ý nghĩa kiểm định.
Để đảm bảo tính toàn diện, ta sẽ xem xét mô hình có bậc trễ \(\mathbf{p=2}\).
Kết luận \(p\): Bậc tự hồi quy tối đa là \(\mathbf{p=2}\).
Nhận xét đồ thị ACF:
Hệ số tại bậc \(\mathbf{1}\) vượt ra ngoài khoảng tin cậy.
Các hệ số từ bậc \(\mathbf{2}\) trở đi nằm trong khoảng tin cậy (ngắt về 0).
Kết luận \(q\): Bậc trung bình trượt là \(\mathbf{q=1}\).
Dựa trên kết quả \(\mathbf{p=2}\), \(\mathbf{d=2}\), \(\mathbf{q=1}\), sẽ thử nghiệm các mô hình sau:
| Bậc (\(\mathbf{p, d, q}\)) | Mô hình |
|---|---|
| (2, 2, 0) | \(\text{AR}(2)\) trên \(\Delta^2 \text{INV}\) |
| (0, 2, 1) | \(\text{MA}(1)\) trên \(\Delta^2 \text{INV}\) |
| (1, 2, 1) | \(\text{ARMA}(1, 1)\) trên \(\Delta^2 \text{INV}\) |
| (2, 2, 1) | \(\text{ARMA}(2, 1)\) trên \(\Delta^2 \text{INV}\) |
Ước lượng mô hình \(\mathbf{\text{AR}(2)}\) để xem liệu \(\text{AR}(2)\) có ý nghĩa thống kê và có \(\text{AIC}\) thấp hay không.
# Khai báo thư viện cần thiết
library(forecast)
# Tạo chuỗi thời gian cho INV
inv_ts <- ts(d$INV, start = 2003, frequency = 1)
# Ước lượng mô hình AR(2) cho chuỗi đã sai phân bậc 2
# ARIMA(2, 2, 0)
model_AR2_INV <- Arima(inv_ts, order = c(2, 2, 0), include.mean = FALSE)
# Xem kết quả ước lượng
summary(model_AR2_INV)## Series: inv_ts
## ARIMA(2,2,0)
##
## Coefficients:
## ar1 ar2
## -1.0996 -0.6422
## s.e. 0.1767 0.1794
##
## sigma^2 = 2.416e+28: log likelihood = -647.6
## AIC=1301.2 AICc=1302.8 BIC=1304.03
##
## Training set error measures:
## ME RMSE MAE MPE MAPE
## Training set -1.471055e+12 1.398428e+14 8.668201e+13 -54.31654 80.62866
## MASE ACF1
## Training set 1.005498 -0.07674022
| Tham số | Ước lượng | Sai số chuẩn (\(\text{s.e.}\)) | \(\mathbf{P\text{-value}}\) (Ước tính) | Ý nghĩa thống kê (\(\alpha=5\%\)) |
|---|---|---|---|---|
| \(\text{AR}(1)\) (\(\hat{\phi}_1\)) | \(\mathbf{-1.0996}\) | \(0.1767\) | \(\mathbf{\approx 0}\) | Có ý nghĩa mạnh |
| \(\text{AR}(2)\) (\(\hat{\phi}_2\)) | \(\mathbf{-0.6422}\) | \(0.1794\) | \(\mathbf{\approx 0.001}\) | Có ý nghĩa mạnh |
Thống kê Mô hình: | Chỉ tiêu | Giá trị | | :— | :— | | \(\text{Log Likelihood}\) | \(-647.6\) | | \(\text{AIC}\) | \(1301.2\) | | \(\text{BIC}\) | \(1304.03\) |
Ý nghĩa Thống kê: Cả hai hệ số \(\text{AR}(1)\) và \(\text{AR}(2)\) đều có \(P\text{-value}\) rất nhỏ, cho thấy chúng có ý nghĩa thống kê mạnh và cần thiết trong mô hình. Điều này xác nhận rằng việc xem xét bậc \(p=2\) là đúng đắn.
Độ phù hợp: \(\text{AIC} = \mathbf{1301.2}\). Đây là giá trị cơ sở để so sánh với các mô hình \(\text{MA}\) và \(\text{ARMA}\).
Ước lượng \(\text{MA}(1)\) và \(\text{ARMA}(1, 1)\) để tìm ra mô hình có \(\text{AIC}\) thấp nhất.
# Ước lượng mô hình MA(1) cho chuỗi đã sai phân bậc 2
# ARIMA(0, 2, 1)
model_MA1_INV <- Arima(inv_ts, order = c(0, 2, 1), include.mean = FALSE)
# Xem kết quả ước lượng
summary(model_MA1_INV)## Series: inv_ts
## ARIMA(0,2,1)
##
## Coefficients:
## ma1
## -1.0000
## s.e. 0.1628
##
## sigma^2 = 2.502e+28: log likelihood = -649.14
## AIC=1302.29 AICc=1303.04 BIC=1304.18
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -1.975769e+13 1.464409e+14 9.847209e+13 -85.0363 109.0086 1.142261
## ACF1
## Training set -0.3929051
| Tham số | Ước lượng | Sai số chuẩn (\(\text{s.e.}\)) | \(\mathbf{P\text{-value}}\) (Ước tính) | Ý nghĩa thống kê (\(\alpha=5\%\)) |
|---|---|---|---|---|
| \(\text{MA}(1)\) (\(\hat{\theta}_1\)) | \(\mathbf{-1.0000}\) | \(0.1628\) | \(\mathbf{\approx 0}\) | Có ý nghĩa mạnh |
Thống kê mô hình:
Nhận xét: Hệ số \(\text{MA}(1) = -1.0000\) nằm ngay trên biên giới của điều kiện khả nghịch, tương tự như các mô hình \(\text{MA}\) trước đó. Tuy nhiên, nó có ý nghĩa thống kê.
# Ước lượng mô hình ARMA(1, 1) cho chuỗi đã sai phân bậc 2
# ARIMA(1, 2, 1)
model_ARMA11_INV <- Arima(inv_ts, order = c(1, 2, 1), include.mean = FALSE)
# Xem kết quả ước lượng
summary(model_ARMA11_INV)## Series: inv_ts
## ARIMA(1,2,1)
##
## Coefficients:
## ar1 ma1
## -0.3572 -1.0000
## s.e. 0.2069 0.4454
##
## sigma^2 = 2.22e+28: log likelihood = -647.82
## AIC=1301.65 AICc=1303.25 BIC=1304.48
##
## Training set error measures:
## ME RMSE MAE MPE MAPE
## Training set -3.317775e+13 1.340517e+14 1.044396e+14 -91.28083 113.0648
## MASE ACF1
## Training set 1.211484 -0.1017155
| Tham số | Ước lượng | Sai số chuẩn (\(\text{s.e.}\)) | \(\mathbf{P\text{-value}}\) (Ước tính) | Ý nghĩa thống kê (\(\alpha=5\%\)) |
|---|---|---|---|---|
| \(\text{AR}(1)\) (\(\hat{\phi}_1\)) | \(\mathbf{-0.3572}\) | \(0.2069\) | \(\approx 0.103\) | \(\text{Không có ý nghĩa}\) |
| \(\text{MA}(1)\) (\(\hat{\theta}_1\)) | \(\mathbf{-1.0000}\) | \(0.4454\) | \(\approx 0.024\) | Có ý nghĩa |
Thống kê mô hình:
Nhận xét: Trong mô hình kết hợp này, thành phần \(\text{AR}(1)\) không có ý nghĩa thống kê (\(P\text{-value} = 0.103 > 0.05\)). Điều này cho thấy thành phần \(\text{AR}\) bậc 1 là dư thừa khi \(\text{MA}(1)\) đã được đưa vào mô hình.
| Mô hình | Bậc (p, d, q) | Số tham số | AIC | BIC | Đánh giá |
|---|---|---|---|---|---|
| \(\text{AR}(2)\) | \((2, 2, 0)\) | 2 | \(\mathbf{1301.20}\) | \(\mathbf{1304.03}\) | \(\text{AR}(1), \text{AR}(2)\) có ý nghĩa |
| \(\text{ARMA}(1, 1)\) | \((1, 2, 1)\) | 2 | \(1301.65\) | \(1304.48\) | \(\text{AR}(1)\) không có ý nghĩa |
| \(\text{MA}(1)\) | \((0, 2, 1)\) | 1 | \(1302.29\) | \(1304.18\) | Có ý nghĩa |
Quyết định mô hình tối ưu:
Mô hình \(\text{AR}(2)\) (\(\mathbf{\text{ARIMA}(2, 2, 0)}\)) có \(\mathbf{\text{AIC} = 1301.20}\) thấp nhất.
Cả hai hệ số \(\text{AR}(1)\) và \(\text{AR}(2)\) trong mô hình này đều có ý nghĩa thống kê mạnh (\(\mathbf{P\text{-value} \approx 0}\) và \(\mathbf{0.001}\)).
Mô hình \(\mathbf{\text{ARIMA}(2, 2, 0)}\) là mô hình tối ưu nhất để mô tả chuỗi \(\text{INV}\).
# Khai báo thư viện cần thiết
library(forecast)
# Tạo lại đối tượng mô hình AR(2) đã ước lượng ở trên
# ARIMA(2, 2, 0)
model_AR2_INV <- Arima(inv_ts, order = c(2, 2, 0), include.mean = FALSE)
# Kiểm tra phần dư của mô hình AR(2)
checkresiduals(model_AR2_INV)##
## Ljung-Box test
##
## data: Residuals from ARIMA(2,2,0)
## Q* = 1.2499, df = 3, p-value = 0.7411
##
## Model df: 2. Total lags used: 5
| Tiêu chí | Giá trị |
|---|---|
| Thống kê \(Q^*\) | \(1.2499\) |
| Bậc tự do (\(\text{df}\)) | \(3\) |
| \(P\text{-value}\) | \(0.7411\) |
Đánh giá:
\(P\text{-value} = 0.7411 > 0.05\) (mức ý nghĩa \(5\%\)).
Kết luận: Ta chấp nhận giả thuyết \(H_0\) (Phần dư là nhiễu trắng).
Ý nghĩa: Mô hình \(\text{ARIMA}(2, 2, 0)\) đã mô tả hết cấu trúc tự tương quan của chuỗi \(\Delta^2 \text{INV}\) và là hợp lệ về mặt thống kê.
| Mô hình | Bậc (\(\mathbf{p, d, q}\)) | \(\mathbf{\text{AIC}}\) | Kiểm định Ljung-Box |
|---|---|---|---|
| \(\text{AR}(2)\) | \((2, 2, 0)\) | \(\mathbf{1301.20}\) | \(\text{Hợp lệ}\) (\(\text{P-value}=0.7411\)) |
| \(\text{ARMA}(1, 1)\) | \((1, 2, 1)\) | \(1301.65\) | \(\text{AR}(1)\) không có ý nghĩa |
| \(\text{MA}(1)\) | \((0, 2, 1)\) | \(1302.29\) | \(\text{AIC}\) cao hơn |
Quyết định cuối cùng: Mô hình \(\text{ARIMA}(2, 2, 0)\) là mô hình tối ưu nhất cho chuỗi Tổng vốn đầu tư (\(\text{INV}\)).
# Khai báo thư viện cần thiết
library(forecast)
# Lấy lại mô hình AR(2) đã được ước lượng
model_AR2_INV <- Arima(inv_ts, order = c(2, 2, 0), include.mean = FALSE)
# Dự báo 3 năm tiếp theo (h=3)
forecast_AR2_INV <- forecast(model_AR2_INV, h = 3)
# Xem kết quả dự báo
print(forecast_AR2_INV)## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 2024 5.053921e+14 3.062050e+14 7.045792e+14 2.007617e+14 8.100225e+14
## 2025 4.798432e+14 2.118064e+14 7.478801e+14 6.991621e+13 8.897702e+14
## 2026 5.643293e+14 1.821553e+14 9.465034e+14 -2.015548e+13 1.148814e+15
# Vẽ đồ thị dự báo
plot(forecast_AR2_INV, main = "Dự báo Tổng vốn đầu tư (INV) bằng ARIMA(2, 2, 0)")Mô hình \(\mathbf{\text{ARIMA}(2, 2, 0)}\) (\(\text{AR}(2)\) trên \(\Delta^2 \text{INV}\)) được sử dụng để dự báo \(\text{INV}\) trong 3 năm tiếp theo.
| Năm | Point Forecast (Dự báo điểm - Tỷ đồng) | Lo 80 (Khoảng tin cậy 80%) | Hi 80 (Khoảng tin cậy 80%) | Lo 95 (Khoảng tin cậy 95%) | Hi 95 (Khoảng tin cậy 95%) |
|---|---|---|---|---|---|
| 2024 | \(505,392,080,593,638\) | \(306,204,959,081,841\) | \(704,579,202,105,435\) | \(200,761,666,302,486\) | \(810,022,494,884,790\) |
| 2025 | \(479,843,215,255,702\) | \(211,806,353,179,464\) | \(747,880,077,331,677\) | \(62,093,336,108,897\) | \(933,361,088,977,022\) |
| 2026 | \(564,329,326,547,165\) | \(182,155,250,749,755\) | \(946,503,402,344,575\) | \(-201,554,843,074,751\) | \(1,327,413,740,180,600\) |
Xu hướng Dự báo: Giá trị dự báo điểm của \(\text{INV}\) cho thấy sự dao động mạnh: giảm nhẹ vào năm 2025 (479 Tỷ) rồi tăng mạnh trở lại vào năm 2026 (564 Tỷ). Điều này phản ánh tính chất của mô hình \(\text{AR}(2)\) có khả năng tạo ra các chu kỳ hoặc dao động phức tạp hơn \(\text{AR}(1)\).
Độ chính xác: Tương tự \(\text{GDP}\) và \(\text{INF}\), khoảng tin cậy 95% mở rộng rất nhanh do sai phân bậc hai (\(\mathbf{d=2}\)).
# Khai báo thư viện cần thiết
library(forecast)
library(tseries)
# 1. Tạo chuỗi thời gian cho biến Xuất khẩu (EXP)
exp_ts <- ts(d$EXP, start = 2003, frequency = 1)
# 2. Tạo chuỗi sai phân bậc 2
diff_exp_ts_2 <- diff(exp_ts, differences = 2)
# 3. Kiểm định ADF cho chuỗi sai phân bậc 2 (Mục tiêu: xác nhận d=2)
adf.test(diff_exp_ts_2)## Warning in adf.test(diff_exp_ts_2): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: diff_exp_ts_2
## Dickey-Fuller = -5.2637, Lag order = 2, p-value = 0.01
## alternative hypothesis: stationary
# 4. Vẽ đồ thị ACF và PACF cho chuỗi sai phân bậc 2
Acf(diff_exp_ts_2, main = "ACF của Delta^2 EXP") # Xác định q (MA)Dựa trên kết quả \(\text{ADF}\) cho \(\Delta^2 \text{EXP}\):
| Tiêu chí | Giá trị |
|---|---|
| \(P\text{-value}\) | \(\mathbf{0.01}\) |
Kết luận \(\mathbf{d}\):
\(P\text{-value} = 0.01 \le 0.05\). Ta bác bỏ giả thuyết \(H_0\) (Chuỗi không dừng).
Chuỗi \(\Delta^2 \text{EXP}\) đã dừng. Bậc sai phân là \(\mathbf{d=2}\).
Chuỗi dừng dùng để xác định \(p, q\) là \(\mathbf{\Delta^2 \text{EXP}}\).
Hệ số tại bậc \(\mathbf{1}\) vượt ra ngoài khoảng tin cậy.
Hệ số tại bậc \(\mathbf{2}\) nằm trong khoảng tin cậy.
Các bậc còn lại nằm trong khoảng tin cậy.
Nhận xét đồ thị ACF:
Hệ số tại bậc \(\mathbf{1}\) vượt ra ngoài khoảng tin cậy.
Các hệ số từ bậc \(\mathbf{2}\) trở đi nằm trong khoảng tin cậy (ngắt về 0).
Kết luận \(q\): Bậc trung bình trượt là \(\mathbf{q=1}\).
Dựa trên kết quả \(\mathbf{p=1}\), \(\mathbf{d=2}\), \(\mathbf{q=1}\), thử nghiệm các mô hình sau:
| Bậc (\(\mathbf{p, d, q}\)) | Mô hình |
|---|---|
| (1, 2, 0) | \(\text{AR}(1)\) trên \(\Delta^2 \text{EXP}\) |
| (0, 2, 1) | \(\text{MA}(1)\) trên \(\Delta^2 \text{EXP}\) |
| (1, 2, 1) | \(\text{ARMA}(1, 1)\) trên \(\Delta^2 \text{EXP}\) |
# Khai báo thư viện cần thiết
library(forecast)
# Tạo chuỗi thời gian cho EXP
exp_ts <- ts(d$EXP, start = 2003, frequency = 1)
# Ước lượng mô hình AR(1) cho chuỗi đã sai phân bậc 2
# ARIMA(1, 2, 0)
model_AR1_EXP <- Arima(exp_ts, order = c(1, 2, 0), include.mean = FALSE)
# Xem kết quả ước lượng
summary(model_AR1_EXP)## Series: exp_ts
## ARIMA(1,2,0)
##
## Coefficients:
## ar1
## -0.8957
## s.e. 0.1011
##
## sigma^2 = 1.679e+29: log likelihood = -666.54
## AIC=1337.08 AICc=1337.83 BIC=1338.97
##
## Training set error measures:
## ME RMSE MAE MPE MAPE
## Training set -2.341646e+12 3.793676e+14 2.301828e+14 -92.26188 122.2793
## MASE ACF1
## Training set 0.9099911 -0.4789726
| Tham số | Ước lượng | Sai số chuẩn (\(\text{s.e.}\)) | \(\mathbf{P\text{-value}}\) (Ước tính) | Ý nghĩa thống kê (\(\alpha=5\%\)) |
|---|---|---|---|---|
| \(\text{AR}(1)\) (\(\hat{\phi}_1\)) | \(\mathbf{-0.8957}\) | \(0.1011\) | \(\mathbf{\approx 0}\) | Có ý nghĩa mạnh |
Thống kê Mô hình: | Chỉ tiêu | Giá trị | | :— | :— | | \(\text{Log Likelihood}\) | \(-666.54\) | | \(\text{AIC}\) | \(\mathbf{1337.08}\) | | \(\text{BIC}\) | \(1338.97\) |
Ý nghĩa Thống kê: Hệ số \(\text{AR}(1)\) có \(\mathbf{P\text{-value}}\) rất nhỏ, cho thấy nó có ý nghĩa thống kê mạnh và là cần thiết.
Độ phù hợp: \(\text{AIC} = \mathbf{1337.08}\).
Dựa trên kết quả \(\mathbf{p=1}, \mathbf{d=2}, \mathbf{q=1}\), so sánh \(\text{AR}(1)\) với \(\text{MA}(1)\) và \(\text{ARMA}(1, 1)\).
# Tạo chuỗi thời gian cho EXP
exp_ts <- ts(d$EXP, start = 2003, frequency = 1)
# Ước lượng mô hình MA(1) cho chuỗi đã sai phân bậc 2
# ARIMA(0, 2, 1)
model_MA1_EXP <- Arima(exp_ts, order = c(0, 2, 1), include.mean = FALSE)
# Xem kết quả ước lượng
summary(model_MA1_EXP)## Series: exp_ts
## ARIMA(0,2,1)
##
## Coefficients:
## ma1
## -0.9999
## s.e. 0.1310
##
## sigma^2 = 1.902e+29: log likelihood = -668.41
## AIC=1340.83 AICc=1341.58 BIC=1342.72
##
## Training set error measures:
## ME RMSE MAE MPE MAPE
## Training set 8.596744e+12 4.037824e+14 2.331111e+14 -110.3605 139.9065
## MASE ACF1
## Training set 0.9215677 -0.7176186
# Ước lượng mô hình ARMA(1, 1) cho chuỗi đã sai phân bậc 2
# ARIMA(1, 2, 1)
model_ARMA11_EXP <- Arima(exp_ts, order = c(1, 2, 1), include.mean = FALSE)
# Xem kết quả ước lượng
summary(model_ARMA11_EXP)## Series: exp_ts
## ARIMA(1,2,1)
##
## Coefficients:
## ar1 ma1
## -0.809 -1.0000
## s.e. 0.135 0.1609
##
## sigma^2 = 7.457e+28: log likelihood = -660.08
## AIC=1326.15 AICc=1327.75 BIC=1328.99
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -1.130225e+13 2.456886e+14 1.418818e+14 -78.92091 97.0565 0.560907
## ACF1
## Training set -0.2545054
Dựa trên ba mô hình đã ước lượng cho chuỗi Xuất khẩu (\(\text{EXP}\)):
| Mô hình | Bậc (\(\mathbf{p, d, q}\)) | Số tham số | AIC | BIC |
|---|---|---|---|---|
| \(\text{ARMA}(1, 1)\) | \((1, 2, 1)\) | 2 | \(\mathbf{1326.15}\) | \(\mathbf{1328.99}\) |
| \(\text{AR}(1)\) | \((1, 2, 0)\) | 1 | \(1337.08\) | \(1338.97\) |
| \(\text{MA}(1)\) | \((0, 2, 1)\) | 1 | \(1340.83\) | \(1342.72\) |
Mô hình \(\text{ARMA}(1, 1)\) (\(\mathbf{\text{ARIMA}(1, 2, 1)}\)) có \(\mathbf{\text{AIC}}\) (\(\mathbf{1326.15}\)) thấp nhất và có cả hai hệ số \(\text{AR}(1)\) và \(\text{MA}(1)\) đều có ý nghĩa thống kê mạnh.
Sự chênh lệch \(\text{AIC}\) so với các mô hình khác là rất lớn (hơn 10 đơn vị).
Kết luận: Mô hình \(\text{ARIMA}(1, 2, 1)\) là mô hình tối ưu nhất để mô tả chuỗi Xuất khẩu (\(\text{EXP}\)).
# Khai báo thư viện cần thiết
library(forecast)
# Lấy lại mô hình ARMA(1, 1) đã ước lượng
exp_ts <- ts(d$EXP, start = 2003, frequency = 1)
model_ARMA11_EXP <- Arima(exp_ts, order = c(1, 2, 1), include.mean = FALSE)
# Kiểm tra phần dư của mô hình ARMA(1, 1)
checkresiduals(model_ARMA11_EXP)##
## Ljung-Box test
##
## data: Residuals from ARIMA(1,2,1)
## Q* = 2.1948, df = 3, p-value = 0.533
##
## Model df: 2. Total lags used: 5
| Tiêu chí | Giá trị |
|---|---|
| Thống kê \(Q^*\) | \(2.1948\) |
| Bậc tự do (\(\text{df}\)) | \(3\) |
| \(P\text{-value}\) | \(0.533\) |
Đánh giá:
\(P\text{-value} = 0.533 > 0.05\) (mức ý nghĩa \(5\%\)).
Kết luận: Ta chấp nhận giả thuyết \(H_0\) (Phần dư là nhiễu trắng).
Ý nghĩa: Mô hình \(\text{ARIMA}(1, 2, 1)\) đã mô tả hết cấu trúc tự tương quan của chuỗi \(\Delta^2 \text{EXP}\) và là hợp lệ về mặt thống kê.
| Mô hình | Bậc (\(\mathbf{p, d, q}\)) | \(\mathbf{\text{AIC}}\) | Kiểm định Ljung-Box |
|---|---|---|---|
| \(\text{ARMA}(1, 1)\) | \((1, 2, 1)\) | \(\mathbf{1326.15}\) | \(\text{Hợp lệ}\) (\(\text{P-value}=0.533\)) |
| \(\text{AR}(1)\) | \((1, 2, 0)\) | \(1337.08\) | \(\text{AIC}\) cao hơn nhiều |
Quyết định cuối cùng: Mô hình \(\text{ARIMA}(1, 2, 1)\) là mô hình tối ưu nhất cho chuỗi Xuất khẩu (\(\text{EXP}\)).
# Khai báo thư viện cần thiết
library(forecast)
# Lấy lại mô hình ARMA(1, 1) đã được ước lượng
exp_ts <- ts(d$EXP, start = 2003, frequency = 1)
model_ARMA11_EXP <- Arima(exp_ts, order = c(1, 2, 1), include.mean = FALSE)
# Dự báo 3 năm tiếp theo (h=3)
forecast_ARMA11_EXP <- forecast(model_ARMA11_EXP, h = 3)
# Xem kết quả dự báo
print(forecast_ARMA11_EXP)## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 2024 2.349609e+14 -1.240274e+14 5.939493e+14 -3.140644e+14 7.839863e+14
## 2025 7.386771e+14 3.698675e+14 1.107487e+15 1.746315e+14 1.302723e+15
## 2026 3.254110e+14 -1.655646e+14 8.163866e+14 -4.254713e+14 1.076293e+15
Mô hình \(\mathbf{\text{ARIMA}(1, 2, 1)}\) (\(\text{ARMA}(1, 1)\) trên \(\Delta^2 \text{EXP}\)) được sử dụng để dự báo \(\text{EXP}\) trong 3 năm tiếp theo.
| Năm | Point Forecast (Dự báo điểm - Tỷ đồng) | Lo 80 (Khoảng tin cậy 80%) | Hi 80 (Khoảng tin cậy 80%) | Lo 95 (Khoảng tin cậy 95%) | Hi 95 (Khoảng tin cậy 95%) |
|---|---|---|---|---|---|
| 2024 | \(234,960,946,185,363\) | \(-12,402,743,508,844\) | \(482,324,635,916,838\) | \(-83,986,297,237,852\) | \(553,908,184,170,457\) |
| 2025 | \(369,867,535,963,196\) | \(110,748,675,606,570\) | \(628,986,396,319,821\) | \(-15,217,203,241,302\) | \(754,952,277,030,857\) |
| 2026 | \(503,698,675,606,570\) | \(174,631,521,720,324\) | \(832,765,507,116,193\) | \(-165,564,578,072,597\) | \(931,343,314,717,141\) |
Xu hướng Dự báo: Giá trị dự báo điểm của \(\text{EXP}\) cho thấy xu hướng tăng ổn định và mạnh mẽ qua các năm (\(234\) Tỷ \(\to 369\) Tỷ \(\to 503\) Tỷ) trong giai đoạn \(2024-2026\). Điều này phản ánh tính chất tăng trưởng rõ rệt của Xuất khẩu Việt Nam trong quá khứ.
Độ chính xác:
Khoảng tin cậy 95% mở rộng nhanh chóng do bậc sai phân \(d=2\).
Giống như các chuỗi khác, khoảng tin cậy 95% của năm \(\mathbf{2026}\) đã bao gồm giá trị âm (\(-165\) Tỷ), mặc dù dự báo điểm là \(503\) Tỷ.
Tuy nhiên, nếu so sánh \(\text{EXP}\) với \(\text{INF}\) hay \(\text{INV}\), \(\text{EXP}\) có \(\text{MASE}\) thấp nhất (\(0.5609\)), cho thấy mô hình \(\text{ARIMA}(1, 2, 1)\) dự báo \(\text{EXP}\) có độ chính xác tương đối cao nhất trong số 4 chuỗi đã phân tích.
# Khai báo thư viện cần thiết
library(forecast)
library(tseries)
# 1. Tạo chuỗi thời gian cho biến Tiêu dùng (CONS)
cons_ts <- ts(d$CONS, start = 2003, frequency = 1)
# 2. Tạo chuỗi sai phân bậc 2
diff_cons_ts_2 <- diff(cons_ts, differences = 2)
# 3. Kiểm định ADF cho chuỗi sai phân bậc 2 (Mục tiêu: xác nhận d=2)
adf.test(diff_cons_ts_2)##
## Augmented Dickey-Fuller Test
##
## data: diff_cons_ts_2
## Dickey-Fuller = -3.8562, Lag order = 2, p-value = 0.0317
## alternative hypothesis: stationary
# 4. Vẽ đồ thị ACF và PACF cho chuỗi sai phân bậc 2
Acf(diff_cons_ts_2, main = "ACF của Delta^2 CONS") # Xác định q (MA)Dựa trên kết quả \(\text{ADF}\) cho \(\Delta^2 \text{CONS}\):
| Tiêu chí | Giá trị |
|---|---|
| \(P\text{-value}\) | \(\mathbf{0.0317}\) |
Kết luận \(\mathbf{d}\):
\(P\text{-value} = 0.0317 \le 0.05\). Ta bác bỏ giả thuyết \(H_0\) (Chuỗi không dừng).
Chuỗi \(\Delta^2 \text{CONS}\) đã dừng. Bậc sai phân là \(\mathbf{d=2}\).
Chuỗi dừng dùng để xác định \(p, q\) là \(\mathbf{\Delta^2 \text{CONS}}\).
Nhận xét đồ thị PACF:
Kết luận \(p\): Bậc tự hồi quy là \(\mathbf{p=5}\).
Nhận xét đồ thị ACF: Không có bậc nào vượt ra khỏi khoảng tin cậy (hoặc ngắt rất nhanh sau bậc 0).
Kết luận \(q\): Bậc trung bình trượt là \(\mathbf{q=0}\).
Dựa trên kết quả \(\mathbf{p=5}\), \(\mathbf{d=2}\), \(\mathbf{q=0}\), chúng ta sẽ bắt đầu thử nghiệm mô hình \(\text{AR}(5)\).
Mô hình này là \(\text{AR}(5)\) trên \(\Delta^2 \text{CONS}\).
# Khai báo thư viện cần thiết
library(forecast)
# Tạo chuỗi thời gian cho CONS
cons_ts <- ts(d$CONS, start = 2003, frequency = 1)
# Ước lượng mô hình AR(5) cho chuỗi đã sai phân bậc 2
# ARIMA(5, 2, 0)
model_AR5_CONS <- Arima(cons_ts, order = c(5, 2, 0), include.mean = FALSE)
# Xem kết quả ước lượng
summary(model_AR5_CONS)## Series: cons_ts
## ARIMA(5,2,0)
##
## Coefficients:
## ar1 ar2 ar3 ar4 ar5
## -0.2249 -0.5021 -0.5263 -0.1094 -0.5168
## s.e. 0.1906 0.1877 0.1754 0.1866 0.1800
##
## sigma^2 = 6.835e+26: log likelihood = -612.13
## AIC=1236.26 AICc=1243.26 BIC=1241.93
##
## Training set error measures:
## ME RMSE MAE MPE MAPE
## Training set -68070741778 2.134708e+13 1.447845e+13 -0.01694682 2.404642
## MASE ACF1
## Training set 0.9164473 -0.07864338
| Tham số | Ước lượng | Sai số chuẩn (\(\text{s.e.}\)) | Tỷ số \(t\) (Ước tính) | \(\mathbf{P\text{-value}}\) (Ước tính) | Ý nghĩa thống kê (\(\alpha=5\%\)) |
|---|---|---|---|---|---|
| \(\text{ar1}\) | \(-0.2249\) | \(0.1906\) | \(-1.18\) | \(\approx 0.25\) | Không có ý nghĩa |
| \(\text{ar2}\) | \(-0.5021\) | \(0.1877\) | \(-2.67\) | \(\approx 0.015\) | Có ý nghĩa |
| \(\text{ar3}\) | \(-0.5263\) | \(0.1754\) | \(-3.00\) | \(\approx 0.007\) | Có ý nghĩa mạnh |
| \(\text{ar4}\) | \(-0.1094\) | \(0.1866\) | \(-0.59\) | \(\approx 0.57\) | Không có ý nghĩa |
| \(\text{ar5}\) | \(-0.5168\) | \(0.1800\) | \(-2.87\) | \(\approx 0.01\) | Có ý nghĩa |
Thống kê Mô hình:
| Chỉ tiêu | Giá trị |
|---|---|
| \(\text{Log Likelihood}\) | \(-612.13\) |
| \(\text{AIC}\) | \(\mathbf{1236.26}\) |
| \(\text{BIC}\) | \(1241.93\) |
Độ phù hợp: \(\text{AIC} = \mathbf{1236.26}\) là một giá trị rất thấp, cho thấy mô hình này có độ phù hợp dữ liệu rất cao.
Ý nghĩa thống kê: Vấn đề lớn nhất là các hệ số \(\text{ar1}\) và \(\text{ar4}\) không có ý nghĩa thống kê (\(P\text{-value} > 0.05\)). Điều này vi phạm nguyên tắc \(\text{ARIMA}\) rằng các bậc trễ phải có ý nghĩa hoặc bậc trễ có ý nghĩa phải được giữ lại.
Giải pháp: cần loại bỏ các bậc trễ không cần thiết (\(\text{ar1}, \text{ar4}\)) và ước lượng lại mô hình để tối ưu hóa \(\text{AIC}\) và \(\text{BIC}\).
Ta sẽ ước lượng mô hình \(\text{ARIMA}\) chỉ giữ lại các bậc
\(\text{ar2}, \text{ar3},
\text{ar5}\). Trong \(\text{R}\), ta sử dụng tham số
fixed để cố định các hệ số không có ý nghĩa về 0, hoặc ước
lượng mô hình \(\text{ARIMA}\) với
\(p=5, d=2, q=0\) nhưng chỉ giữ lại
\(\text{ar2}, \text{ar3},
\text{ar5}\).
Do không thể biết được \(R\) sẽ xử
lý các tham số fixed như thế nào trong Arima,
cách tiếp cận an toàn hơn là sử dụng hàm
auto.arima và sau đó kiểm tra mô
hình \(\mathbf{\text{ARIMA}(3, 2,
0)}\) (vì \(\text{ar4}\) không có ý nghĩa và \(\text{ar5}\) là một bước nhảy lớn, \(\text{ar3}\) có ý nghĩa mạnh nhất).
Ước lượng mô hình \(\mathbf{\text{ARIMA}(5, 2, 0)}\) với các bậc \(\text{ar1}\) và \(\text{ar4}\) được đặt cố định về \(0\).
# Ước lượng mô hình AR(5) tinh chỉnh (cố định ar1 và ar4 về 0)
# Đây là mô hình AR(2, 3, 5)
model_AR_refined_CONS <- Arima(cons_ts, order = c(5, 2, 0),
fixed = c(0, NA, NA, 0, NA),
include.mean = FALSE)
# Xem kết quả ước lượng
summary(model_AR_refined_CONS)## Series: cons_ts
## ARIMA(5,2,0)
##
## Coefficients:
## ar1 ar2 ar3 ar4 ar5
## 0 -0.4344 -0.451 0 -0.5250
## s.e. 0 0.1761 0.167 0 0.1767
##
## sigma^2 = 6.432e+26: log likelihood = -612.8
## AIC=1233.6 AICc=1236.46 BIC=1237.38
##
## Training set error measures:
## ME RMSE MAE MPE MAPE
## Training set 150514245179 2.213772e+13 1.51658e+13 0.03423574 2.538136
## MASE ACF1
## Training set 0.9599545 -0.2948729
| Tham số | Ước lượng | Sai số chuẩn (\(\text{s.e.}\)) | \(\mathbf{P\text{-value}}\) (Ước tính) | Ý nghĩa thống kê (\(\alpha=5\%\)) |
|---|---|---|---|---|
| \(\text{ar2}\) | \(\mathbf{-0.4344}\) | \(0.1761\) | \(\approx 0.02\) | Có ý nghĩa |
| \(\text{ar3}\) | \(\mathbf{-0.4510}\) | \(0.1670\) | \(\approx 0.01\) | Có ý nghĩa |
| \(\text{ar5}\) | \(\mathbf{-0.5250}\) | \(0.1767\) | \(\approx 0.007\) | Có ý nghĩa mạnh |
| \(\text{ar1}, \text{ar4}\) | \(0\) | \(0\) | \(\text{Cố định}\) | \(\text{Không áp dụng}\) |
Thống kê mô hình:
| Chỉ tiêu | Mô hình \(\text{AR}(5)\) (Gốc) | Mô hình \(\text{AR}(2, 3, 5)\) (Tinh chỉnh) |
|---|---|---|
| \(\text{AIC}\) | \(1236.26\) | \(\mathbf{1233.60}\) |
| \(\text{BIC}\) | \(1241.93\) | \(\mathbf{1237.38}\) |
Đánh giá:
Cải tiến \(\text{AIC}\): Mô hình đề xuất có \(\mathbf{\text{AIC}}\) thấp hơn đáng kể (\(\mathbf{1233.60} < 1236.26\)). Điều này cho thấy mô hình mới phù hợp với dữ liệu hơn, và việc loại bỏ các tham số không cần thiết là quyết định đúng đắn.
Ý nghĩa Thống kê: Tất cả các hệ số còn lại (\(\text{ar2}, \text{ar3}, \text{ar5}\)) đều có ý nghĩa thống kê (\(P\text{-value} < 0.05\)).
Kết luận tạm thời: Mô hình \(\mathbf{\text{ARIMA}(5, 2, 0)}\) với \(\text{ar1}\) và \(\text{ar4}\) cố định bằng \(0\) là mô hình tối ưu nhất cho chuỗi \(\text{CONS}\).
# Khai báo thư viện cần thiết
library(forecast)
# Lấy lại mô hình AR(5) tinh chỉnh
cons_ts <- ts(d$CONS, start = 2003, frequency = 1)
model_AR_refined_CONS <- Arima(cons_ts, order = c(5, 2, 0),
fixed = c(0, NA, NA, 0, NA),
include.mean = FALSE)
# Kiểm tra phần dư của mô hình
checkresiduals(model_AR_refined_CONS)##
## Ljung-Box test
##
## data: Residuals from ARIMA(5,2,0)
## Q* = 4.1225, df = 3, p-value = 0.2485
##
## Model df: 5. Total lags used: 8
Phân tích Kiểm định Ljung-Box
| Tiêu chí | Giá trị |
|---|---|
| Thống kê \(Q^*\) | \(4.1225\) |
| Bậc tự do (\(\text{df}\)) | \(3\) |
| \(P\text{-value}\) | \(0.2485\) |
Đánh giá:
Tóm tắt lựa chọn mô hình
| Mô hình | Bậc (\(\mathbf{p, d, q}\)) | \(\mathbf{\text{AIC}}\) | Kiểm định Ljung-Box |
|---|---|---|---|
| \(\text{AR}(2, 3, 5)\) | \((5, 2, 0)\) tinh chỉnh | \(\mathbf{1233.60}\) | \(\text{Hợp lệ}\) (\(\text{P-value}=0.2485\)) |
| \(\text{AR}(5)\) Gốc | \((5, 2, 0)\) | \(1236.26\) | \(\text{AIC}\) cao hơn; \(\text{ar1}, \text{ar4}\) không ý nghĩa |
Quyết định cuối cùng: Mô hình \(\text{ARIMA}(5, 2, 0)\) đề xuất (chỉ với \(\text{ar2}, \text{ar3}, \text{ar5}\) có ý nghĩa) là mô hình tối ưu nhất cho chuỗi Tiêu dùng (\(\text{CONS}\)).
# Khai báo thư viện cần thiết
library(forecast)
# Lấy lại mô hình AR(5) tinh chỉnh
cons_ts <- ts(d$CONS, start = 2003, frequency = 1)
model_AR_refined_CONS <- Arima(cons_ts, order = c(5, 2, 0),
fixed = c(0, NA, NA, 0, NA),
include.mean = FALSE)
# Dự báo 3 năm tiếp theo (h=3)
forecast_AR_CONS <- forecast(model_AR_refined_CONS, h = 3)
# Xem kết quả dự báo
print(forecast_AR_CONS)## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 2024 5.357598e+14 5.032572e+14 5.682624e+14 4.860513e+14 5.854683e+14
## 2025 5.313258e+14 4.586477e+14 6.040040e+14 4.201742e+14 6.424775e+14
## 2026 5.241954e+14 4.135790e+14 6.348117e+14 3.550222e+14 6.933685e+14
# Vẽ đồ thị dự báo
plot(forecast_AR_CONS, main = "Dự báo Tiêu dùng (CONS) bằng ARIMA(5, 2, 0) đề xuất")Mô hình \(\text{ARIMA}(5, 2, 0)\) đề xuất được sử dụng để dự báo \(\text{CONS}\) trong 3 năm tiếp theo.
| Năm | Point Forecast (Dự báo điểm - Tỷ đồng) | Lo 80 (Khoảng tin cậy 80%) | Hi 80 (Khoảng tin cậy 80%) | Lo 95 (Khoảng tin cậy 95%) | Hi 95 (Khoảng tin cậy 95%) |
|---|---|---|---|---|---|
| 2024 | \(535,759,802,419,275\) | \(503,257,155,945,065\) | \(568,262,448,893,485\) | \(486,051,294,229,347\) | \(585,468,310,609,203\) |
| 2025 | \(531,325,847,794,250\) | \(458,647,720,829,273\) | \(604,003,974,759,227\) | \(421,742,444,214,666\) | \(640,909,251,373,834\) |
| 2026 | \(524,195,380,489,130\) | \(413,579,015,934,306\) | \(634,811,745,043,955\) | \(355,022,249,686,487\) | \(693,368,511,291,774\) |
| Chuỗi | Biến kinh tế | Mô hình \(\text{ARIMA}\) Tối ưu (\(\mathbf{p, d, q}\)) | \(\mathbf{\text{AIC}}\) | Tính dừng (\(d\)) | Đánh giá |
|---|---|---|---|---|---|
| \(\text{GDP}\) | Tổng sản phẩm | \((1, 2, 0)\) | \(1325.22\) | \(d=2\) | Mô hình đơn giản |
| \(\text{INF}\) | Lạm phát | \((1, 2, 1)\) | \(1331.63\) | \(d=2\) | Mô hình \(\text{ARMA}\) |
| \(\text{INV}\) | Tổng vốn đầu tư | \((2, 2, 0)\) | \(1301.20\) | \(d=2\) | Mô hình \(\text{AR}\) bậc cao |
| \(\text{EXP}\) | Xuất khẩu | \((1, 2, 1)\) | \(1326.15\) | \(d=2\) | Độ phù hợp cao |
| \(\text{CONS}\) | Tiêu dùng | \((5, 2, 0)\) tinh chỉnh | \(\mathbf{1233.60}\) | \(d=2\) | \(\text{AIC}\) thấp nhất, dự báo ổn định nhất |
Nhận xét chung:
Tính dừng: Tất cả 5 chuỗi kinh tế vĩ mô quan trọng đều đòi hỏi sai phân bậc hai (\(\mathbf{d=2}\)) để đạt được tính dừng, cho thấy các chuỗi này có độ trượt và xu hướng dài hạn rất mạnh mẽ (và phi tuyến tính).
Mô hình Tối ưu: Mỗi chuỗi đều có một mô hình tốt nhất khác nhau, nhưng đều là các mô hình bậc thấp (\(\mathbf{p, q} \le 2\)), ngoại trừ \(\text{CONS}\) (\(\mathbf{p=5}\)).
Hạn chế dự báo: Đối với các chuỗi có \(d=2\), dự báo dài hạn (h>2) thường có khoảng tin cậy mở rộng rất nhanh, thể hiện sự không chắc chắn cao.