#Thư viện
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)
library(forecast)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(tseries)
#Dữ liệu
df<-readxl::read_xlsx("D:\\STUDY\\HK5\\PTDL\\BTGK\\Dữ liệu\\Data 2.xlsx")
#Sửa tên biến
df <- df|>
rename(IDNGDP=`IDN(GDP)`,
THAGDP=`THA(GDP)`,
VNMGDP=`VNM(GDP)`,
IDNFDI=`IDN(FDI)`,
THAFDI=`THA(FDI)`,
VNMFDI=`VNM(FDI)`)
#Sai số ##Y mũ gen IDNGDP_hat= IDNGDP[_n-1]
df$IDNGDP_hat <- dplyr::lag(df$IDNGDP, 1)
df$THAGDP_hat <- dplyr::lag(df$THAGDP, 1)
df$VNMGDP_hat <- dplyr::lag(df$VNMGDP, 1)
df$IDNFDI_hat <- dplyr::lag(df$IDNFDI, 1)
df$THAFDI_hat <- dplyr::lag(df$THAFDI, 1)
df$VNMFDI_hat <- dplyr::lag(df$VNMFDI, 1)
df_hat <- df %>% select(ends_with("_hat"))
print(df_hat)
## # A tibble: 21 × 6
## IDNGDP_hat THAGDP_hat VNMGDP_hat IDNFDI_hat THAFDI_hat VNMFDI_hat
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 NA NA NA NA NA NA
## 2 4.78 7.19 6.90 596923828. -4609377096. -1450000000
## 3 5.03 6.29 7.54 1511917230 -5783594587. -1610000000
## 4 5.69 4.19 7.55 -5271257208. -7664201699. -1889000000
## 5 5.50 4.97 6.98 -2188448467. -7876711486. -2315000000
## 6 6.35 5.44 7.13 -2253330000 -7086888457. -6516000000
## 7 6.01 1.73 5.66 -3418723399. -6221859991. -9279000000
## 8 4.63 -0.691 5.40 -2628247483. -415179561. -6900000000
## 9 6.22 7.51 6.42 -11106333135. -6615343922. -7100000000
## 10 6.17 0.840 6.41 -11528394762. 4702082850. -6480000000
## # ℹ 11 more rows
##e gen eIDNGDP= IDNGDP- IDNGDP_hat
df$eIDNGDP <- df$IDNGDP - df$IDNGDP_hat
df$eTHAGDP <- df$THAGDP - df$THAGDP_hat
df$eVNMGDP <- df$VNMGDP - df$VNMGDP_hat
df$eIDNFDI <- df$IDNFDI - df$IDNFDI_hat
df$eTHAFDI <- df$THAFDI - df$THAFDI_hat
df$eVNMFDI <- df$VNMFDI - df$VNMFDI_hat
df_e <- df %>% select(starts_with("e"))
print(df_e)
## # A tibble: 21 × 6
## eIDNGDP eTHAGDP eVNMGDP eIDNFDI eTHAFDI eVNMFDI
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 NA NA NA NA NA NA
## 2 0.251 -0.900 0.637 914993402. -1174217491. -160000000
## 3 0.662 -2.10 0.0108 -6783174438. -1880607113. -279000000
## 4 -0.192 0.780 -0.569 3082808741. -212509787. -426000000
## 5 0.844 0.467 0.152 -64881533. 789823029. -4201000000
## 6 -0.331 -3.71 -1.47 -1165393399. 865028466. -2763000000
## 7 -1.38 -2.42 -0.264 790475916. 5806680430. 2379000000
## 8 1.59 8.20 1.03 -8478085652. -6200164360. -200000000
## 9 -0.0541 -6.67 -0.0101 -422061627. 11317426772. 620000000
## 10 -0.140 6.40 -0.909 -2187831226. -3340548404. -688000000
## # ℹ 11 more rows
##me summarize eIDNGDP
summary(df$eIDNGDP)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## -7.08480 -0.27731 -0.09221 0.01339 0.35330 5.76840 1
summary(df$eTHAGDP)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## -8.1646 -2.1853 -0.2674 -0.2653 0.8088 8.2040 1
summary(df$eVNMGDP)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## -4.493849 -0.376087 0.000381 -0.092632 0.534840 5.569786 1
summary(df$eIDNFDI)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## -8.478e+09 -2.708e+09 -6.015e+08 -7.681e+08 1.930e+09 6.389e+09 1
summary(df$eTHAFDI)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## -1.956e+10 -4.183e+09 -6.934e+08 5.907e+08 4.887e+09 1.890e+10 1
summary(df$eVNMFDI)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## -4.824e+09 -1.466e+09 -5.570e+08 -9.300e+08 8.800e+07 2.379e+09 1
##pe gen peIDNGDP = (eIDNGDP / IDNGDP) * 100
df$peIDNGDP <- (df$eIDNGDP / df$IDNGDP) * 100
df$peTHAGDP <- (df$eTHAGDP / df$THAGDP) * 100
df$peVNMGDP <- (df$eVNMGDP / df$VNMGDP) * 100
df$peIDNFDI <- (df$eIDNFDI / df$IDNFDI) * 100
df$peTHAFDI <- (df$eTHAFDI / df$THAFDI) * 100
df$peVNMFDI <- (df$eVNMFDI / df$VNMFDI) * 100
df_pe <- df %>% select(starts_with("pe"))
print(df_pe)
## # A tibble: 21 × 6
## peIDNGDP peTHAGDP peVNMGDP peIDNFDI peTHAFDI peVNMFDI
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 NA NA NA NA NA NA
## 2 4.98 -14.3 8.46 60.5 20.3 9.94
## 3 11.6 -50.2 0.144 129. 24.5 14.8
## 4 -3.48 15.7 -8.16 -141. 2.70 18.4
## 5 13.3 8.60 2.13 2.88 -11.1 64.5
## 6 -5.51 -215. -25.9 34.1 -13.9 29.8
## 7 -29.9 350. -4.89 -30.1 -1399. -34.5
## 8 25.6 109. 16.0 76.3 93.7 2.82
## 9 -0.876 -794. -0.157 3.66 241. -9.57
## 10 -2.32 88.4 -16.5 16.0 -245. 9.60
## # ℹ 11 more rows
##mpe summarize peIDNGDP
summary(df$peIDNGDP)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## -29.9173 -3.8968 -0.0761 25.8951 12.0436 343.0045 1
summary(df$peTHAGDP)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## -794.311 -62.567 8.682 -11.086 73.541 485.800 1
summary(df$peVNMGDP)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## -156.83077 -9.17011 -0.00676 -8.15712 7.29402 68.56375 1
summary(df$peIDNFDI)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## -140.867 -24.286 8.555 5.542 33.768 128.682 1
summary(df$peTHAFDI)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## -1398.60 -27.43 25.88 -23.11 136.70 597.78 1
summary(df$peVNMFDI)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## -34.478 -0.575 9.101 9.914 15.724 64.472 1
##ae gen aeIDNGDP = abs(eIDNGDP)
df$aeIDNGDP <- abs(df$eIDNGDP)
df$aeTHAGDP <- abs(df$eTHAGDP)
df$aeVNMGDP <- abs(df$eVNMGDP)
df$aeIDNFDI <- abs(df$eIDNFDI)
df$aeTHAFDI <- abs(df$eTHAFDI)
df$aeVNMFDI <- abs(df$eVNMFDI)
df_ae <- df %>% select(starts_with("ae"))
print(df_ae)
## # A tibble: 21 × 6
## aeIDNGDP aeTHAGDP aeVNMGDP aeIDNFDI aeTHAFDI aeVNMFDI
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 NA NA NA NA NA NA
## 2 0.251 0.900 0.637 914993402. 1174217491. 160000000
## 3 0.662 2.10 0.0108 6783174438. 1880607113. 279000000
## 4 0.192 0.780 0.569 3082808741. 212509787. 426000000
## 5 0.844 0.467 0.152 64881533. 789823029. 4201000000
## 6 0.331 3.71 1.47 1165393399. 865028466. 2763000000
## 7 1.38 2.42 0.264 790475916. 5806680430. 2379000000
## 8 1.59 8.20 1.03 8478085652. 6200164360. 200000000
## 9 0.0541 6.67 0.0101 422061627. 11317426772. 620000000
## 10 0.140 6.40 0.909 2187831226. 3340548404. 688000000
## # ℹ 11 more rows
##mae summarize aeIDNGDP
summary(df$aeIDNGDP)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.03672 0.15119 0.29532 1.08883 0.97926 7.08480 1
summary(df$aeTHAGDP)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.04519 0.77076 2.10501 3.02586 5.01714 8.20401 1
summary(df$aeVNMGDP)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.01008 0.22552 0.54486 1.05788 0.93780 5.56979 1
summary(df$aeIDNFDI)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 6.488e+07 1.103e+09 2.823e+09 3.373e+09 5.571e+09 8.478e+09 1
summary(df$aeTHAFDI)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 2.125e+08 1.727e+09 4.642e+09 6.238e+09 8.504e+09 1.956e+10 1
summary(df$aeVNMFDI)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 7.900e+07 2.217e+08 7.105e+08 1.293e+09 2.110e+09 4.824e+09 1
##ape gen apeIDNGDP = abs(peIDNGDP)
df$apeIDNGDP <- abs(df$peIDNGDP)
df$apeTHAGDP <- abs(df$peTHAGDP)
df$apeVNMGDP <- abs(df$peVNMGDP)
df$apeIDNFDI <- abs(df$peIDNFDI)
df$apeTHAFDI <- abs(df$peTHAFDI)
df$apeVNMFDI <- abs(df$peVNMFDI)
df_ape <- df %>% select(starts_with("ape"))
print(df_ape)
## # A tibble: 21 × 6
## apeIDNGDP apeTHAGDP apeVNMGDP apeIDNFDI apeTHAFDI apeVNMFDI
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 NA NA NA NA NA NA
## 2 4.98 14.3 8.46 60.5 20.3 9.94
## 3 11.6 50.2 0.144 129. 24.5 14.8
## 4 3.48 15.7 8.16 141. 2.70 18.4
## 5 13.3 8.60 2.13 2.88 11.1 64.5
## 6 5.51 215. 25.9 34.1 13.9 29.8
## 7 29.9 350. 4.89 30.1 1399. 34.5
## 8 25.6 109. 16.0 76.3 93.7 2.82
## 9 0.876 794. 0.157 3.66 241. 9.57
## 10 2.32 88.4 16.5 16.0 245. 9.60
## # ℹ 11 more rows
##mape summarize apeIDNGDP
summary(df$apeIDNGDP)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.7242 2.9844 5.3231 33.1458 16.3839 343.0045 1
summary(df$apeTHAGDP)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 1.07 17.26 78.49 143.59 170.37 794.31 1
summary(df$apeVNMGDP)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.1436 3.2350 8.1217 20.9953 16.0990 156.8308 1
summary(df$apeIDNFDI)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 2.879 15.160 31.868 39.212 45.853 140.867 1
summary(df$apeTHAFDI)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 2.698 26.556 106.595 207.187 215.487 1398.595 1
summary(df$apeVNMFDI)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.515 4.323 9.768 14.908 19.816 64.472 1
##se gen seIDNGDP = eIDNGDP^2
df$seIDNGDP <- df$eIDNGDP^2
df$seTHAGDP <- df$eTHAGDP^2
df$seVNMGDP <- df$eVNMGDP^2
df$seIDNFDI <- df$eIDNFDI^2
df$seTHAFDI <- df$eTHAFDI^2
df$seVNMFDI <- df$eVNMFDI^2
df_se <- df %>% select(starts_with("se"))
print(df_se)
## # A tibble: 21 × 6
## seIDNGDP seTHAGDP seVNMGDP seIDNFDI seTHAFDI seVNMFDI
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 NA NA NA NA NA NA
## 2 0.0628 0.810 0.406 8.37e17 1.38e18 2.56e16
## 3 0.438 4.42 0.000117 4.60e19 3.54e18 7.78e16
## 4 0.0367 0.609 0.324 9.50e18 4.52e16 1.81e17
## 5 0.712 0.218 0.0230 4.21e15 6.24e17 1.76e19
## 6 0.110 13.8 2.15 1.36e18 7.48e17 7.63e18
## 7 1.92 5.84 0.0696 6.25e17 3.37e19 5.66e18
## 8 2.54 67.3 1.05 7.19e19 3.84e19 4 e16
## 9 0.00292 44.5 0.000102 1.78e17 1.28e20 3.84e17
## 10 0.0195 41.0 0.826 4.79e18 1.12e19 4.73e17
## # ℹ 11 more rows
##mse summarize seIDNGDP
summary(df$seIDNGDP)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.00135 0.02290 0.08851 4.62794 1.01378 50.19438 1
summary(df$seTHAGDP)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.00204 0.59434 4.43107 16.88401 25.81160 67.30576 1
summary(df$seVNMGDP)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.000102 0.052685 0.297278 3.357540 0.882033 31.022515 1
summary(df$seIDNFDI)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 4.210e+15 1.228e+18 8.037e+18 1.790e+19 3.110e+19 7.188e+19 1
summary(df$seTHAFDI)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 4.516e+16 3.052e+18 2.155e+19 7.108e+19 7.426e+19 3.827e+20 1
summary(df$seVNMFDI)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 6.241e+15 4.919e+16 5.053e+17 3.541e+18 4.475e+18 2.327e+19 1
#Dự báo ##Dự báo thô ###Dự báo thô điều chỉnh gen IDNGDP_tdc= IDNGDP[_n-1]+(IDNGDP[_n-1]-IDNGDP[_n-2])
df$IDNGDP_tdc <- dplyr::lag(df$IDNGDP, 1) + (dplyr::lag(df$IDNGDP, 1) - dplyr::lag(df$IDNGDP, 2))
df$THAGDP_tdc <- dplyr::lag(df$THAGDP, 1) + (dplyr::lag(df$THAGDP, 1) - dplyr::lag(df$THAGDP, 2))
df$VNMGDP_tdc <- dplyr::lag(df$VNMGDP, 1) + (dplyr::lag(df$VNMGDP, 1) - dplyr::lag(df$VNMGDP, 2))
df$IDNFDI_tdc <- dplyr::lag(df$IDNFDI, 1) + (dplyr::lag(df$IDNFDI, 1) - dplyr::lag(df$IDNFDI, 2))
df$THAFDI_tdc <- dplyr::lag(df$THAFDI, 1) + (dplyr::lag(df$THAFDI, 1) - dplyr::lag(df$THAFDI, 2))
df$VNMFDI_tdc <- dplyr::lag(df$VNMFDI, 1) + (dplyr::lag(df$VNMFDI, 1) - dplyr::lag(df$VNMFDI, 2))
df_tdc <- df %>% select(ends_with("_tdc"))
print(df_tdc)
## # A tibble: 21 × 6
## IDNGDP_tdc THAGDP_tdc VNMGDP_tdc IDNFDI_tdc THAFDI_tdc VNMFDI_tdc
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 NA NA NA NA NA NA
## 2 NA NA NA NA NA NA
## 3 5.28 5.39 8.17 2426910632. -6957812077. -1770000000
## 4 6.35 2.09 7.56 -12054431645. -9544808812. -2168000000
## 5 5.31 5.75 6.41 894360274. -8089221273. -2741000000
## 6 7.19 5.90 7.28 -2318211533. -6297065427. -10717000000
## 7 5.68 -1.98 4.19 -4584116797. -5356831525. -12042000000
## 8 3.24 -3.11 5.13 -1837771567. 5391500868. -4521000000
## 9 7.82 15.7 7.45 -19584418786. -12815508282. -7300000000
## 10 6.12 -5.83 6.40 -11950456389. 16019509622. -5860000000
## # ℹ 11 more rows
##Dự báo trung bình ###Dự báo trung bình giản đơn gen IDNGDP_tb= .
forvalues i = 1/=_N' { summarize IDNGDP in 1/i’ replace
IDNGDP_tb = r(mean) in `i’ } gen IDNGDP_tbgd= IDNGDP_tb[_n-1]
df$IDNGDP_tb <- NA
for (i in 1:nrow(df)) {
df$IDNGDP_tb[i] <- mean(df$IDNGDP[1:i], na.rm = TRUE)
}
df$IDNGDP_tbgd <- dplyr::lag(df$IDNGDP_tb, 1)
df$THAGDP_tb <- NA
for (i in 1:nrow(df)) {
df$THAGDP_tb[i] <- mean(df$THAGDP[1:i], na.rm = TRUE)
}
df$THAGDP_tbgd <- dplyr::lag(df$THAGDP_tb, 1)
df$VNMGDP_tb <- NA
for (i in 1:nrow(df)) {
df$VNMGDP_tb[i] <- mean(df$VNMGDP[1:i], na.rm = TRUE)
}
df$VNMGDP_tbgd <- dplyr::lag(df$VNMGDP_tb, 1)
df$IDNFDI_tb <- NA
for (i in 1:nrow(df)) {
df$IDNFDI_tb[i] <- mean(df$IDNFDI[1:i], na.rm = TRUE)
}
df$IDNFDI_tbgd <- dplyr::lag(df$IDNFDI_tb, 1)
df$THAFDI_tb <- NA
for (i in 1:nrow(df)) {
df$THAFDI_tb[i] <- mean(df$THAFDI[1:i], na.rm = TRUE)
}
df$THAFDI_tbgd <- dplyr::lag(df$THAFDI_tb, 1)
df$VNMFDI_tb <- NA
for (i in 1:nrow(df)) {
df$VNMFDI_tb[i] <- mean(df$VNMFDI[1:i], na.rm = TRUE)
}
df$VNMFDI_tbgd <- dplyr::lag(df$VNMFDI_tb, 1)
df_tbgd <- df %>% select(ends_with("_tbgd"))
print(df_tbgd)
## # A tibble: 21 × 6
## IDNGDP_tbgd THAGDP_tbgd VNMGDP_tbgd IDNFDI_tbgd THAFDI_tbgd VNMFDI_tbgd
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 NA NA NA NA NA NA
## 2 4.78 7.19 6.90 596923828. -4609377096. -1450000000
## 3 4.91 6.74 7.22 1054420529. -5196485841. -1530000000
## 4 5.17 5.89 7.33 -1054138717. -6019057794. -1649666667.
## 5 5.25 5.66 7.24 -1337716154. -6483471217. -1816000000
## 6 5.47 5.61 7.22 -1520838923. -6604154665. -2756000000
## 7 5.56 4.97 6.96 -1837153003. -6540438886. -3843166667.
## 8 5.43 4.16 6.74 -1950166500. -5665401840. -4279857143.
## 9 5.53 4.58 6.70 -3094687329. -5784144600. -4632375000
## 10 5.60 4.16 6.67 -4031765933. -4619008217. -4837666667.
## # ℹ 11 more rows
###Dự báo trung bình di động tsset YEAR tssmooth ma IDNGDP_tbdd = IDNGDP, window(5) list YEAR IDNGDP IDNGDP_tbdd
df$IDNGDP_tbdd <- zoo::rollapply(df$IDNGDP, width = 5, FUN = mean, align = "right", fill = NA)
df$THAGDP_tbdd <- zoo::rollapply(df$THAGDP, width = 5, FUN = mean, align = "right", fill = NA)
df$VNMGDP_tbdd <- zoo::rollapply(df$VNMGDP, width = 5, FUN = mean, align = "right", fill = NA)
df$IDNFDI_tbdd <- zoo::rollapply(df$IDNFDI, width = 5, FUN = mean, align = "right", fill = NA)
df$THAFDI_tbdd <- zoo::rollapply(df$THAFDI, width = 5, FUN = mean, align = "right", fill = NA)
df$VNMFDI_tbdd <- zoo::rollapply(df$VNMFDI, width = 5, FUN = mean, align = "right", fill = NA)
df_tbdd <- df %>% select(ends_with("_tbdd"))
print(df_tbdd)
## # A tibble: 21 × 6
## IDNGDP_tbdd THAGDP_tbdd VNMGDP_tbdd IDNFDI_tbdd THAFDI_tbdd VNMFDI_tbdd
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 NA NA NA NA NA NA
## 2 NA NA NA NA NA NA
## 3 NA NA NA NA NA NA
## 4 NA NA NA NA NA NA
## 5 5.47 5.61 7.22 -1520838923. -6604154665. -2756000000
## 6 5.72 4.52 6.97 -2323968369. -6926651244. -4321800000
## 7 5.64 3.13 6.54 -3152001311. -5852968239. -5379800000
## 8 5.74 3.79 6.32 -4319016497. -5643196683. -6422000000
## 9 5.88 2.96 6.21 -6187005756. -3127437816. -7255000000
## 10 5.81 3.33 5.88 -8479584953. -1437753236. -7385400000
## # ℹ 11 more rows
###Dự báo trung bình di động kép tssmooth ma IDNGDP_tbddk = IDNGDP_tbdd, window(5) list YEAR IDNGDP IDNGDP_tbdd IDNGDP_tbddk
df$IDNGDP_tbddk <- zoo::rollapply(df$IDNGDP_tbdd, width = 5, FUN = mean, align = "right", fill = NA)
df$THAGDP_tbddk <- zoo::rollapply(df$THAGDP_tbdd, width = 5, FUN = mean, align = "right", fill = NA)
df$VNMGDP_tbddk <- zoo::rollapply(df$VNMGDP_tbdd, width = 5, FUN = mean, align = "right", fill = NA)
df$IDNFDI_tbddk <- zoo::rollapply(df$IDNFDI_tbdd, width = 5, FUN = mean, align = "right", fill = NA)
df$THAFDI_tbddk <- zoo::rollapply(df$THAFDI_tbdd, width = 5, FUN = mean, align = "right", fill = NA)
df$VNMFDI_tbddk <- zoo::rollapply(df$VNMFDI_tbdd, width = 5, FUN = mean, align = "right", fill = NA)
df_tbddk <- df %>% select(ends_with("_tbddk"))
print(df_tbddk)
## # A tibble: 21 × 6
## IDNGDP_tbddk THAGDP_tbddk VNMGDP_tbddk IDNFDI_tbddk THAFDI_tbddk VNMFDI_tbddk
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 NA NA NA NA NA NA
## 2 NA NA NA NA NA NA
## 3 NA NA NA NA NA NA
## 4 NA NA NA NA NA NA
## 5 NA NA NA NA NA NA
## 6 NA NA NA NA NA NA
## 7 NA NA NA NA NA NA
## 8 NA NA NA NA NA NA
## 9 5.69 4.00 6.65 -3500566171. -5630881729. -5226920000
## 10 5.76 3.55 6.38 -4892315377. -4597601444. -6152800000
## # ℹ 11 more rows
##Dự báo san mũ ###Dự báo san mũ giản đơn tssmooth exponential IDNGDP_smgd = IDNGDP
df$IDNGDP_smgd <- forecast::ses(df$IDNGDP, h = 1)$fitted
df$THAGDP_smgd <- forecast::ses(df$THAGDP, h = 1)$fitted
df$VNMGDP_smgd <- forecast::ses(df$VNMGDP, h = 1)$fitted
df$IDNFDI_smgd <- forecast::ses(df$IDNFDI, h = 1)$fitted
df$THAFDI_smgd <- forecast::ses(df$THAFDI, h = 1)$fitted
df$VNMFDI_smgd <- forecast::ses(df$VNMFDI, h = 1)$fitted
df_smgd <- df %>% select(ends_with("_smgd"))
print(df_smgd)
## # A tibble: 21 × 6
## IDNGDP_smgd THAGDP_smgd VNMGDP_smgd IDNFDI_smgd THAFDI_smgd VNMFDI_smgd
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 5.29 4.45 6.26 -4500190742. -4020953954. -4563629999.
## 2 5.22 4.89 6.26 -1633017915. -4191771645. -1450311690.
## 3 5.19 5.11 6.26 136036413. -4653873660. -1609984014.
## 4 5.26 4.97 6.26 -2905614922. -5527763976. -1888972069.
## 5 5.30 4.97 6.26 -2502202336. -6209657263. -2314957352.
## 6 5.44 5.04 6.26 -2362209407. -6464315172. -6515579455.
## 7 5.52 4.51 6.26 -2956508037. -6393931071. -9278723368.
## 8 5.40 3.68 6.26 -2771858520. -4658315225. -6900238122.
## 9 5.51 4.29 6.26 -7460075513. -5226435511. -7099980003.
## 10 5.60 3.74 6.26 -9748541711. -2344212732. -6480062063.
## # ℹ 11 more rows
###Dự báo san mũ holt tssmooth hwinters IDNGDP_smh = IDNGDP
df$IDNGDP_smh <- forecast::holt(df$IDNGDP, h = 1)$fitted
df$THAGDP_smh <- forecast::holt(df$THAGDP, h = 1)$fitted
df$VNMGDP_smh <- forecast::holt(df$VNMGDP, h = 1)$fitted
df$IDNFDI_smh <- forecast::holt(df$IDNFDI, h = 1)$fitted
df$THAFDI_smh <- forecast::holt(df$THAFDI, h = 1)$fitted
df$VNMFDI_smh <- forecast::holt(df$VNMFDI, h = 1)$fitted
df_smh <- df %>% select(ends_with("_smh"))
print(df_smh)
## # A tibble: 21 × 6
## IDNGDP_smh THAGDP_smh VNMGDP_smh IDNFDI_smh THAFDI_smh VNMFDI_smh
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 6.58 5.52 7.10 2205170182. -7716119969. -1496395152.
## 2 6.43 5.28 7.02 594804728. -6712570788. -2272901025.
## 3 6.29 5.04 6.94 -562067288. -5721145928. -3049278947.
## 4 6.14 4.79 6.85 -3080483772. -4776470027. -3825491096.
## 5 5.99 4.55 6.77 -4743511557. -3873128838. -4601517169.
## 6 5.85 4.31 6.68 -5867964129. -3002091683. -5378077241.
## 7 5.70 4.07 6.60 -6675159714. -2162373105. -6155226080.
## 8 5.56 3.82 6.52 -6738766971. -1257467806. -6932133734.
## 9 5.41 3.58 6.43 -8486214896. -473563361. -7709000474.
## 10 5.26 3.34 6.35 -10459824312. 462859026. -8485604606.
## # ℹ 11 more rows
###Dự báo san mũ winters ####Mô hình cộng tính tssmooth shwinters IDNGDP_smw_ct = IDNGDP, period (5) additive
#df$IDNGDP_ts <- ts(df$IDNGDP, frequency = 5)
#df$THAGDP_ts <- ts(df$THAGDP, frequency = 5)
#df$VNMGDP_ts <- ts(df$VNMGDP, frequency = 5)
#df$IDNFDI_ts <- ts(df$IDNFDI, frequency = 5)
#df$THAFDI_ts <- ts(df$THAFDI, frequency = 5)
#df$VNMFDI_ts <- ts(df$VNMFDI, frequency = 5)
#df$IDNGDP_smw_ct <- forecast::hw(df$IDNGDP_ts, seasonal = "additive", h = 1)$fitted
#df$THAGDP_smw_ct <- forecast::hw(df$THAGDP_ts, seasonal = "additive", h = 1)$fitted
#df$VNMGDP_smw_ct <- forecast::hw(df$VNMGDP_ts, seasonal = "additive", h = 1)$fitted
#df$IDNFDI_smw_ct <- forecast::hw(df$IDNFDI_ts, seasonal = "additive", h = 1)$fitted
#df$THAFDI_smw_ct <- forecast::hw(df$THAFDI_ts, seasonal = "additive", h = 1)$fitted
#df$VNMFDI_smw_ct <- forecast::hw(df$VNMFDI_ts, seasonal = "additive", h = 1)$fitted
####Mô hình nhân tính tssmooth shwinters IDNGDP_smw_nt = IDNGDP, period (5) iterate(1000)
#df$IDNGDP_smw_nt <- forecast::hw(df$IDNGDP_ts, seasonal = "multiplicative", h = 1, opt.crit = "mse")$fitted
#df$THAGDP_smw_nt <- forecast::hw(df$THAGDP_ts, seasonal = "multiplicative", h = 1, opt.crit = "mse")$fitted
#df$VNMGDP_smw_nt <- forecast::hw(df$VNMGDP_ts, seasonal = "multiplicative", h = 1, opt.crit = "mse")$fitted
#df$IDNFDI_smw_nt <- forecast::hw(df$IDNFDI_ts, seasonal = "multiplicative", h = 1, opt.crit = "mse")$fitted
#df$THAFDI_smw_nt <- forecast::hw(df$THAFDI_ts, seasonal = "multiplicative", h = 1, opt.crit = "mse")$fitted
#df$VNMFDI_smw_nt <- forecast::hw(df$VNMFDI_ts, seasonal = "multiplicative", h = 1, opt.crit = "mse")$fitted
##Dự báo xu thế ###Dự báo bậc 1 gen t= YEAR regress IDNGDP t
df$time <- df$Year
df$time <- as.numeric(df$time)
model_1 <- lm(IDNGDP ~ time, data = df)
df$IDNGDP_xtb1 <- predict(model_1)
summary(model_1)
##
## Call:
## lm(formula = IDNGDP ~ time, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.2859 -0.1973 0.5266 0.7523 1.2982
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 217.46656 119.00258 1.827 0.0834 .
## time -0.10557 0.05912 -1.786 0.0901 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.64 on 19 degrees of freedom
## Multiple R-squared: 0.1437, Adjusted R-squared: 0.09865
## F-statistic: 3.189 on 1 and 19 DF, p-value: 0.09011
model_1 <- lm(THAGDP ~ time, data = df)
df$THAGDP_xtb1 <- predict(model_1)
summary(model_1)
##
## Call:
## lm(formula = THAGDP ~ time, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -7.4564 -0.8704 0.5104 1.5433 3.8888
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 493.16808 200.74713 2.457 0.0238 *
## time -0.24345 0.09972 -2.441 0.0246 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.767 on 19 degrees of freedom
## Multiple R-squared: 0.2388, Adjusted R-squared: 0.1987
## F-statistic: 5.959 on 1 and 19 DF, p-value: 0.0246
model_1 <- lm(VNMGDP ~ time, data = df)
df$VNMGDP_xtb1 <- predict(model_1)
summary(model_1)
##
## Call:
## lm(formula = VNMGDP ~ time, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.0582 -0.7083 0.1476 0.6719 2.5928
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 169.78137 100.09767 1.696 0.106
## time -0.08123 0.04973 -1.634 0.119
##
## Residual standard error: 1.38 on 19 degrees of freedom
## Multiple R-squared: 0.1232, Adjusted R-squared: 0.07701
## F-statistic: 2.669 on 1 and 19 DF, p-value: 0.1188
model_1 <- lm(IDNFDI ~ time, data = df)
df$IDNFDI_xtb1 <- predict(model_1)
summary(model_1)
##
## Call:
## lm(formula = IDNFDI ~ time, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.289e+09 -3.003e+09 1.069e+09 2.414e+09 5.334e+09
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.931e+12 2.326e+11 8.304 9.59e-08 ***
## time -9.646e+08 1.155e+08 -8.349 8.84e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.206e+09 on 19 degrees of freedom
## Multiple R-squared: 0.7858, Adjusted R-squared: 0.7745
## F-statistic: 69.7 on 1 and 19 DF, p-value: 8.84e-08
model_1 <- lm(THAFDI ~ time, data = df)
df$THAFDI_xtb1 <- predict(model_1)
summary(model_1)
##
## Call:
## lm(formula = THAFDI ~ time, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.139e+10 -2.579e+09 -1.044e+09 2.285e+09 1.750e+10
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.634e+12 4.257e+11 -3.838 0.00111 **
## time 8.119e+08 2.115e+08 3.839 0.00111 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.868e+09 on 19 degrees of freedom
## Multiple R-squared: 0.4369, Adjusted R-squared: 0.4072
## F-statistic: 14.74 on 1 and 19 DF, p-value: 0.001106
model_1 <- lm(VNMFDI ~ time, data = df)
df$VNMFDI_xtb1 <- predict(model_1)
summary(model_1)
##
## Call:
## lm(formula = VNMFDI ~ time, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.000e+09 -8.553e+08 3.330e+08 1.294e+09 2.494e+09
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.665e+12 1.194e+11 13.95 1.96e-11 ***
## time -8.317e+08 5.929e+07 -14.03 1.78e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.645e+09 on 19 degrees of freedom
## Multiple R-squared: 0.9119, Adjusted R-squared: 0.9073
## F-statistic: 196.8 on 1 and 19 DF, p-value: 1.779e-11
df_xtb1 <- df %>% select(ends_with("_xtb1"))
print(df_xtb1)
## # A tibble: 21 × 6
## IDNGDP_xtb1 THAGDP_xtb1 VNMGDP_xtb1 IDNFDI_xtb1 THAFDI_xtb1 VNMFDI_xtb1
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 6.01 5.54 7.07 -809124818. -7755198068. -1120636364.
## 2 5.91 5.30 6.99 -1773696073. -6943267135. -1952358442.
## 3 5.80 5.06 6.91 -2738267327. -6131336202. -2784080519.
## 4 5.70 4.81 6.83 -3702838582. -5319405270. -3615802597.
## 5 5.59 4.57 6.75 -4667409836. -4507474337. -4447524675.
## 6 5.49 4.33 6.67 -5631981091. -3695543404. -5279246753.
## 7 5.38 4.08 6.59 -6596552345. -2883612471. -6110968831.
## 8 5.28 3.84 6.51 -7561123600. -2071681539. -6942690909.
## 9 5.17 3.60 6.42 -8525694854. -1259750606. -7774412987.
## 10 5.06 3.35 6.34 -9490266109. -447819673. -8606135065.
## # ℹ 11 more rows
###Dự báo bậc 2 gen t2= t^2 regress IDNGDP t t2
df$time2 <- df$time^2
model_2 <- lm(IDNGDP ~ time + time2, data = df)
df$IDNGDP_xtb2 <- predict(model_2)
summary(model_2)
##
## Call:
## lm(formula = IDNGDP ~ time + time2, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.1604 -0.2042 0.2249 0.6663 1.7889
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -4.101e+04 4.455e+04 -0.921 0.369
## time 4.086e+01 4.426e+01 0.923 0.368
## time2 -1.017e-02 1.099e-02 -0.925 0.367
##
## Residual standard error: 1.647 on 18 degrees of freedom
## Multiple R-squared: 0.1826, Adjusted R-squared: 0.09179
## F-statistic: 2.011 on 2 and 18 DF, p-value: 0.1629
model_2 <- lm(THAGDP ~ time + time2, data = df)
df$THAGDP_xtb2 <- predict(model_2)
summary(model_2)
##
## Call:
## lm(formula = THAGDP ~ time + time2, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -7.5308 -1.0353 0.7075 1.2622 4.1040
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.494e+04 7.670e+04 0.325 0.749
## time -2.453e+01 7.621e+01 -0.322 0.751
## time2 6.033e-03 1.893e-02 0.319 0.754
##
## Residual standard error: 2.835 on 18 degrees of freedom
## Multiple R-squared: 0.243, Adjusted R-squared: 0.1589
## F-statistic: 2.89 on 2 and 18 DF, p-value: 0.0816
model_2 <- lm(VNMGDP ~ time + time2, data = df)
df$VNMGDP_xtb2 <- predict(model_2)
summary(model_2)
##
## Call:
## lm(formula = VNMGDP ~ time + time2, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.0593 -0.7067 0.1470 0.6731 2.5910
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.407e+02 3.835e+04 0.009 0.993
## time -2.510e-01 3.811e+01 -0.007 0.995
## time2 4.217e-05 9.465e-03 0.004 0.996
##
## Residual standard error: 1.418 on 18 degrees of freedom
## Multiple R-squared: 0.1232, Adjusted R-squared: 0.02573
## F-statistic: 1.264 on 2 and 18 DF, p-value: 0.3064
model_2 <- lm(IDNFDI ~ time + time2, data = df)
df$IDNFDI_xtb2 <- predict(model_2)
summary(model_2)
##
## Call:
## lm(formula = IDNFDI ~ time + time2, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.255e+09 -1.782e+09 -4.910e+08 2.443e+09 5.009e+09
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.059e+14 7.503e+13 2.745 0.0133 *
## time -2.036e+11 7.454e+10 -2.732 0.0137 *
## time2 5.034e+07 1.852e+07 2.719 0.0141 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.773e+09 on 18 degrees of freedom
## Multiple R-squared: 0.8482, Adjusted R-squared: 0.8313
## F-statistic: 50.27 on 2 and 18 DF, p-value: 4.29e-08
model_2 <- lm(THAFDI ~ time + time2, data = df)
df$THAFDI_xtb2 <- predict(model_2)
summary(model_2)
##
## Call:
## lm(formula = THAFDI ~ time + time2, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.081e+10 -2.588e+09 -8.785e+08 2.013e+09 1.766e+10
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -5.489e+13 1.626e+14 -0.338 0.740
## time 5.373e+10 1.616e+11 0.332 0.743
## time2 -1.314e+07 4.014e+07 -0.327 0.747
##
## Residual standard error: 6.011e+09 on 18 degrees of freedom
## Multiple R-squared: 0.4402, Adjusted R-squared: 0.378
## F-statistic: 7.077 on 2 and 18 DF, p-value: 0.005399
model_2 <- lm(VNMFDI ~ time + time2, data = df)
df$VNMFDI_xtb2 <- predict(model_2)
summary(model_2)
##
## Call:
## lm(formula = VNMFDI ~ time + time2, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.104e+09 -1.040e+09 1.089e+08 1.119e+09 2.166e+09
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3.461e+13 4.493e+13 -0.770 0.451
## time 3.521e+10 4.464e+10 0.789 0.440
## time2 -8.952e+06 1.109e+07 -0.807 0.430
##
## Residual standard error: 1.661e+09 on 18 degrees of freedom
## Multiple R-squared: 0.915, Adjusted R-squared: 0.9056
## F-statistic: 96.91 on 2 and 18 DF, p-value: 2.311e-10
df_xtb2 <- df %>% select(ends_with("_xtb2"))
print(df_xtb2)
## # A tibble: 21 × 6
## IDNGDP_xtb2 THAGDP_xtb2 VNMGDP_xtb2 IDNFDI_xtb2 THAFDI_xtb2 VNMFDI_xtb2
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 5.37 5.93 7.08 2379222511. -8587614919. -1687604178.
## 2 5.46 5.57 6.99 458147058 -7525958931. -2349235912.
## 3 5.53 5.22 6.91 -1362243743. -6490589791. -3028771892.
## 4 5.57 4.89 6.83 -3081949891. -5481507499. -3726212119.
## 5 5.60 4.57 6.75 -4700971387. -4498712054. -4441556593.
## 6 5.61 4.26 6.67 -6219308230. -3542203458. -5174805314.
## 7 5.59 3.96 6.59 -7636960421. -2611981709. -5925958281.
## 8 5.56 3.67 6.50 -8953927960. -1708046809. -6695015495.
## 9 5.50 3.40 6.42 -10170210845. -830398756. -7481976956.
## 10 5.43 3.14 6.34 -11285809079. 20962449. -8286842664.
## # ℹ 11 more rows
###Dữ báo hàm mũ gen log_IDNGDP = log(IDNGDP) regress log_IDNGDP t predict log_IDNGDP_xtm gen IDNGDP_xtm = exp(log_IDNGDP_xtm)
#df$log_IDNGDP <- log(df$IDNGDP)
#model_exp <- lm(log_IDNGDP ~ time, data = df)
#df$log_IDNGDP_xtm <- predict(model_exp)
#df$IDNGDP_xtm <- exp(df$log_IDNGDP_xtm)
#df$log_THAGDP <- log(df$THAGDP)
#model_exp <- lm(log_THAGDP ~ time, data = df)
#df$log_THAGDP_xtm <- predict(model_exp)
#df$THAGDP_xtm <- exp(df$log_THAGDP_xtm)
#df$log_VNMGDP <- log(df$VNMGDP)
#model_exp <- lm(log_VNMGDP ~ time, data = df)
#df$log_VNMGDP_xtm <- predict(model_exp)
#df$VNMGDP_xtm <- exp(df$log_VNMGDP_xtm)
#df$log_IDNFDI <- log(df$IDNFDI)
#model_exp <- lm(log_IDNFDI ~ time, data = df)
#df$log_IDNFDI_xtm <- predict(model_exp)
#df$IDNFDI_xtm <- exp(df$log_IDNFDI_xtm)
#df$log_THAFDI <- log(df$THAFDI)
#model_exp <- lm(log_THAFDI ~ time, data = df)
#df$log_THAFDI_xtm <- predict(model_exp)
#df$THAFDI_xtm <- exp(df$log_THAFDI_xtm)
#df$log_VNMFDI <- log(df$VNMFDI)
#model_exp <- lm(log_VNMFDI ~ time, data = df)
#df$log_VNMFDI_xtm <- predict(model_exp)
#df$VNMFDI_xtm <- exp(df$log_VNMFDI_xtm)
#Lựa chọn mô hình ARIMA ##IDNGDP
df$IDNGDP_ts <- ts(df$IDNGDP, frequency = 1)
adf_result <- adf.test(df$IDNGDP_ts)
print(adf_result)
##
## Augmented Dickey-Fuller Test
##
## data: df$IDNGDP_ts
## Dickey-Fuller = -3.0534, Lag order = 2, p-value = 0.1711
## alternative hypothesis: stationary
acf(df$IDNGDP_ts, main = "ACF of IDNGDP")
pacf(df$IDNGDP_ts, main = "PACF of IDNGDP")
best_aic <- Inf
best_model <- NULL
d <- ifelse(adf_result$p.value > 0.05, 1, 0)
max_p <- 5
max_q <- 5
for (p in 0:max_p) {
for (q in 0:max_q) {
model <- tryCatch(
arima(df$IDNGDP_ts, order = c(p, d, q)),
error = function(e) NULL
)
if (!is.null(model)) {
current_aic <- AIC(model)
if (current_aic < best_aic) {
best_aic <- current_aic
best_model <- model
best_p <- p
best_q <- q
}
}
}
}
## Warning in arima(df$IDNGDP_ts, order = c(p, d, q)): possible convergence
## problem: optim gave code = 1
## Warning in log(s2): NaNs produced
## Warning in log(s2): NaNs produced
cat("Best model: ARIMA IDNGDP (", best_p, ",", d, ",", best_q, ") with AIC =", best_aic, "\n")
## Best model: ARIMA IDNGDP ( 0 , 1 , 1 ) with AIC = 84.37513
ARIMA_IDNGDP <- arima(df$IDNGDP_ts, order = c(best_p, d, best_q))
summary(ARIMA_IDNGDP)
##
## Call:
## arima(x = df$IDNGDP_ts, order = c(best_p, d, best_q))
##
## Coefficients:
## ma1
## -0.7879
## s.e. 0.1641
##
## sigma^2 estimated as 3.103: log likelihood = -40.19, aic = 84.38
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.1921439 1.719103 0.8590723 19.03652 26.31972 0.7889875
## ACF1
## Training set 0.06182623
##THAGDP
df$THAGDP_ts <- ts(df$THAGDP, frequency = 1)
adf_result <- adf.test(df$THAGDP_ts)
print(adf_result)
##
## Augmented Dickey-Fuller Test
##
## data: df$THAGDP_ts
## Dickey-Fuller = -3.1729, Lag order = 2, p-value = 0.1256
## alternative hypothesis: stationary
acf(df$THAGDP_ts, main = "ACF of THAGDP")
pacf(df$THAGDP_ts, main = "PACF of THAGDP")
best_aic <- Inf
best_model <- NULL
d <- ifelse(adf_result$p.value > 0.05, 1, 0)
max_p <- 5
max_q <- 5
for (p in 0:max_p) {
for (q in 0:max_q) {
model <- tryCatch(
arima(df$THAGDP_ts, order = c(p, d, q)),
error = function(e) NULL
)
if (!is.null(model)) {
current_aic <- AIC(model)
if (current_aic < best_aic) {
best_aic <- current_aic
best_model <- model
best_p <- p
best_q <- q
}
}
}
}
## Warning in log(s2): NaNs produced
## Warning in arima(df$THAGDP_ts, order = c(p, d, q)): possible convergence
## problem: optim gave code = 1
## Warning in arima(df$THAGDP_ts, order = c(p, d, q)): possible convergence
## problem: optim gave code = 1
## Warning in log(s2): NaNs produced
## Warning in log(s2): NaNs produced
## Warning in log(s2): NaNs produced
cat("Best model: ARIMA THAGDP (", best_p, ",", d, ",", best_q, ") with AIC =", best_aic, "\n")
## Best model: ARIMA THAGDP ( 0 , 1 , 1 ) with AIC = 107.2436
ARIMA_THAGDP <- arima(df$THAGDP_ts, order = c(best_p, d, best_q))
summary(ARIMA_THAGDP)
##
## Call:
## arima(x = df$THAGDP_ts, order = c(best_p, d, best_q))
##
## Coefficients:
## ma1
## -0.7928
## s.e. 0.1401
##
## sigma^2 estimated as 9.726: log likelihood = -51.62, aic = 107.24
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -1.017246 3.043483 2.048123 -1.649663 108.8611 0.6768727
## ACF1
## Training set -0.2024736
##VNMGDP
df$VNMGDP_ts <- ts(df$VNMGDP, frequency = 1)
adf_result <- adf.test(df$VNMGDP_ts)
print(adf_result)
##
## Augmented Dickey-Fuller Test
##
## data: df$VNMGDP_ts
## Dickey-Fuller = -0.911, Lag order = 2, p-value = 0.9337
## alternative hypothesis: stationary
acf(df$VNMGDP_ts, main = "ACF of VNMGDP")
pacf(df$VNMGDP_ts, main = "PACF of VNMGDP")
best_aic <- Inf
best_model <- NULL
d <- ifelse(adf_result$p.value > 0.05, 1, 0)
max_p <- 5
max_q <- 5
for (p in 0:max_p) {
for (q in 0:max_q) {
model <- tryCatch(
arima(df$VNMGDP_ts, order = c(p, d, q)),
error = function(e) NULL
)
if (!is.null(model)) {
current_aic <- AIC(model)
if (current_aic < best_aic) {
best_aic <- current_aic
best_model <- model
best_p <- p
best_q <- q
}
}
}
}
cat("Best model: ARIMA VNMGDP (", best_p, ",", d, ",", best_q, ") with AIC =", best_aic, "\n")
## Best model: ARIMA VNMGDP ( 0 , 1 , 3 ) with AIC = 76.17927
ARIMA_VNMGDP <- arima(df$VNMGDP_ts, order = c(best_p, d, best_q))
summary(ARIMA_VNMGDP)
##
## Call:
## arima(x = df$VNMGDP_ts, order = c(best_p, d, best_q))
##
## Coefficients:
## ma1 ma2 ma3
## -0.2639 -0.8804 0.3834
## s.e. 0.2691 0.2202 0.2044
##
## sigma^2 estimated as 1.502: log likelihood = -34.09, aic = 76.18
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.3106412 1.196035 0.7815503 -11.16749 17.47157 0.7387898
## ACF1
## Training set -0.06238309
##IDNFDI
df$IDNFDI_ts <- ts(df$IDNFDI, frequency = 1)
adf_result <- adf.test(df$IDNFDI_ts)
print(adf_result)
##
## Augmented Dickey-Fuller Test
##
## data: df$IDNFDI_ts
## Dickey-Fuller = -0.88688, Lag order = 2, p-value = 0.9372
## alternative hypothesis: stationary
acf(df$IDNFDI_ts, main = "ACF of IDNFDI")
pacf(df$IDNFDI_ts, main = "PACF of IDNFDI")
best_aic <- Inf
best_model <- NULL
d <- ifelse(adf_result$p.value > 0.05, 1, 0)
max_p <- 5
max_q <- 5
for (p in 0:max_p) {
for (q in 0:max_q) {
model <- tryCatch(
arima(df$IDNFDI_ts, order = c(p, d, q)),
error = function(e) NULL
)
if (!is.null(model)) {
current_aic <- AIC(model)
if (current_aic < best_aic) {
best_aic <- current_aic
best_model <- model
best_p <- p
best_q <- q
}
}
}
}
## Warning in log(s2): NaNs produced
## Warning in log(s2): NaNs produced
cat("Best model: ARIMA IDNFDI (", best_p, ",", d, ",", best_q, ") with AIC =", best_aic, "\n")
## Best model: ARIMA IDNFDI ( 0 , 1 , 5 ) with AIC = 938.8406
ARIMA_IDNFDI <- arima(df$IDNFDI_ts, order = c(best_p, d, best_q))
summary(ARIMA_IDNFDI)
##
## Call:
## arima(x = df$IDNFDI_ts, order = c(best_p, d, best_q))
##
## Coefficients:
## ma1 ma2 ma3 ma4 ma5
## -0.5911 0.2143 0.2141 -0.5910 0.9998
## s.e. 0.5002 0.3460 0.3519 0.3648 0.5663
##
## sigma^2 estimated as 5.163e+18: log likelihood = -463.42, aic = 938.84
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -655105959 2217569334 1664230496 9.943856 20.89561 0.4934587
## ACF1
## Training set -0.1071258
##THAFDI
df$THAFDI_ts <- ts(df$THAFDI, frequency = 1)
adf_result <- adf.test(df$THAFDI_ts)
print(adf_result)
##
## Augmented Dickey-Fuller Test
##
## data: df$THAFDI_ts
## Dickey-Fuller = -3.6337, Lag order = 2, p-value = 0.04759
## alternative hypothesis: stationary
acf(df$THAFDI_ts, main = "ACF of THAFDI")
pacf(df$THAFDI_ts, main = "PACF of THAFDI")
best_aic <- Inf
best_model <- NULL
d <- ifelse(adf_result$p.value > 0.05, 1, 0)
max_p <- 5
max_q <- 5
for (p in 0:max_p) {
for (q in 0:max_q) {
model <- tryCatch(
arima(df$THAFDI_ts, order = c(p, d, q)),
error = function(e) NULL
)
if (!is.null(model)) {
current_aic <- AIC(model)
if (current_aic < best_aic) {
best_aic <- current_aic
best_model <- model
best_p <- p
best_q <- q
}
}
}
}
cat("Best model: ARIMA THAFDI (", best_p, ",", d, ",", best_q, ") with AIC =", best_aic, "\n")
## Best model: ARIMA THAFDI ( 0 , 0 , 5 ) with AIC = Inf
#ARIMA_THAFDI <- arima(df$THAFDI_ts, order = c(best_p, d, best_q))
#summary(ARIMA_THAFDI)
##VNMFDI
df$VNMFDI_ts <- ts(df$VNMFDI, frequency = 1)
adf_result <- adf.test(df$VNMFDI_ts)
print(adf_result)
##
## Augmented Dickey-Fuller Test
##
## data: df$VNMFDI_ts
## Dickey-Fuller = -2.3438, Lag order = 2, p-value = 0.4414
## alternative hypothesis: stationary
acf(df$VNMFDI_ts, main = "ACF of VNMFDI")
pacf(df$VNMFDI_ts, main = "PACF of VNMFDI")
best_aic <- Inf
best_model <- NULL
d <- ifelse(adf_result$p.value > 0.05, 1, 0)
max_p <- 5
max_q <- 5
for (p in 0:max_p) {
for (q in 0:max_q) {
model <- tryCatch(
arima(df$VNMFDI_ts, order = c(p, d, q)),
error = function(e) NULL
)
if (!is.null(model)) {
current_aic <- AIC(model)
if (current_aic < best_aic) {
best_aic <- current_aic
best_model <- model
best_p <- p
best_q <- q
}
}
}
}
cat("Best model: ARIMA VNMFDI (", best_p, ",", d, ",", best_q, ") with AIC =", best_aic, "\n")
## Best model: ARIMA VNMFDI ( 0 , 1 , 0 ) with AIC = 912.9788
ARIMA_VNMFDI <- arima(df$VNMFDI_ts, order = c(best_p, d, best_q))
summary(ARIMA_VNMFDI)
##
## Call:
## arima(x = df$VNMFDI_ts, order = c(best_p, d, best_q))
##
##
## sigma^2 estimated as 3.541e+18: log likelihood = -455.49, aic = 912.98
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -885783333 1836516709 1231688095 9.446814 14.20267 0.9524343
## ACF1
## Training set 0.04690036