#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