PERBANDINGAN ARIMAX DAN ARDL PADA DATA IHSG PERIODE APRIL 2020-NOVEMBER 2023 MENGGUNAKAN PEUBAH EKSOGEN KURS DOLAR

DIVA NISFU MUSTIKA

2023-12-02

1. Packages dan Data

knitr::opts_chunk$set(dev = "png",
                      dpi = 300,
                      echo = TRUE,
                      cache = TRUE)
library(readxl)
library(TTR)
## Warning: package 'TTR' was built under R version 4.3.1
library(forecast)
## Warning: package 'forecast' was built under R version 4.3.1
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(tseries)
## Warning: package 'tseries' was built under R version 4.3.1
library(TSA)
## Warning: package 'TSA' was built under R version 4.3.1
## Registered S3 methods overwritten by 'TSA':
##   method       from    
##   fitted.Arima forecast
##   plot.Arima   forecast
## 
## Attaching package: 'TSA'
## The following objects are masked from 'package:stats':
## 
##     acf, arima
## The following object is masked from 'package:utils':
## 
##     tar
library(dynlm)
## Warning: package 'dynlm' was built under R version 4.3.1
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(lmtest)
library(imputeTS)
## Warning: package 'imputeTS' was built under R version 4.3.1
## 
## Attaching package: 'imputeTS'
## The following object is masked from 'package:zoo':
## 
##     na.locf
## The following object is masked from 'package:tseries':
## 
##     na.remove
library(stats)
library(MASS)
## Warning: package 'MASS' was built under R version 4.3.1
library(padr)
## Warning: package 'padr' was built under R version 4.3.2
library(astsa)
## Warning: package 'astsa' was built under R version 4.3.1
## 
## Attaching package: 'astsa'
## The following object is masked from 'package:forecast':
## 
##     gas
library(tfarima)
## Warning: package 'tfarima' was built under R version 4.3.2
## 
## Attaching package: 'tfarima'
## The following object is masked from 'package:TSA':
## 
##     spec
## The following objects are masked from 'package:forecast':
## 
##     easter, seasadj
library(FinTS)
## Warning: package 'FinTS' was built under R version 4.3.2
## 
## Attaching package: 'FinTS'
## The following object is masked from 'package:forecast':
## 
##     Acf
library(rio)
## Warning: package 'rio' was built under R version 4.3.1
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.2
library(tsibble)
## Warning: package 'tsibble' was built under R version 4.3.1
## 
## Attaching package: 'tsibble'
## The following object is masked from 'package:zoo':
## 
##     index
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, union
library(tseries)
library(MASS)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:MASS':
## 
##     select
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(TTR)
library(forecast)
library(lmtest)
library(orcutt)
## Warning: package 'orcutt' was built under R version 4.3.1
library(HoRM)
## Warning: package 'HoRM' was built under R version 4.3.1
library(dLagM)
## Warning: package 'dLagM' was built under R version 4.3.1
## Loading required package: nardl
## Warning: package 'nardl' was built under R version 4.3.1
## 
## Attaching package: 'nardl'
## The following object is masked from 'package:FinTS':
## 
##     ArchTest
## 
## Attaching package: 'dLagM'
## The following object is masked from 'package:forecast':
## 
##     forecast
library(dynlm)
library(MLmetrics)
## Warning: package 'MLmetrics' was built under R version 4.3.1
## 
## Attaching package: 'MLmetrics'
## The following object is masked from 'package:dLagM':
## 
##     MAPE
## The following object is masked from 'package:base':
## 
##     Recall
library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
## The following object is masked from 'package:tfarima':
## 
##     S
library(TSA)
library(aTSA)
## 
## Attaching package: 'aTSA'
## The following object is masked from 'package:dLagM':
## 
##     forecast
## The following objects are masked from 'package:tseries':
## 
##     adf.test, kpss.test, pp.test
## The following object is masked from 'package:forecast':
## 
##     forecast
## The following object is masked from 'package:graphics':
## 
##     identify
library(urca)
## Warning: package 'urca' was built under R version 4.3.1
library(rugarch)
## Warning: package 'rugarch' was built under R version 4.3.2
## Loading required package: parallel
## 
## Attaching package: 'rugarch'
## The following object is masked from 'package:stats':
## 
##     sigma

1.1 Data Indeks Harga Saham Gabungan

data <- import("https://raw.githubusercontent.com/divanm/mpdw/main/Data/data%20fix.csv")
data
##           Date        Open        High         Low       Close   Adj Close
## 1   2020-04-06 4623.429199 4975.536133 4562.901855 4649.079102 4649.079102
## 2   2020-04-13 4649.079102 4747.725098 4480.606934 4634.820801 4634.820801
## 3   2020-04-20 4634.820801 4669.541992 4441.089844 4496.063965 4496.063965
## 4   2020-04-27 4496.063965 4726.773926 4474.893066 4716.402832 4716.402832
## 5   2020-05-04 4716.402832 4716.402832 4576.228027 4597.430176 4597.430176
## 6   2020-05-11 4597.430176 4659.861816 4460.272949 4507.606934 4507.606934
## 7   2020-05-18 4507.606934 4609.041992 4487.179199 4545.952148 4545.952148
## 8   2020-05-25 4545.952148 4755.957031 4541.833984 4753.611816 4753.611816
## 9   2020-06-01 4753.611816 5014.764160 4753.611816 4947.782227 4947.782227
## 10  2020-06-08 4947.782227 5139.405762 4712.073242 4880.358887 4880.358887
## 11  2020-06-15 4880.358887 5018.984863 4809.619141 4942.274902 4942.274902
## 12  2020-06-22 4942.274902 4977.650879 4879.132813 4904.087891 4904.087891
## 13  2020-06-29 4904.087891 4997.481934 4862.041016 4973.793945 4973.793945
## 14  2020-07-06 4973.793945 5111.563965 4973.490234 5031.255859 5031.255859
## 15  2020-07-13 5031.255859 5116.463867 5024.934082 5079.584961 5079.584961
## 16  2020-07-20 5079.584961 5162.979980 5031.888184 5082.991211 5082.991211
## 17  2020-07-27 5082.991211 5149.629883 5080.121094 5149.626953 5149.626953
## 18  2020-08-03 5149.626953 5187.963867 4928.467773 5143.893066 5143.893066
## 19  2020-08-10 5157.833984 5279.349121 5157.833984 5247.689941 5247.689941
## 20  2020-08-17 5247.689941 5327.315918 5243.995117 5272.810059 5272.810059
## 21  2020-08-24 5272.810059 5381.948242 5261.408203 5346.659180 5346.659180
## 22  2020-08-31 5346.659180 5369.446777 5188.608887 5239.851074 5239.851074
## 23  2020-09-07 5235.009766 5256.305176 4754.798828 5016.711914 5016.711914
## 24  2020-09-14 5060.023926 5187.278809 5013.186035 5059.223145 5059.223145
## 25  2020-09-21 5058.990234 5075.818848 4820.331055 4945.791016 4945.791016
## 26  2020-09-28 4962.953125 4991.762207 4841.361816 4926.733887 4926.733887
## 27  2020-10-05 4947.040039 5057.835938 4915.685059 5053.663086 5053.663086
## 28  2020-10-12 5078.128906 5182.530762 5064.170898 5103.414063 5103.414063
## 29  2020-10-19 5116.757813 5135.078125 5063.696777 5112.187988 5112.187988
## 30  2020-10-26 5113.148926 5158.265137 5110.618164 5128.225098 5128.225098
## 31  2020-11-02 5108.028809 5335.528809 5073.500000 5335.528809 5335.528809
## 32  2020-11-09 5371.971191 5520.908203 5319.419922 5461.058105 5461.058105
## 33  2020-11-16 5500.034180 5628.441895 5462.459961 5571.655762 5571.655762
## 34  2020-11-23 5583.330078 5795.835938 5583.330078 5783.334961 5783.334961
## 35  2020-11-30 5779.670898 5853.155762 5563.861816 5810.482910 5810.482910
## 36  2020-12-07 5854.303223 6004.422852 5854.303223 5938.329102 5938.329102
## 37  2020-12-14 5959.274902 6160.977051 5959.274902 6104.324219 6104.324219
## 38  2020-12-21 6131.623047 6195.153809 5853.261230 6008.708984 6008.708984
## 39  2020-12-28 6067.000000 6143.870117 5962.009766 5979.073242 5979.073242
## 40  2021-01-04 5997.830078 6275.742188 5929.047852 6257.834961 6257.834961
## 41  2021-01-11 6278.413086 6472.312012 6278.374023 6373.412109 6373.412109
## 42  2021-01-18 6365.025879 6504.992188 6283.312988 6307.126953 6307.126953
## 43  2021-01-25 6322.519043 6322.727051 5825.291992 5862.352051 5862.352051
## 44  2021-02-01 5856.776855 6179.368164 5735.469238 6151.729004 6151.729004
## 45  2021-02-08 6193.550781 6286.291016 6157.134766 6222.520996 6222.520996
## 46  2021-02-15 6244.384766 6314.555176 6173.594238 6231.932129 6231.932129
## 47  2021-02-22 6267.024902 6312.873047 6184.517090 6241.795898 6241.795898
## 48  2021-03-01 6281.856934 6394.452148 6245.308105 6258.749023 6258.749023
## 49  2021-03-08 6304.000000 6364.356934 6167.717773 6358.208984 6358.208984
## 50  2021-03-15 6374.762207 6387.735840 6268.838867 6356.160156 6356.160156
## 51  2021-03-22 6346.794922 6354.938965 6058.842773 6195.562012 6195.562012
## 52  2021-03-29 6205.568848 6230.990234 5892.645020 6011.456055 6011.456055
## 53  2021-04-05 6040.055176 6113.155762 5944.420898 6070.208984 6070.208984
## 54  2021-04-12 6080.791992 6115.620117 5883.523926 6086.257813 6086.257813
## 55  2021-04-19 6084.785156 6096.995117 5973.247070 6016.863770 6016.863770
## 56  2021-04-26 6018.339844 6033.899902 5950.868164 5995.616211 5995.616211
## 57  2021-05-03 5999.661133 6005.087891 5922.493164 5928.309082 5928.309082
## 58  2021-05-10 5942.105957 5985.372070 5911.375977 5938.351074 5938.351074
## 59  2021-05-17 5950.137207 5958.792969 5742.038086 5773.120117 5773.120117
## 60  2021-05-24 5793.066895 5904.837891 5759.339844 5848.616211 5848.616211
## 61  2021-05-31 5869.217773 6103.858887 5860.536133 6065.166016 6065.166016
## 62  2021-06-07 6075.506836 6134.881836 5972.449219 6095.497070 6095.497070
## 63  2021-06-14 6110.796875 6124.872070 5944.053223 6007.120117 6007.120117
## 64  2021-06-21 5959.964844 6130.096191 5884.917969 6022.398926 6022.398926
## 65  2021-06-28 6015.278809 6043.432129 5913.590820 6023.007813 6023.007813
## 66  2021-07-05 6024.165039 6080.222168 5985.354004 6039.844238 6039.844238
## 67  2021-07-12 6060.054199 6114.286133 5947.618164 6072.509766 6072.509766
## 68  2021-07-19 6062.965820 6166.305176 6015.148926 6101.689941 6101.689941
## 69  2021-07-26 6109.030762 6160.462891 6068.512207 6070.039063 6070.039063
## 70  2021-08-02 6098.007813 6263.539063 6048.101074 6203.431152 6203.431152
## 71  2021-08-09 6203.747070 6239.015137 6042.475098 6139.492188 6139.492188
## 72  2021-08-16 6144.942871 6147.304199 5938.407227 6030.771973 6030.771973
## 73  2021-08-23 6037.700195 6138.497070 6021.954102 6041.366211 6041.366211
## 74  2021-08-30 6062.112793 6169.056152 6054.280762 6126.920898 6126.920898
## 75  2021-09-06 6137.125977 6150.357910 5982.766113 6094.873047 6094.873047
## 76  2021-09-13 6080.062012 6137.668945 6052.970215 6133.246094 6133.246094
## 77  2021-09-20 6132.034180 6163.883789 5996.407227 6144.814941 6144.814941
## 78  2021-09-27 6141.470215 6286.942871 6086.263184 6228.845215 6228.845215
## 79  2021-10-04 6234.798828 6497.655762 6234.798828 6481.769043 6481.769043
## 80  2021-10-11 6482.957031 6680.008789 6451.678223 6633.337891 6633.337891
## 81  2021-10-18 6649.280762 6687.133789 6585.557129 6643.737793 6643.737793
## 82  2021-10-25 6626.367188 6680.117188 6509.877930 6591.346191 6591.346191
## 83  2021-11-01 6618.122070 6627.851074 6480.009766 6581.785156 6581.785156
## 84  2021-11-08 6599.404785 6714.158203 6592.055176 6651.054199 6651.054199
## 85  2021-11-15 6661.849121 6720.987793 6592.228027 6720.263184 6720.263184
## 86  2021-11-22 6731.515137 6754.463867 6544.895996 6561.553223 6561.553223
## 87  2021-11-29 6552.803223 6647.477051 6484.578125 6538.505859 6538.505859
## 88  2021-12-06 6552.815918 6652.921875 6525.984863 6652.921875 6652.921875
## 89  2021-12-13 6663.738770 6688.378906 6559.303223 6601.932129 6601.932129
## 90  2021-12-20 6571.345215 6592.166992 6529.592773 6562.899902 6562.899902
## 91  2021-12-27 6570.558105 6621.579102 6562.554199 6581.481934 6581.481934
## 92  2022-01-03 6586.259766 6738.109863 6586.132813 6701.315918 6701.315918
## 93  2022-01-10 6697.375977 6727.767090 6625.756836 6693.400879 6693.400879
## 94  2022-01-17 6711.405762 6726.373047 6534.270020 6726.373047 6726.373047
## 95  2022-01-24 6700.821777 6712.262207 6523.929199 6645.511230 6645.511230
## 96  2022-01-31 6656.707031 6731.391113 6626.655762 6731.391113 6731.391113
## 97  2022-02-07 6751.349121 6874.351074 6748.909180 6815.606934 6815.606934
## 98  2022-02-14 6791.315918 6899.410156 6698.508789 6892.817871 6892.817871
## 99  2022-02-21 6896.751953 6929.911133 6758.860840 6888.170898 6888.170898
## 100 2022-02-28 6964.696777 6996.935059 6861.958984 6928.328125 6928.328125
## 101 2022-03-07 6905.324219 6929.862793 6814.183105 6922.602051 6922.602051
## 102 2022-03-14 6949.206055 7032.702148 6894.920898 6954.964844 6954.964844
## 103 2022-03-21 6945.893066 7055.340820 6929.934082 7002.532227 7002.532227
## 104 2022-03-28 6996.317871 7099.497070 6987.223145 7078.759766 7078.759766
## 105 2022-04-04 7082.247070 7216.494141 7060.213867 7210.834961 7210.834961
## 106 2022-04-11 7212.002930 7355.299805 7146.585938 7235.532227 7235.532227
## 107 2022-04-18 7245.503906 7297.394043 7174.810059 7225.605957 7225.605957
## 108 2022-04-25 7204.161133 7267.111816 7121.859863 7228.914063 7228.914063
## 109 2022-05-02        null        null        null        null        null
## 110 2022-05-09 7154.916992 7156.483887 6509.878906 6597.993164 6597.993164
## 111 2022-05-16 6603.893066 6965.105957 6574.136230 6918.144043 6918.144043
## 112 2022-05-23 6930.938965 7032.821777 6802.712891 7026.255859 7026.255859
## 113 2022-05-30 7052.172852 7233.995117 6974.616211 7182.960938 7182.960938
## 114 2022-06-06 7163.173828 7257.997070 7051.223145 7086.647949 7086.647949
## 115 2022-06-13 6992.229980 7138.496094 6882.644043 6936.966797 6936.966797
## 116 2022-06-20 6937.007813 7067.747070 6859.599121 7042.937012 7042.937012
## 117 2022-06-27 7043.018066 7070.519043 6777.316895 6794.328125 6794.328125
## 118 2022-07-04 6794.368164 6796.519043 6559.637207 6740.219238 6740.219238
## 119 2022-07-11 6740.019043 6757.086914 6607.702148 6651.904785 6651.904785
## 120 2022-07-18 6652.064941 6901.720215 6611.925781 6886.961914 6886.961914
## 121 2022-07-25 6887.041992 7032.353027 6857.800781 6951.123047 6951.123047
## 122 2022-08-01 6951.123047 7090.767090 6902.629883 7084.654785 7084.654785
## 123 2022-08-08 7084.654785 7181.100098 7021.672852 7129.276855 7129.276855
## 124 2022-08-15 7129.276855 7230.110840 7080.752930 7172.434082 7172.434082
## 125 2022-08-22 7172.434082 7210.163086 7064.500977 7135.248047 7135.248047
## 126 2022-08-29 7135.087891 7223.125977 7015.347168 7177.179199 7177.179199
## 127 2022-09-05 7177.139160 7287.700195 7147.976074 7242.655762 7242.655762
## 128 2022-09-12 7242.695801 7377.495117 7163.073242 7168.870117 7168.870117
## 129 2022-09-19 7168.950195 7252.186035 7127.457031 7178.583008 7178.583008
## 130 2022-09-26 7178.502930 7178.502930 6926.859863 7040.797852 7040.797852
## 131 2022-10-03 7040.797852 7135.908203 6995.062012 7026.783203 7026.783203
## 132 2022-10-10 7026.663086 7026.663086 6814.529785 6814.529785 6814.529785
## 133 2022-10-17 6814.529785 7058.911133 6747.379883 7017.770996 7017.770996
## 134 2022-10-24 7017.811035 7108.815918 7016.702148 7056.040039 7056.040039
## 135 2022-10-31 7056.040039 7128.136230 6962.853027 7045.526855 7045.526855
## 136 2022-11-07 7045.526855 7111.439941 6956.288086 7089.206055 7089.206055
## 137 2022-11-14 7089.206055 7104.764160 6955.528809 7082.181152 7082.181152
## 138 2022-11-21 7082.181152 7108.831055 7013.221191 7053.149902 7053.149902
## 139 2022-11-28 7053.109863 7090.276855 6967.950195 7019.639160 7019.639160
## 140 2022-12-05 7019.639160 7053.902832 6683.628906 6715.118164 6715.118164
## 141 2022-12-12 6715.118164 6854.098145 6641.810059 6812.192871 6812.192871
## 142 2022-12-19 6812.153809 6844.121094 6715.044922 6800.672852 6800.672852
## 143 2022-12-26 6800.712891 6953.039063 6786.981934 6850.619141 6850.619141
## 144 2023-01-02 6850.740234 6908.001953 6598.645996 6684.558105 6684.558105
## 145 2023-01-09 6684.558105 6726.965820 6557.919922 6641.830078 6641.830078
## 146 2023-01-16 6641.830078 6874.931152 6627.696777 6874.931152 6874.931152
## 147 2023-01-23 6874.931152 6932.708984 6815.785156 6898.980957 6898.980957
## 148 2023-01-30 6899.021973 6951.966797 6827.243164 6911.731934 6911.731934
## 149 2023-02-06 6911.731934 6961.918945 6803.417969 6880.329102 6880.329102
## 150 2023-02-13 6880.329102 6946.034180 6868.279785 6895.713867 6895.713867
## 151 2023-02-20 6895.855957 6923.672852 6781.229004 6856.576172 6856.576172
## 152 2023-02-27 6856.576172 6890.354004 6804.476074 6813.636230 6813.636230
## 153 2023-03-06 6813.918945 6856.568848 6728.190918 6765.301758 6765.301758
## 154 2023-03-13 6765.018066 6812.874023 6542.791992 6678.236816 6678.236816
## 155 2023-03-20 6678.236816 6776.904785 6587.688965 6762.253906 6762.253906
## 156 2023-03-27 6762.253906 6868.632813 6704.751953 6805.276855 6805.276855
## 157 2023-04-03 6805.276855 6867.336914 6781.523926 6792.765137 6792.765137
## 158 2023-04-10 6792.765137 6838.071777 6735.192871 6818.574219 6818.574219
## 159 2023-04-17 6818.714844 6839.758789 6765.142090 6821.807129 6821.807129
## 160 2023-04-24 6821.807129 6971.910156 6821.599121 6915.715820 6915.715820
## 161 2023-05-01 6915.715820 6920.335938 6733.775879 6787.630859 6787.630859
## 162 2023-05-08 6787.491211 6820.123047 6704.565918 6707.763184 6707.763184
## 163 2023-05-15 6708.463867 6729.299805 6656.647949 6700.561035 6700.561035
## 164 2023-05-22 6700.561035 6772.646973 6669.235840 6687.000977 6687.000977
## 165 2023-05-29 6687.280762 6708.367188 6562.955078 6633.261230 6633.261230
## 166 2023-06-05 6633.261230 6703.824219 6578.755859 6694.023926 6694.023926
## 167 2023-06-12 6694.583984 6744.644043 6660.909180 6698.546875 6698.546875
## 168 2023-06-19 6698.546875 6717.976074 6626.148926 6639.732910 6639.732910
## 169 2023-06-26 6639.732910 6679.625977 6622.184082 6661.878906 6661.878906
## 170 2023-07-03 6661.735840 6766.272949 6660.824219 6716.458984 6716.458984
## 171 2023-07-10 6716.458984 6874.775879 6716.458984 6869.571777 6869.571777
## 172 2023-07-17 6869.712891 6931.271973 6798.432129 6880.801758 6880.801758
## 173 2023-07-24 6880.801758 6966.166992 6857.368164 6900.229980 6900.229980
## 174 2023-07-31 6900.229980 6934.387207 6833.979980 6852.841797 6852.841797
## 175 2023-08-07 6852.841797 6915.050781 6852.841797 6879.979004 6879.979004
## 176 2023-08-14 6879.979004 6928.629883 6823.753906 6859.912109 6859.912109
## 177 2023-08-21 6860.053223 6959.432129 6859.422852 6895.442871 6895.442871
## 178 2023-08-28 6895.868164 7008.486816 6895.868164 6977.653809 6977.653809
## 179 2023-09-04 6977.795898 7020.966797 6900.586914 6924.779785 6924.779785
## 180 2023-09-11 6924.779785 7011.878906 6903.234863 6982.791016 6982.791016
## 181 2023-09-18 6982.791016 7046.475098 6928.770996 7016.844238 7016.844238
## 182 2023-09-25 7016.984863 7029.766113 6913.352051 6939.892090 6939.892090
## 183 2023-10-02 6939.892090 6992.626953 6839.857910 6888.518066 6888.518066
## 184 2023-10-09 6888.518066 6986.882813 6880.538086 6926.779785 6926.779785
## 185 2023-10-16 6926.916016 6970.598145 6803.192871 6849.167969 6849.167969
## 186 2023-10-23 6849.167969 6878.560059 6704.520020 6758.792969 6758.792969
## 187 2023-10-30 6758.657227 6826.618164 6639.824219 6788.850098 6788.850098
## 188 2023-11-06 6788.850098 6887.022949 6760.102051 6809.263184 6809.263184
## 189 2023-11-13 6809.263184 6857.103027 6809.263184 6838.312012 6838.312012
##         Volume
## 1    255758500
## 2    218419900
## 3    238397200
## 4    183906700
## 5    179791700
## 6    231060000
## 7    139287000
## 8    288083800
## 9    372565600
## 10   490084700
## 11   336775500
## 12   260206800
## 13   249816600
## 14   358094500
## 15   349862400
## 16   427056800
## 17   356913600
## 18   423927900
## 19   340206700
## 20   188318800
## 21   665155800
## 22   568186400
## 23   492882200
## 24   503336800
## 25   406370800
## 26   440809400
## 27   421591900
## 28   525143900
## 29   522912300
## 30   210436500
## 31   516535700
## 32   669558400
## 33   789934400
## 34  1255563200
## 35  1160743700
## 36  1003237500
## 37  1292048600
## 38   692226400
## 39   526030000
## 40  1007037000
## 41  1527600500
## 42  1081229300
## 43   813369600
## 44   872980000
## 45   563483000
## 46   739117700
## 47   880483600
## 48   987879800
## 49   652024500
## 50   742809300
## 51   712370600
## 52   462735200
## 53   720785500
## 54   669695000
## 55   675194300
## 56   641211400
## 57   667078400
## 58   240955800
## 59   696962000
## 60   679387300
## 61   687508700
## 62  1116799300
## 63   955804200
## 64   851733600
## 65   825550700
## 66   754205300
## 67   716924100
## 68   597748400
## 69   869133600
## 70  1228093800
## 71   869347300
## 72   796085900
## 73   977033500
## 74   893890700
## 75   958513400
## 76   992844400
## 77   950159400
## 78  1102928200
## 79  1172175100
## 80   941178200
## 81   757917300
## 82   899190300
## 83   828841100
## 84   921099300
## 85  1134263700
## 86  1087199900
## 87   795330100
## 88  1078695000
## 89  1011838100
## 90   941359400
## 91   763376600
## 92   884588500
## 93   854569300
## 94   805658500
## 95   986322200
## 96   777116900
## 97  1238259600
## 98  1092845600
## 99  1127214800
## 100  769293800
## 101 1085654100
## 102  949839000
## 103 1086012100
## 104  890142300
## 105  986772300
## 106 1073108900
## 107 1118782600
## 108  805992800
## 109       null
## 110  778348200
## 111  816107000
## 112  750357000
## 113  949041500
## 114 1281571500
## 115 1322143900
## 116 1133599100
## 117  840889500
## 118  810131700
## 119  794121300
## 120  853012300
## 121 1387470600
## 122 1102623400
## 123 1169007600
## 124  931624200
## 125 1241361100
## 126 1359158600
## 127 1535050500
## 128 1462367300
## 129 1266925400
## 130 1036700200
## 131 1020558200
## 132 1046699200
## 133  995211200
## 134  989950000
## 135  907843500
## 136  989493100
## 137  831349300
## 138  816522900
## 139  932257000
## 140  763168800
## 141 1047258100
## 142  668236600
## 143  630101600
## 144  699526200
## 145  720167700
## 146  895567700
## 147  704965800
## 148  824430200
## 149  806734800
## 150  878947100
## 151  724079700
## 152  696678400
## 153  666518500
## 154 1057790300
## 155  420955200
## 156  684102800
## 157  555847900
## 158  740731000
## 159  198520900
## 160  412380900
## 161  543494300
## 162  869888600
## 163  640965200
## 164  805878600
## 165  953648700
## 166  898820200
## 167  836808900
## 168  681954900
## 169  268366000
## 170  758610900
## 171  777914500
## 172  600841300
## 173  755582800
## 174  833783100
## 175  816860100
## 176  594594000
## 177  809797900
## 178  968078700
## 179  834736200
## 180 1031402000
## 181  729508700
## 182  726072400
## 183  831890700
## 184  876646000
## 185 1105909900
## 186  795226800
## 187 1012730500
## 188  827401600
## 189  187630200

1.1.1 Mengambil data close

data_close <- as.numeric(data$Close)
## Warning: NAs introduced by coercion
data_close <- as.data.frame(data_close)

1.1.2 Mengubah data menjadi data time series

data.ts <- ts(data_close)

1.1.3 Eksplorasi Data

1.1.3.1 Plot Data Penuh

datadate <- data$Date
dataplot1 <- cbind(datadate,data_close)
ggplot(dataplot1, aes(x = datadate, y = data_close)) +
  geom_line(color = "black", linetype = "solid", size = 1) +
  geom_point(color = "blue", size = 1) +
  labs(title = "Plot Time Series Harga Penutupan IHSG", x = "Tahun", y = "Harga Penutupan IHSG") +
  theme_minimal()+
  theme(plot.title = element_text(size = 20, face = "bold", hjust =0.5))
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: Removed 1 rows containing missing values (`geom_point()`).

Berdasarkan plot data deret waktu terlihat garis yang putus sehingga diduga terdapat missing value. Oleh karena itu, akan dilakukan pengecekan missing value.

1.1.3.2 Mengecek keberadaan missing value

data_close[which(is.na(data_close$data)),]
## [1] NA

1.1.3.3 Menduga missing value

data_close <- na_interpolation(data_close, option = "spline")
data_close[109,]
## [1] 6840.217

1.1.3.4 Plot Data Penuh Setelah Interpolasi

datadate <- data$Date
dataplot <- cbind(datadate,data_close)
ggplot(dataplot, aes(x = datadate, y = data_close)) +
  geom_line(color = "black", linetype = "solid", size = 1) +
  geom_point(color = "blue", size = 1) +
  labs(title = "Plot Time Series Harga Penutupan IHSG", x = "Tahun", y = "Harga Penutupan IHSG") +
  theme_minimal()+
  theme(plot.title = element_text(size = 20, face = "bold", hjust =0.5))

Berdasarkan plot data deret waktu, terlihat missing value sudah tertangani. Pola data cenderung memiliki trend yang naik. Berdasarkan pola data, pembagian data latih dan data uji ditetapkan dengan proporsi 90%:10%.

1.1.4 Pembagian Data

Data kemudian dibagi menjadi data latih dan data uji. Pembagian kali ini dilakukan dengan proporsi / perbandingan, yaitu 90:10.

data.train <- data_close$data_close[1:171]
train.ts <- ts(data.train)
data.test <- data_close$data_close[172:189]
test.ts <- ts(data.test)
traindif<- diff(data.train, difference =1)

1.1.4.1 Plot Data Latih

train.ts<-ts(data.train)
plot.ts(train.ts, lty=1, xlab="waktu", ylab="IHSG", main="Plot IHSG Train")

Berdasarkan plot data deret waktu pada data latih, terlihat bahwa data cenderung memiliki trend yang naik dan cenderung tidak bergerak pada nilai tengah tertentu. Hal ini mengindikasikan bahwa data tidak stasioner dalam rataan.

1.1.4.2 Plot Data Uji

test.ts<-ts(data.test, start = 172)
plot.ts(test.ts, lty=1, xlab="waktu", ylab="IHSG", main="Plot IHSG")

1.2 Data Kurs Dolar

data_kurs <- import("https://raw.githubusercontent.com/divanm/mpdw/main/Data/data%20kuts%20dolar%20fix.csv")

1.2.1 Ambil kolom penutupan kurs dolar

kurs1<- data_kurs$Terakhir*1000
kurs <- kurs1^4
kurs<-kurs[1:189]

1.2.1.1 Ubah data time series

kurs.ts <- ts(kurs)

1.2.2 Eksplorasi Data

1.2.2.1 Plot time series

kurs1.ts <- as.data.frame(ts(kurs1))
dataplot2 <- cbind(datadate,kurs1.ts)
ggplot(dataplot2, aes(x = datadate, y = x)) +
  geom_line(color = "black", linetype = "solid", size = 1) +
  geom_point(color = "blue", size = 1) +
  labs(title = "Plot Time Series Kurs Dolar", x = "Tahun", y = "Kurs Dolar") +
  theme_minimal()+
  theme(plot.title = element_text(size = 20, face = "bold", hjust =0.5))
## Don't know how to automatically pick scale for object of type <ts>. Defaulting
## to continuous.

1.2.2.2 Split Data

kurs.train <- kurs[1:171]
traink.ts <- ts(kurs.train)
kurs.test <- kurs[172:189]
testk.ts <- ts(kurs.test)

1.2.2.3 Plot time series variabel eksogen

plot(traink.ts,xlab = "Periode", ylab = "Data Kurs Dollar", col="black", main = "Data Training Histori Kurs Dollar")
points(traink.ts)

2. Analisis Data

2.1 Uji Stasioneritas Data Penutupan IHSG

2.1.1 Plot ACF

acf(train.ts)

Berdasarkan plot ACF, terlihat bahwa plot ACF data menurun secara perlahan (tails of slowly). Hal ini juga menjadi indikasi bahwa data tidak stasioner dalam rataan

2.1.2 Uji ADF

tseries::adf.test(train.ts)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  train.ts
## Dickey-Fuller = -2.1963, Lag order = 5, p-value = 0.4943
## alternative hypothesis: stationary

\(H_0\) : Data tidak stasioner dalam rataan

\(H_1\) : Data stasioner dalam rataan

Berdasarkan uji ADF tersebut, didapat p-value sebesar 0.4943 yang lebih besar dari taraf nyata 5% sehingga tak tolak \(H_0\) dan menandakan bahwa data tidak stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF, sehingga ketidakstasioneran model kedepannya harus ditangani

2.1.3 Plot Box-Cox

index <- seq(1:171)
bc = boxcox(train.ts~index, lambda = seq(-5,10,by=1))

#Nilai Rounded Lambda
lambda <- bc$x[which.max(bc$y)]
lambda
## [1] 3.787879
#SK
bc$x[bc$y > max(bc$y) - 1/2 * qchisq(.95,1)]
##  [1] 2.878788 3.030303 3.181818 3.333333 3.484848 3.636364 3.787879 3.939394
##  [9] 4.090909 4.242424 4.393939 4.545455 4.696970

Plot Boxcox menunjukkan nilai rounded value (\(\lambda\)) optimum sebesar 3.787879 dan pada selang kepercayaan 95% nilai memiliki batas bawah 2.878788 dan batas atas 4.696970. Selang tersebut tidak memuat nilai satu sehingga dapat dikatakan bahwa data tidak stasioner dalam ragam.

2.2 Penanganan Ketidakstasioneran Data

2.2.1 Ketidakstasioner dalam Ragam

Berdasarkan nilai lmbda yang didapat akan digunakan transformasi lambda 3

data.trans <- data_close^4
train.trans <- (data.train)^4
test.trans <- (data.test)^4
train.trans.ts <- ts(train.trans, frequency = 1)

Kemudian dilakukan pengecekan kembali kestasioneran dalam ragam

index <- seq(1:171)
bc = boxcox(train.trans.ts~index, lambda = seq(-5,10,by=1))

#Nilai Rounded Lambda
lambda <- bc$x[which.max(bc$y)]
lambda
## [1] 0.9090909
#SK
bc$x[bc$y > max(bc$y) - 1/2 * qchisq(.95,1)]
## [1] 0.7575758 0.9090909 1.0606061 1.2121212

Plot Boxcox menunjukkan nilai rounded value (\(\lambda\)) optimum sebesar 0.9090909 dan pada selang kepercayaan 95% nilai memiliki batas bawah 0.7575758 dan batas atas 1.2121212. Selang tersebut memuat nilai satu sehingga dapat dikatakan bahwa data stasioner dalam ragam.

2.2.2 Ketidakstasioneran dalam Rataan

train.diff<-diff(train.trans.ts,differences = 1) 
plot.ts(train.diff, lty=1, xlab="waktu", ylab="Data Difference 1 IHSG", main="Plot Difference IHSG")

Berdasarkan plot data deret waktu, terlihat bahwa data sudah stasioner dalam rataan ditandai dengan data bergerak pada nilai tengah tertentu (tidak terdapat trend ataupun musiman pada data). Namun, agar lebih meyakinkan akan dilihat dari plot ACF serta uji ADF juga.

acf(train.diff)

Berdasarkan plot tersebut, terlihat bahwa plot ACF cuts off pada lag 3. Oleh karena itu, sudah stasioner dalam rataan.

tseries::adf.test(train.diff)
## Warning in tseries::adf.test(train.diff): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  train.diff
## Dickey-Fuller = -7.1697, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary

\(H_0\) : Data tidak stasioner dalam rataan

\(H_1\) : Data stasioner dalam rataan

Berdasarkan uji ADF tersebut, didapat p-value sebesar 0.01 yang lebih kecil dari taraf nyata 5% sehingga tolak \(H_0\) atau data stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF, sehingga dalam hal ini ketidakstasioneran data sudah berhasil ditangani dan dapat dilanjutkan ke pemodelan.

2.3 Uji Stasioneritas data Kurs Dolar

2.3.1 Plot ACF

acf(kurs.train, lag.max = 24, main = "Plot ACF Train Kurs Dolar")

Berdasarkan Plot ACF Sisaan, nilai korelasi antar lag terlihat pada plot di atas menurun secara perlahan (tails off slowly). Hal tersebut mengindikasikan bahwa sisaan tidak stasioner. Perlu dilakukan uji formal untuk mengambil kesimpulan kestasioneran data

2.3.2 Uji Formal ADF

Secara formal, metode Augmented Dickey-Fuller (ADF) dapat memberikan hasil uji secara akurat untuk menentukan apakah sebuah data stasioner atau tidak. Namun, Uji ADF ini hanya mengukur tingkat stasioneritas berdasarkan nilai tengah saja. Dengan hipotesis yang diuji sebagai berikut : H0 : Nilai tengah sisaan tidak stasioner H1 : Nilai tengah sisaan stasioner α = 5% = 0.05

tseries::adf.test(kurs.train)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  kurs.train
## Dickey-Fuller = -3.2307, Lag order = 5, p-value = 0.085
## alternative hypothesis: stationary

Berdasarkan hasil Augmented Dickey-Fuller Test (ADF Test) didapatkan p-value = 0.085 > α, maka tak tolak H0. Artinya, tidak cukup bukti untuk mengatakan bahwa sisaan stasioner pada taraf nyata 5%. Sehingga, perlu dilakukan differencing sebelum melakukan penentuan model tentatif

2.3.3 Penanganan Ketidakstasioneran Data

Akan dilakukan Differencing 1 kali

kurstraindif <- diff(kurs1[1:171], difference=1)
kurstestdif <- diff(kurs1[172:189], difference=1)
kursdif <- diff(kurs1, difference=1)
kursdiff <- diff(kurs1, difference =1 )
kurs.diff<- diff(kurs.train, difference = 1)

2.3.3.1 Cek kestasioneran data kembali

Pengujian menggunakan Augmented Dickey-Fuller Test H0: Nilai tengah sisaan tidak stasioner H1: Nilai tengah sisaan stasioner α= 5% = 0.05

tseries::adf.test(kurs.diff)
## Warning in tseries::adf.test(kurs.diff): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  kurs.diff
## Dickey-Fuller = -5.2516, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary

Berdasarkan hasil Augmented Dickey-Fuller Test (ADF Test) didapatkan p-value = 0.01 < α, maka tolak H_0. Artinya, cukup bukti untuk mengatakan bahwa sisaan stasioner pada taraf nyata 5% setelah dilakukan differencing sebanyak 1 kali.

acf(kurs.diff)

Berdasarkan plot tersebut, terlihat bahwa plot ACF cenderung cuts off pada lag ke 2, sehingga sudah stasioner dalam rataan

3. ARIMAX

3.1 Identifikasi Model

3.1.1 Plot ACF

acf(train.diff)

Berdasarkan plot tersebut, terlihat bahwa plot ACF cenderung cuts off pada lag ke 3, sehingga jika plot PACF dianggap tails of, maka model tentatifnya adalah ARIMA(0,1,3).

3.1.2 Plot PACF

pacf(train.diff)

Berdasarkan plot tersebut, terlihat bahwa plot PACF cenderung cuts off pada lag ke 3, sehingga jika plot ACF dianggap tails of, maka model tentatifnya adalah ARIMA(3,1,0).

Jika baik plot ACF maupun plot PACF keduanya dianggap tails of, maka model yang terbentuk adalah ARIMA(3,1,3)

3.1.3 Plot EACF

eacf(train.diff)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 o o x o o x o o o o o  o  o  o 
## 1 x o o o o x o o o o o  o  o  o 
## 2 x x o o o o o o o o o  o  o  o 
## 3 o o x o o o o o o o o  o  o  o 
## 4 x o x x o o o o o o o  o  o  o 
## 5 o o x o x o o o o o o  o  o  o 
## 6 x x o o o o o o o o o  o  o  o 
## 7 x x o o o o o o o o o  o  o  o

Identifikasi model menggunakan plot EACF dilakukan dengan melihat ujung segitiga pada pola segitiga nol. Dalam hal ini model tentatif yang terbentuk adalah ARIMA(1,1,1), ARIMA(0,1,1), ARIMA(0,1,3), ARIMA(1,1,2), ARIMA(2,1,2), ARIMA(3,1,1), ARIMA(3,1,0) dan ARIMA(3,1,3).

3.2 Pendugaan Parameter Model Tentatif

3.2.1 ARIMA(0,1,1)

model1.da=Arima(train.trans.ts, order=c(0,1,1),method="ML")
summary(model1.da) 
## Series: train.trans.ts 
## ARIMA(0,1,1) 
## 
## Coefficients:
##          ma1
##       0.0604
## s.e.  0.0846
## 
## sigma^2 = 1.519e+28:  log likelihood = -5756.39
## AIC=11516.78   AICc=11516.85   BIC=11523.05
## 
## Training set error measures:
##                        ME         RMSE          MAE       MPE     MAPE
## Training set 9.770363e+12 1.225115e+14 8.330417e+13 0.6004282 5.317615
##                   MASE       ACF1
## Training set 0.9842035 -0.0112017
lmtest::coeftest(model1.da) 
## 
## z test of coefficients:
## 
##     Estimate Std. Error z value Pr(>|z|)
## ma1 0.060438   0.084630  0.7141   0.4751

3.2.2 ARIMA(1,1,2)

model2.da=Arima(train.trans.ts, order=c(1,1,2),method="ML")
summary(model2.da) 
## Series: train.trans.ts 
## ARIMA(1,1,2) 
## 
## Coefficients:
##          ar1      ma1      ma2
##       0.5591  -0.5376  -0.1482
## s.e.  0.2258   0.2231   0.0740
## 
## sigma^2 = 1.494e+28:  log likelihood = -5754.04
## AIC=11516.08   AICc=11516.32   BIC=11528.62
## 
## Training set error measures:
##                        ME         RMSE          MAE       MPE     MAPE
## Training set 1.390447e+13 1.208051e+14 8.402439e+13 0.8885218 5.374574
##                   MASE         ACF1
## Training set 0.9927126 -0.005088004
lmtest::coeftest(model2.da) 
## 
## z test of coefficients:
## 
##      Estimate Std. Error z value Pr(>|z|)  
## ar1  0.559058   0.225823  2.4756  0.01330 *
## ma1 -0.537598   0.223127 -2.4094  0.01598 *
## ma2 -0.148225   0.073976 -2.0037  0.04510 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

3.2.3 ARIMA(2,1,2)

model3.da=Arima(train.trans.ts, order=c(2,1,2),method="ML")
summary(model3.da)
## Series: train.trans.ts 
## ARIMA(2,1,2) 
## 
## Coefficients:
##          ar1      ar2      ma1     ma2
##       0.8049  -0.2666  -0.7722  0.1092
## s.e.  0.4132   0.3197   0.4258  0.3428
## 
## sigma^2 = 1.497e+28:  log likelihood = -5753.7
## AIC=11517.4   AICc=11517.77   BIC=11533.08
## 
## Training set error measures:
##                        ME         RMSE          MAE       MPE     MAPE
## Training set 1.356209e+13 1.205589e+14 8.403921e+13 0.8669201 5.389944
##                   MASE        ACF1
## Training set 0.9928878 -0.01500794
lmtest::coeftest(model3.da) 
## 
## z test of coefficients:
## 
##     Estimate Std. Error z value Pr(>|z|)  
## ar1  0.80490    0.41318  1.9481  0.05141 .
## ar2 -0.26663    0.31968 -0.8341  0.40424  
## ma1 -0.77216    0.42579 -1.8135  0.06976 .
## ma2  0.10924    0.34280  0.3187  0.74999  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

3.2.4 ARIMA(1,1,1)

model4.da=Arima(train.trans.ts, order=c(1,1,1),method="ML")
summary(model4.da) 
## Series: train.trans.ts 
## ARIMA(1,1,1) 
## 
## Coefficients:
##           ar1     ma1
##       -0.2535  0.3196
## s.e.   0.5584  0.5482
## 
## sigma^2 = 1.525e+28:  log likelihood = -5756.25
## AIC=11518.49   AICc=11518.64   BIC=11527.9
## 
## Training set error measures:
##                        ME         RMSE          MAE       MPE     MAPE
## Training set 9.830731e+12 1.224089e+14 8.315842e+13 0.6048401 5.307205
##                   MASE        ACF1
## Training set 0.9824816 -0.01863628
lmtest::coeftest(model4.da) 
## 
## z test of coefficients:
## 
##     Estimate Std. Error z value Pr(>|z|)
## ar1 -0.25354    0.55838 -0.4541   0.6498
## ma1  0.31956    0.54816  0.5830   0.5599

3.2.5 ARIMA(3,1,0)

model5.da=Arima(train.trans.ts, order=c(3,1,0),method="ML")
summary(model5.da)
## Series: train.trans.ts 
## ARIMA(3,1,0) 
## 
## Coefficients:
##          ar1      ar2      ar3
##       0.0362  -0.1100  -0.1399
## s.e.  0.0763   0.0757   0.0760
## 
## sigma^2 = 1.487e+28:  log likelihood = -5753.6
## AIC=11515.2   AICc=11515.44   BIC=11527.74
## 
## Training set error measures:
##                        ME         RMSE         MAE       MPE     MAPE      MASE
## Training set 1.214236e+13 1.204882e+14 8.34746e+13 0.7707858 5.364808 0.9862171
##                      ACF1
## Training set -0.008780197
lmtest::coeftest(model5.da)
## 
## z test of coefficients:
## 
##      Estimate Std. Error z value Pr(>|z|)  
## ar1  0.036199   0.076297  0.4744  0.63518  
## ar2 -0.109979   0.075670 -1.4534  0.14611  
## ar3 -0.139907   0.076026 -1.8403  0.06573 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

3.2.6 ARIMA(3,1,1)

model6.da=Arima(train.trans.ts, order=c(3,1,1),method="ML")
summary(model6.da)
## Series: train.trans.ts 
## ARIMA(3,1,1) 
## 
## Coefficients:
##          ar1      ar2      ar3    ma1
##       0.0106  -0.1086  -0.1429  0.026
## s.e.  0.5065   0.0801   0.0947  0.511
## 
## sigma^2 = 1.495e+28:  log likelihood = -5753.6
## AIC=11517.2   AICc=11517.56   BIC=11532.88
## 
## Training set error measures:
##                        ME         RMSE          MAE       MPE     MAPE
## Training set 1.210426e+13 1.204878e+14 8.344694e+13 0.7682347 5.362789
##                   MASE         ACF1
## Training set 0.9858902 -0.009129944
lmtest::coeftest(model6.da)
## 
## z test of coefficients:
## 
##      Estimate Std. Error z value Pr(>|z|)
## ar1  0.010629   0.506549  0.0210   0.9833
## ar2 -0.108629   0.080136 -1.3556   0.1752
## ar3 -0.142892   0.094679 -1.5092   0.1312
## ma1  0.025972   0.510990  0.0508   0.9595

3.2.7 ARIMA(3,1,3)

model7.da=Arima(train.trans.ts, order=c(3,1,3),method="ML")
summary(model7.da)
## Series: train.trans.ts 
## ARIMA(3,1,3) 
## 
## Coefficients:
##          ar1      ar2     ar3      ma1     ma2      ma3
##       0.5472  -0.7428  0.5113  -0.5146  0.6260  -0.6073
## s.e.  0.2938   0.1473  0.2184   0.2673  0.1319   0.1929
## 
## sigma^2 = 1.469e+28:  log likelihood = -5751.16
## AIC=11516.31   AICc=11517   BIC=11538.26
## 
## Training set error measures:
##                        ME        RMSE          MAE       MPE     MAPE      MASE
## Training set 1.345307e+13 1.18691e+14 8.338857e+13 0.8673262 5.348293 0.9852007
##                      ACF1
## Training set -0.006771726
lmtest::coeftest(model7.da)
## 
## z test of coefficients:
## 
##     Estimate Std. Error z value  Pr(>|z|)    
## ar1  0.54715    0.29385  1.8620  0.062598 .  
## ar2 -0.74285    0.14734 -5.0415 4.618e-07 ***
## ar3  0.51133    0.21841  2.3411  0.019226 *  
## ma1 -0.51455    0.26726 -1.9253  0.054195 .  
## ma2  0.62603    0.13189  4.7465 2.069e-06 ***
## ma3 -0.60725    0.19292 -3.1477  0.001646 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

3.2.7 ARIMA(3,1,0)

model8.da=Arima(train.trans.ts, order=c(0,1,3),method="ML")
summary(model8.da)
## Series: train.trans.ts 
## ARIMA(0,1,3) 
## 
## Coefficients:
##          ma1      ma2      ma3
##       0.0243  -0.0955  -0.1858
## s.e.  0.0744   0.0803   0.0838
## 
## sigma^2 = 1.478e+28:  log likelihood = -5753.13
## AIC=11514.25   AICc=11514.49   BIC=11526.79
## 
## Training set error measures:
##                        ME         RMSE          MAE       MPE    MAPE      MASE
## Training set 1.331531e+13 1.201405e+14 8.419198e+13 0.8529305 5.41595 0.9946927
##                      ACF1
## Training set -0.005242445
lmtest::coeftest(model8.da)
## 
## z test of coefficients:
## 
##      Estimate Std. Error z value Pr(>|z|)  
## ma1  0.024315   0.074410  0.3268   0.7438  
## ma2 -0.095464   0.080255 -1.1895   0.2342  
## ma3 -0.185760   0.083774 -2.2174   0.0266 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan pendugaan parameter di atas, nilai AIC terkecil dan juga seluruhnya signifikan sehingga model yang dipilih adalah model ARIMA(1,1,2).

3.3 Pembentukan Model ARIMAX

Berdasarkan identifikasi dan diagnostik model, didapatkan model ARIMA terbaik yaitu ARIMA(2,1,2) sehingga model ini akan digunakan dalam pembuatan model ARIMAX(2,1,2).

model.arimax <- Arima(train.trans, order = c(1,1,2), xreg = kurs.train, method = "ML")
coeftest(model.arimax)
## 
## z test of coefficients:
## 
##        Estimate Std. Error z value  Pr(>|z|)    
## ar1   0.5280590  0.2548809  2.0718 0.0382853 *  
## ma1  -0.5268022  0.2511649 -2.0974 0.0359550 *  
## ma2  -0.1301218  0.0754966 -1.7235 0.0847901 .  
## xreg -0.0161844  0.0048731 -3.3212 0.0008963 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
round(model.arimax$aic, 3)
## [1] 11507.25

Hasil uji signifikansi ARIMAX (1,1,2) karena semua parameternya lebih kecil dari taraf nyata 10%. Selanjutnya model ARIMAX (1,1,2) akan diuji diagnostik model.

3.3.1 Uji Signifikansi Parameter

3.3.1.1 Uji Signifikansi Parameter

3.3.2 Diagnostik Model ARIMAX(2,1,2)

3.3.2.1 Eksplorasi Sisaan

sisaan.max <- model.arimax$residuals 
par(mfrow=c(1,1)) 
qqnorm(sisaan.max) 
qqline(sisaan.max, col = "blue", lwd = 2) 

plot(c(1:length(sisaan.max)),sisaan.max) 

acf(sisaan.max) 

pacf(sisaan.max) 

par(mfrow = c(1,1))

Berdasarkan plot kuantil-kuantil normal, secara eksplorasi ditunjukkan sisaan tidak menyebar normal ditandai dengan titik titik yang cenderung tidak mengikuti garis \(45^{\circ}\). Kemudian dapat dilihat juga lebar pita sisaan yang cenderung tidak sama menandakan bahwa sisaan memiliki ragam yang tidak homogen. Plot ACF dan PACF sisaan ARIMAX(1,1,2) juga tidak signifikan pada 20 lag awal yang menandakan sisaan saling bebas. Kondisi ini akan diuji lebih lanjut dengan uji formal.

3.3.1.2 Uji Formal

3.3.1.2.1 Sisaan Menyebar Normal
ks.test(sisaan.max,"pnorm")  #tak tolak H0 > sisaan menyebar normal
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  sisaan.max
## D = 0.5848, p-value < 2.2e-16
## alternative hypothesis: two-sided

Selain dengan eksplorasi, asumsi tersebut dapat diuji menggunakan uji formal. Pada tahapan ini uji formal yang digunakan untuk normalitas adalah uji Kolmogorov-Smirnov (KS). Hipotesis pada uji KS adalah sebagai berikut.

\(H_0\) : Sisaan menyebar normal

\(H_1\) : Sisaan tidak menyebar normal

Berdasarkan uji KS tersebut, didapat p-value sebesar 2.2e-16 yang kurang dari taraf nyata 5% sehingga tolak \(H_0\) dan menandakan bahwa sisaan tidak menyebar normal. Hal ini sesuai dengan hasil eksplorasi menggunakan plot kuantil-kuantil normal.

3.3.1.2.2 Sisaan saling bebas/tidak ada autokorelasi
Box.test(sisaan.max, type = "Ljung")  #tak tolak H0 > sisaan saling bebas
## 
##  Box-Ljung test
## 
## data:  sisaan.max
## X-squared = 0.0022672, df = 1, p-value = 0.962

Selanjutnya akan dilakukan uji formal untuk kebebasan sisaan menggunakan uji Ljung-Box. Hipotesis yang digunakan adalah sebagai berikut.

\(H_0\) : Sisaan saling bebas

\(H_1\) : Sisaan tidak tidak saling bebas

Berdasarkan uji Ljung-Box tersebut, didapat p-value sebesar 0.962 yang lebih besar dari taraf nyata 5% sehingga tak tolak \(H_0\) dan menandakan bahwa sisaan saling bebas.

3.3.1.2.3 Sisaan homogen
Box.test((sisaan.max)^2, type = "Ljung")  #tak tolak H0 > sisaan homogen
## 
##  Box-Ljung test
## 
## data:  (sisaan.max)^2
## X-squared = 5.591, df = 1, p-value = 0.01805

Hipotesis yang digunakan untuk uji kehomogenan ragam adalah sebagai berikut.

\(H_0\) : Ragam sisaan homogen

\(H_1\) : Ragam sisaan tidak homogen

Berdasarkan uji Ljung-Box terhadap sisaan kuadrat tersebut, didapat p-value sebesar 0.01805 yang lebih kecil dari taraf nyata 5% sehingga tolak \(H_0\) dan menandakan bahwa ragam sisaan tidak homogen.

3.3.1.3 Pengecekan Overfitting

3.3.1.3.1 ARIMAX(2,1,2)
model1x.over <- Arima(train.trans, order = c(2,1,2), xreg = kurs.train, method = "ML")
coeftest(model1x.over)
## 
## z test of coefficients:
## 
##       Estimate Std. Error z value  Pr(>|z|)    
## ar1   0.734291   0.433878  1.6924 0.0905718 .  
## ar2  -0.240382   0.320057 -0.7511 0.4526162    
## ma1  -0.723208   0.442646 -1.6338 0.1022945    
## ma2   0.099486   0.339427  0.2931 0.7694464    
## xreg -0.015968   0.004850 -3.2924 0.0009934 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
round(model1x.over$aic, 3)
## [1] 11508.73
3.3.1.3.2 ARIMAX(1,1,3)
model2x.over <- Arima(train.trans, order = c(1,1,3), xreg = kurs.train, method = "ML")
coeftest(model2x.over)
## 
## z test of coefficients:
## 
##        Estimate Std. Error z value  Pr(>|z|)    
## ar1  -0.0259707  0.3302125 -0.0786 0.9373124    
## ma1   0.0393286  0.3203742  0.1228 0.9022984    
## ma2  -0.0981937  0.0772366 -1.2713 0.2036091    
## ma3  -0.1787823  0.0838073 -2.1333 0.0329037 *  
## xreg -0.0162205  0.0048115 -3.3712 0.0007485 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
round(model2x.over$aic, 3)
## [1] 11507.04

Karena parameter ar1 dan ar2 pada model ARIMAX(3,1,2) tidak berubah secara signifikan dari parameter ar1 dan parameter ar2 pada model ARIMAX(2,1,2), Pada parameter ma1 dan ma2 pada model ARIMAX(3,1,2) tidak berubah secara signifikan dari parameter ma1 dan parameter ma2 pada model ARIMAX(2,1,2). Selain itu diperoleh bahwa model ARIMAX(2,1,3) dan ARIMAX(3,1,2) tidak signifikan pada beberapa parameter dan nilai AIC lebih besar daripada ARIMAX(2,1,2).

Maka model ARIMAX(1,1,2) tidak terjadi overfitting atau merupakan model yang baik untuk digunakan. (Cryer dan Chan. 2008)

4. Pemeriksaan efek ARCH

4.1 Uji ARCH-Lagrange Multiplier (ARCH-LM)

for (i in 1:20) {
  ArchTest <- ArchTest(sisaan.max, lags=i, demean=TRUE)
  cat("P Value LM Test lag ke", i,"adalah" , ArchTest$p.value, "\n") }
## P Value LM Test lag ke 1 adalah 0.01628646 
## P Value LM Test lag ke 2 adalah 0.01462037 
## P Value LM Test lag ke 3 adalah 0.03715553 
## P Value LM Test lag ke 4 adalah 0.04657892 
## P Value LM Test lag ke 5 adalah 0.08541763 
## P Value LM Test lag ke 6 adalah 0.09364063 
## P Value LM Test lag ke 7 adalah 0.1168787 
## P Value LM Test lag ke 8 adalah 0.08311948 
## P Value LM Test lag ke 9 adalah 0.1014762 
## P Value LM Test lag ke 10 adalah 0.1366218 
## P Value LM Test lag ke 11 adalah 0.1295778 
## P Value LM Test lag ke 12 adalah 0.1561501 
## P Value LM Test lag ke 13 adalah 0.1763797 
## P Value LM Test lag ke 14 adalah 0.1838853 
## P Value LM Test lag ke 15 adalah 0.2283422 
## P Value LM Test lag ke 16 adalah 0.296625 
## P Value LM Test lag ke 17 adalah 0.3590439 
## P Value LM Test lag ke 18 adalah 0.4380293 
## P Value LM Test lag ke 19 adalah 0.4451795 
## P Value LM Test lag ke 20 adalah 0.5155912

Diperoleh signifikan sampai lag ke4 sehingga terdapat efek heteroskedastisitas

4.3 Pembentukan Model ARIMAX(3,1,3)-ARCH(1)

Berdasarkan trial n error didapat nilai AIC terkecil dan semua parameter signifikan pada ARIMAX(1,1,2)-ARCH(1)

library(rugarch)
model.arch1<-ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1,0)),  mean.model = list(armaOrder = c(1, 2),external.regressors = as.matrix(kurstraindif)))

m.11<-ugarchfit(spec=model.arch1,data=traindif, out.sample = 40)
m.11
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics    
## -----------------------------------
## GARCH Model  : sGARCH(1,0)
## Mean Model   : ARFIMA(1,0,2)
## Distribution : norm 
## 
## Optimal Parameters
## ------------------------------------
##           Estimate  Std. Error    t value Pr(>|t|)
## mu        2.544066  2.5200e-03  1009.6155  0.00000
## ar1       0.927095  3.3670e-02    27.5347  0.00000
## ma1      -1.036573  2.0600e-04 -5024.4797  0.00000
## ma2      -0.039131  2.0000e-05 -1964.3383  0.00000
## mxreg1   -0.259918  1.1700e-04 -2222.0553  0.00000
## omega  9439.076549  1.2541e+03     7.5268  0.00000
## alpha1    0.098317  3.3691e-02     2.9182  0.00352
## 
## Robust Standard Errors:
##           Estimate  Std. Error     t value Pr(>|t|)
## mu        2.544066  4.4048e-02   57.756744  0.00000
## ar1       0.927095  3.9694e-02   23.355767  0.00000
## ma1      -1.036573  4.6630e-03 -222.277164  0.00000
## ma2      -0.039131  3.8200e-04 -102.544836  0.00000
## mxreg1   -0.259918  1.6510e-03 -157.451013  0.00000
## omega  9439.076549  1.1843e+04    0.797033  0.42543
## alpha1    0.098317  1.8549e+00    0.053005  0.95773
## 
## LogLikelihood : -786.399 
## 
## Information Criteria
## ------------------------------------
##                    
## Akaike       12.206
## Bayes        12.361
## Shibata      12.201
## Hannan-Quinn 12.269
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                          statistic p-value
## Lag[1]                     0.09876  0.7533
## Lag[2*(p+q)+(p+q)-1][8]    3.62363  0.9319
## Lag[4*(p+q)+(p+q)-1][14]   8.36878  0.3109
## d.o.f=3
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                     0.1693  0.6808
## Lag[2*(p+q)+(p+q)-1][2]    0.4767  0.7046
## Lag[4*(p+q)+(p+q)-1][5]    1.5543  0.7265
## d.o.f=1
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[2]    0.5962 0.500 2.000  0.4400
## ARCH Lag[4]    1.4947 1.397 1.611  0.5633
## ARCH Lag[6]    2.0615 2.222 1.500  0.6665
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  -12.3941
## Individual Statistics:              
## mu     0.01493
## ar1    0.41361
## ma1    0.01492
## ma2    0.01492
## mxreg1 0.01494
## omega  0.07086
## alpha1 0.12109
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:          1.69 1.9 2.35
## Individual Statistic:     0.35 0.47 0.75
## 
## Sign Bias Test
## ------------------------------------
##                    t-value   prob sig
## Sign Bias           0.3252 0.7456    
## Negative Sign Bias  0.7985 0.4261    
## Positive Sign Bias  0.6035 0.5473    
## Joint Effect        1.3739 0.7117    
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20     13.08       0.8346
## 2    30     24.62       0.6980
## 3    40     39.23       0.4595
## 4    50     40.77       0.7924
## 
## 
## Elapsed time : 4.432338
matrix_kurs_test_diff <- as.matrix(kurstestdif)

4.4 Uji Diagnostik Model ARIMAX(1,1,2)-ARCH(1)

4.4.1 Sisaan Menyebar Normal

sisaan.arch <- residuals(m.11)
ks.test(sisaan.arch,"pnorm")  #tak tolak H0 > sisaan menyebar normal
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  sisaan.arch
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided

Selain dengan eksplorasi, asumsi tersebut dapat diuji menggunakan uji formal. Pada tahapan ini uji formal yang digunakan untuk normalitas adalah uji Kolmogorov-Smirnov (KS). Hipotesis pada uji KS adalah sebagai berikut.

\(H_0\) : Sisaan menyebar normal

\(H_1\) : Sisaan tidak menyebar normal

Berdasarkan uji KS tersebut, didapat p-value sebesar 2.2e-16 yang kurang dari taraf nyata 5% sehingga tolak \(H_0\) dan menandakan bahwa sisaan tidak menyebar normal. Hal ini sesuai dengan hasil eksplorasi menggunakan plot kuantil-kuantil normal.

4.4.2 Sisaan saling bebas/tidak ada autokorelasi

Selanjutnya akan dilakukan uji formal untuk kebebasan sisaan menggunakan Weighted Ljung-Box Test on Standardized Residuals dari hasil m.11. Hipotesis yang digunakan adalah sebagai berikut.

\(H_0\) : Sisaan saling bebas

\(H_1\) : Sisaan tidak tidak saling bebas

Berdasarkan uji Ljung-Box tersebut, didapat semua p-value yang lebih besar dari taraf nyata 5% sehingga tak tolak \(H_0\) dan menandakan bahwa sisaan saling bebas.

4.4.3 Ragam sisaan homogen

Selanjutnya akan dilakukan uji formal untuk kebebasan sisaan menggunakan Weighted Ljung-Box Test on Standardized Squared Residuals dari hasil m.11. Hipotesis yang digunakan adalah sebagai berikut.

\(H_0\) : Ragam sisaan homogen

\(H_1\) : Ragam sisaan heterogen

Berdasarkan uji Ljung-Box tersebut, didapat semua p-value yang lebih besar dari taraf nyata 5% sehingga tak tolak \(H_0\) dan menandakan bahwa ragam sisaan homogen artinya dengan model ARCH sudah mampu menyelesaikan masalah heteroskedastisitas.

4.4.4 Pengecekan overfitting ARIMAX(1,1,2)-ARCH(2)

model.arch2<-ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(2,0)),  mean.model = list(armaOrder = c(1, 2),external.regressors = as.matrix(kurstraindif)))

m.12<-ugarchfit(spec=model.arch2,data=traindif, out.sample = 40)
m.12
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics    
## -----------------------------------
## GARCH Model  : sGARCH(2,0)
## Mean Model   : ARFIMA(1,0,2)
## Distribution : norm 
## 
## Optimal Parameters
## ------------------------------------
##           Estimate  Std. Error  t value Pr(>|t|)
## mu       17.293774  1.0137e+01  1.70599  0.08801
## ar1      -0.613048  5.8636e-01 -1.04551  0.29579
## ma1       0.666614  5.8714e-01  1.13536  0.25622
## ma2       0.059308  1.2079e-01  0.49099  0.62343
## mxreg1   -0.310414  7.2860e-02 -4.26041  0.00002
## omega  9786.233553  1.6591e+03  5.89856  0.00000
## alpha1    0.091319  8.5843e-02  1.06379  0.28742
## alpha2    0.082637  9.9854e-02  0.82757  0.40791
## 
## Robust Standard Errors:
##           Estimate  Std. Error  t value Pr(>|t|)
## mu       17.293774  1.0528e+01  1.64269 0.100447
## ar1      -0.613048  1.9012e-01 -3.22448 0.001262
## ma1       0.666614  1.8915e-01  3.52436 0.000425
## ma2       0.059308  1.2487e-01  0.47495 0.634821
## mxreg1   -0.310414  6.6768e-02 -4.64916 0.000003
## omega  9786.233553  2.7521e+03  3.55597 0.000377
## alpha1    0.091319  7.0217e-02  1.30052 0.193422
## alpha2    0.082637  7.5260e-02  1.09801 0.272201
## 
## LogLikelihood : -793.7422 
## 
## Information Criteria
## ------------------------------------
##                    
## Akaike       12.334
## Bayes        12.511
## Shibata      12.327
## Hannan-Quinn 12.406
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                          statistic p-value
## Lag[1]                     0.04395  0.8340
## Lag[2*(p+q)+(p+q)-1][8]    3.39102  0.9738
## Lag[4*(p+q)+(p+q)-1][14]   8.88563  0.2362
## d.o.f=3
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                    0.09889  0.7532
## Lag[2*(p+q)+(p+q)-1][5]   0.76013  0.9111
## Lag[4*(p+q)+(p+q)-1][9]   1.55432  0.9510
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]    0.7531 0.500 2.000  0.3855
## ARCH Lag[5]    1.1229 1.440 1.667  0.6968
## ARCH Lag[7]    1.3564 2.315 1.543  0.8497
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  1.2999
## Individual Statistics:              
## mu     0.03454
## ar1    0.40326
## ma1    0.40727
## ma2    0.14423
## mxreg1 0.29047
## omega  0.06797
## alpha1 0.09250
## alpha2 0.05402
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:          1.89 2.11 2.59
## Individual Statistic:     0.35 0.47 0.75
## 
## Sign Bias Test
## ------------------------------------
##                    t-value   prob sig
## Sign Bias           0.3162 0.7524    
## Negative Sign Bias  0.9800 0.3290    
## Positive Sign Bias  0.7469 0.4565    
## Joint Effect        2.1601 0.5399    
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20     14.31       0.7655
## 2    30     29.23       0.4531
## 3    40     37.38       0.5437
## 4    50     36.92       0.8977
## 
## 
## Elapsed time : 0.490375

Terlihat bahwa tidak semua parameter signifikan sehingga model ARIMAX(1,1,2)-ARCH(2) tidak dipilih

4.5 Akurasi ARIMAX(1,1,2)-ARCH(1)

# belum nemu sintaks yang benar karena differencing
sisaan.arch <- residuals(m.11)
mape_manual <- mean(abs(sisaan.arch / fitted(m.11))) * 100
cat("MAPE (Manual):",mape_manual, "\n")
## MAPE (Manual): 660.3556

4.6 Peramalan ARIMAX(1,1,2)-ARCH(1)

forc = ugarchforecast(m.11, n.ahead = 17,n.roll=0, external.forecasts = list(mregfor = matrix_kurs_test_diff , vregfor = NULL))
print(forc)
## 
## *------------------------------------*
## *       GARCH Model Forecast         *
## *------------------------------------*
## Model: sGARCH
## Horizon: 17
## Roll Steps: 0
## Out of Sample: 17
## 
## 0-roll forecast [T0=1970-05-11]:
##        Series  Sigma
## T+1  -15.6031  97.17
## T+2  -16.6688 101.82
## T+3   -8.8918 102.27
## T+4  -15.4087 102.31
## T+5    0.1688 102.31
## T+6   17.0471 102.31
## T+7  -19.3566 102.31
## T+8   -5.0751 102.31
## T+9   -2.4889 102.31
## T+10 -18.0961 102.31
## T+11 -37.6011 102.31
## T+12 -16.8180 102.31
## T+13 -46.7182 102.31
## T+14 -14.2373 102.31
## T+15  57.2319 102.31
## T+16  11.7386 102.31
## T+17  54.6179 102.31
plot(forc,which=1)

pt_1 <- data.train[length(data.train)] #nilai akhir data latih
hasil.forc.Diff <- forc@forecast$seriesFor[,1]
hasil.arch <- diffinv(hasil.forc.Diff, differences = 1) + pt_1
perbandingan.arch<-matrix(data=c(head(data.test, n=length(data.test)), hasil.arch[2:19]),
                     nrow = length(data.test), ncol = 2)
colnames(perbandingan.arch)<-c("Aktual","Hasil Forecast")
perbandingan.arch
##         Aktual Hasil Forecast
##  [1,] 6880.802       6853.969
##  [2,] 6900.230       6837.300
##  [3,] 6852.842       6828.408
##  [4,] 6879.979       6812.999
##  [5,] 6859.912       6813.168
##  [6,] 6895.443       6830.215
##  [7,] 6977.654       6810.859
##  [8,] 6924.780       6805.784
##  [9,] 6982.791       6803.295
## [10,] 7016.844       6785.199
## [11,] 6939.892       6747.598
## [12,] 6888.518       6730.780
## [13,] 6926.780       6684.061
## [14,] 6849.168       6669.824
## [15,] 6758.793       6727.056
## [16,] 6788.850       6738.794
## [17,] 6809.263       6793.412
## [18,] 6838.312             NA
akurasi.arch <- accuracy(ts(hasil.arch[2:19]), head(data.test, n=length(data.test)))
akurasi.arch
##                ME     RMSE      MAE      MPE     MAPE
## Test set 109.4012 133.0107 109.4012 1.580178 1.580178

5. Autoregressive Distributed Lag (ARDL)

Semua data sudah stasioner dilakukan pengujian diatas. Syarat penggunaan ARDL hanya diperbolehkan differecting maksimal 1 kali dan data IHSG serta kurs dolar sudah memenuhi. Oleh karena itu, akan dilanjutkan analisis selanjutnya.

5.1 Uji Kointegrasi

datakoin <- ts(data.frame(train.trans,kurs.train))
modelkoin <- lm(datakoin[, 1] ~ datakoin[, 2] + 1) 
bound_result <- ur.df(residuals(modelkoin), type = "trend", lags = 5) 
bound_result
## 
## ############################################################### 
## # Augmented Dickey-Fuller Test Unit Root / Cointegration Test # 
## ############################################################### 
## 
## The value of the test statistic is: -2.4194 2.6849 3.5406
critical_values <- bound_result@cval
critical_values
##       1pct  5pct 10pct
## tau3 -3.99 -3.43 -3.13
## phi2  6.22  4.75  4.07
## phi3  8.43  6.49  5.47

Hasil yang diperoleh adalah nilai F hitung < nilai F kritis yaitu sebesar 2.6849 < 4.75 Maka hasil tersebut menunjukkan bahwa kita menerima H0, yang berarti data-data tersebut tidak memiliki nilai kointegrasi. Artinya, terdapat tidak hubungan jangka panjang antara peubah endogen dan eksogen.

5.2 Penentuan lag optimum

library(urca)
dff <- ardlBoundOrders(data = data.frame(train.trans, kurs.train), ic="AIC", formula = train.trans~ kurs.train)
min_p=c()
for(i in 1:15){
  min_p[i]=min(dff$Stat.table[[i]])
}
q_opt=which(min_p==min(min_p))
p_opt=which(dff$Stat.table[[q_opt]]==min(dff$Stat.table[[q_opt]]))
data.frame("q_optimum" = q_opt, "p_optimum" = p_opt, "AIC"=dff$min.Stat)
##   q_optimum p_optimum     AIC
## 1        15         1 10512.3

Dari tabel di atas, dapat terlihat bahwa nilai AIC terendah didapat ketika p = 1 dan q = 15, yaitu sebesar 10512.3. Artinya, model autoregressive optimum didapat ketika p = 1 dan q = 15

5.3 Pembentukan Model ARDL

model.ardl = ardlDlm(x = as.vector(kurs.train), y = as.vector(train.trans), p = 1, q = 15)
summary(model.ardl)
## 
## Time series regression with "ts" data:
## Start = 16, End = 171
## 
## Call:
## dynlm(formula = as.formula(model.text), data = data, start = 1)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -5.183e+14 -5.277e+13  5.407e+12  6.079e+13  3.561e+14 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  3.003e+14  1.066e+14   2.818 0.005539 ** 
## X.t         -2.458e-02  6.926e-03  -3.548 0.000531 ***
## X.1          1.837e-02  7.052e-03   2.605 0.010193 *  
## Y.1          9.282e-01  8.395e-02  11.057  < 2e-16 ***
## Y.2         -6.984e-02  1.143e-01  -0.611 0.542113    
## Y.3         -6.751e-02  1.137e-01  -0.594 0.553497    
## Y.4          1.703e-01  1.150e-01   1.481 0.141007    
## Y.5         -4.816e-02  1.171e-01  -0.411 0.681398    
## Y.6         -1.322e-01  1.150e-01  -1.150 0.252232    
## Y.7          1.495e-01  1.153e-01   1.297 0.196788    
## Y.8          1.302e-01  1.154e-01   1.128 0.261379    
## Y.9         -8.348e-02  1.159e-01  -0.720 0.472692    
## Y.10        -2.919e-02  1.148e-01  -0.254 0.799656    
## Y.11        -1.587e-02  1.145e-01  -0.139 0.889973    
## Y.12        -5.883e-02  1.165e-01  -0.505 0.614250    
## Y.13         1.846e-01  1.169e-01   1.579 0.116513    
## Y.14        -4.961e-02  1.155e-01  -0.429 0.668262    
## Y.15        -4.617e-03  8.229e-02  -0.056 0.955341    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.197e+14 on 138 degrees of freedom
## Multiple R-squared:  0.9624, Adjusted R-squared:  0.9578 
## F-statistic:   208 on 17 and 138 DF,  p-value: < 2.2e-16

5.5 Uji Diagnostik Model ARDL

5.5.1 Sisaan Menyebar Normal

sisaan.ardl <- residuals(model.ardl)
## Time Series:
## Start = 16 
## End = 171 
## Frequency = 1 
##            16            17            18            19            20 
## -2.282015e+13  6.091972e+12  4.120148e+12  1.066534e+14  5.818191e+13 
##            21            22            23            24            25 
##  1.038081e+13 -3.039718e+13 -7.209966e+13 -1.986111e+13 -3.737247e+13 
##            26            27            28            29            30 
## -2.785812e+13  8.018795e+12 -1.792312e+13 -3.415348e+13 -1.991192e+12 
##            31            32            33            34            35 
## -1.282496e+13  2.207349e+13  5.789219e+13  1.124593e+14 -5.634680e+12 
##            36            37            38            39            40 
##  1.010425e+14  1.627605e+14 -4.945055e+13 -3.336927e+13  2.379957e+14 
##            41            42            43            44            45 
##  8.898183e+13 -5.048000e+13 -3.424461e+14  1.837358e+14 -3.790228e+13 
##            46            47            48            49            50 
##  1.491871e+13  9.070095e+13 -3.345471e+13  2.069632e+13  7.967769e+12 
##            51            52            53            54            55 
## -9.617690e+13 -1.404148e+14 -1.561502e+13 -8.235670e+13 -1.380776e+14 
##            56            57            58            59            60 
## -1.804726e+13 -2.014478e+14 -1.251928e+14 -1.385075e+14 -8.246352e+12 
##            61            62            63            64            65 
##  1.056477e+14 -9.306839e+13 -8.383263e+13  3.648592e+12 -6.694860e+12 
##            66            67            68            69            70 
## -1.607066e+13  3.383667e+13  1.488628e+12 -9.574909e+13  6.439255e+13 
##            71            72            73            74            75 
## -7.570334e+13 -7.733108e+13  2.651721e+12 -3.285623e+13 -1.171723e+14 
##            76            77            78            79            80 
##  2.207428e+13 -2.525649e+13  2.004430e+13  2.154796e+14  1.372185e+14 
##            81            82            83            84            85 
##  2.941805e+13 -1.404682e+13  1.701889e+13  4.269816e+13  1.130549e+14 
##            86            87            88            89            90 
## -1.432263e+14 -3.888891e+13  7.036545e+13 -1.092568e+14 -6.153404e+13 
##            91            92            93            94            95 
##  4.033241e+13  7.049476e+13 -9.293989e+13  5.456125e+13 -9.406409e+13 
##            96            97            98            99           100 
##  4.816277e+13  6.880190e+13  6.073466e+13  2.091557e+13  6.012254e+13 
##           101           102           103           104           105 
## -6.799480e+13  4.490530e+13  9.313176e+13  1.189246e+14  1.686950e+14 
##           106           107           108           109           110 
##  4.360608e+13  5.212242e+12  9.277669e+13 -5.183318e+14 -2.827594e+14 
##           111           112           113           114           115 
##  3.315096e+14 -1.415123e+12  1.315633e+14 -6.547306e+13 -2.035621e+14 
##           116           117           118           119           120 
##  1.177062e+14 -2.153443e+14 -2.906855e+13 -1.442224e+14  1.394994e+14 
##           121           122           123           124           125 
## -1.116628e+14  2.477688e+14  1.046807e+14  1.014686e+14  5.601380e+12 
##           126           127           128           129           130 
##  1.255280e+14  1.182125e+14 -3.623985e+13  3.549516e+13 -9.468035e+13 
##           131           132           133           134           135 
## -2.185239e+12 -1.472893e+14  3.560589e+14  5.642702e+13  6.433975e+13 
##           136           137           138           139           140 
##  6.095036e+13  8.698502e+13  1.062355e+13 -2.143001e+13 -2.878748e+14 
##           141           142           143           144           145 
##  1.133472e+14 -4.438855e+13  4.729582e+13 -1.444027e+14 -1.607107e+14 
##           146           147           148           149           150 
##  1.800487e+14 -1.744257e+13  5.445831e+13  6.733127e+13  7.221085e+12 
##           151           152           153           154           155 
## -5.012627e+13  2.308814e+13  8.263975e+13 -1.493257e+14  3.231994e+13 
##           156           157           158           159           160 
## -2.472883e+13 -2.807439e+13  7.535927e+12  1.145689e+13  4.393110e+13 
##           161           162           163           164           165 
## -1.544928e+14 -6.696902e+13  8.110800e+12 -5.965718e+13 -6.952441e+13 
##           166           167           168           169           170 
##  2.600163e+13  8.085457e+12 -9.125386e+13  3.959421e+13  1.176869e+14 
##           171 
##  1.327857e+14
ks.test(sisaan.ardl,"pnorm")
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  sisaan.ardl
## D = 0.53205, p-value < 2.2e-16
## alternative hypothesis: two-sided

Pada tahapan ini uji formal yang digunakan untuk normalitas adalah uji Kolmogorov-Smirnov (KS). Hipotesis pada uji KS adalah sebagai berikut.

\(H_0\) : Sisaan menyebar normal

\(H_1\) : Sisaan tidak menyebar normal

Berdasarkan uji KS tersebut, didapat p-value sebesar kurang dari 2.2e-16 < 5% sehingga tolak \(H_0\) dan menandakan bahwa sisaan tidak menyebar normal. Hal ini sesuai dengan hasil eksplorasi menggunakan plot kuantil-kuantil normal.

5.5.2 Sisaan saling bebas/tidak ada autokorelasi

Box.test(sisaan.ardl, type = "Ljung")  #tak tolak H0 > sisaan saling bebas
## 
##  Box-Ljung test
## 
## data:  sisaan.ardl
## X-squared = 0.0010268, df = 1, p-value = 0.9744

Selanjutnya akan dilakukan uji formal untuk kebebasan sisaan menggunakan uji Ljung-Box. Hipotesis yang digunakan adalah sebagai berikut.

\(H_0\) : Sisaan saling bebas

\(H_1\) : Sisaan tidak tidak saling bebas

Berdasarkan uji Ljung-Box tersebut, didapat p-value sebesar 0.9744 yang lebih besar dari taraf nyata 5% sehingga tak tolak \(H_0\) dan menandakan bahwa sisaan saling bebas.

5.5.3 Sisaan homogen

Box.test((sisaan.ardl)^2, type = "Ljung")  #tak tolak H0 > sisaan homogen
## 
##  Box-Ljung test
## 
## data:  (sisaan.ardl)^2
## X-squared = 6.7414, df = 1, p-value = 0.00942

Hipotesis yang digunakan untuk uji kehomogenan ragam adalah sebagai berikut.

\(H_0\) : Ragam sisaan homogen

\(H_1\) : Ragam sisaan tidak homogen

Berdasarkan uji Ljung-Box terhadap sisaan kuadrat tersebut, didapat p-value sebesar 0.00942 yang lebih kecil dari taraf nyata 5% sehingga tolak \(H_0\) dan menandakan bahwa ragam sisaan tidak homogen. Akan tetapi, jika digunakan taraf nyata 1% menghasilkan tolak \(H_0\) sehingga menandakan bahwa ragam sisaan tidak homogen.

5.5 Akurasi Model ARDL

# Hitung MAPE secara manual
mape_manual <- mean(abs(sisaan.ardl / fitted(model.ardl))) * 100
## Time Series:
## Start = 16 
## End = 171 
## Frequency = 1 
##   [1] 6.903604e+14 6.971472e+14 6.959922e+14 6.517018e+14 7.147985e+14
##   [6] 8.068223e+14 7.842313e+14 7.054976e+14 6.750030e+14 6.357056e+14
##  [11] 6.170224e+14 6.442478e+14 6.962566e+14 7.171638e+14 6.936124e+14
##  [16] 8.232444e+14 8.673471e+14 9.057973e+14 1.006240e+15 1.145488e+15
##  [21] 1.142490e+15 1.225754e+15 1.352992e+15 1.311383e+15 1.295549e+15
##  [26] 1.561034e+15 1.632917e+15 1.523549e+15 1.248415e+15 1.537123e+15
##  [31] 1.493392e+15 1.427182e+15 1.567896e+15 1.613632e+15 1.624255e+15
##  [36] 1.569584e+15 1.446341e+15 1.373349e+15 1.454506e+15 1.448709e+15
##  [41] 1.310264e+15 1.436608e+15 1.368743e+15 1.249324e+15 1.178318e+15
##  [46] 1.247580e+15 1.473569e+15 1.385995e+15 1.311813e+15 1.322688e+15
##  [51] 1.346841e+15 1.325957e+15 1.384630e+15 1.453331e+15 1.416515e+15
##  [56] 1.496493e+15 1.400123e+15 1.329460e+15 1.442045e+15 1.497107e+15
##  [61] 1.392942e+15 1.450980e+15 1.485280e+15 1.549640e+15 1.798885e+15
##  [66] 1.918856e+15 1.901588e+15 1.859594e+15 1.914172e+15 1.926546e+15
##  [71] 1.996872e+15 1.866627e+15 1.888703e+15 2.008953e+15 1.916702e+15
##  [76] 1.835935e+15 1.946201e+15 2.100125e+15 1.992467e+15 2.044419e+15
##  [81] 2.004981e+15 2.089033e+15 2.196555e+15 2.230293e+15 2.244044e+15
##  [86] 2.364553e+15 2.294900e+15 2.311344e+15 2.391971e+15 2.534904e+15
##  [91] 2.697223e+15 2.720607e+15 2.638038e+15 2.707501e+15 2.177926e+15
##  [96] 1.959139e+15 2.438641e+15 2.530473e+15 2.587580e+15 2.519242e+15
## [101] 2.342748e+15 2.346357e+15 2.093004e+15 2.102093e+15 2.110129e+15
## [106] 2.446303e+15 2.271502e+15 2.478661e+15 2.544997e+15 2.586406e+15
## [111] 2.527948e+15 2.633426e+15 2.677449e+15 2.620057e+15 2.552146e+15
## [116] 2.440143e+15 2.303760e+15 2.069416e+15 2.422388e+15 2.399735e+15
## [121] 2.464800e+15 2.428769e+15 2.464133e+15 2.449489e+15 2.321236e+15
## [126] 2.040167e+15 2.183373e+15 2.155221e+15 2.141001e+15 2.106747e+15
## [131] 2.053901e+15 2.282816e+15 2.227709e+15 2.173643e+15 2.253864e+15
## [136] 2.260314e+15 2.132252e+15 2.012190e+15 2.138383e+15 2.058737e+15
## [141] 2.169511e+15 2.157127e+15 2.154059e+15 2.154240e+15 2.243503e+15
## [146] 2.277116e+15 2.091437e+15 2.007676e+15 2.059176e+15 2.005538e+15
## [151] 1.981931e+15 2.005279e+15 2.034834e+15 1.930046e+15 1.917299e+15
## [156] 2.094206e+15
cat("MAPE (Manual):", mape_manual, "\n")
## MAPE (Manual): 4.592986

5.6 Peramalan Model ARDL

ramalan<- dLagM::forecast(model.ardl, x = kurs.test, h = 18) 
ramalan
## $forecasts
##  [1] 2.165809e+15 2.128349e+15 2.081399e+15 2.050650e+15 1.985063e+15
##  [6] 1.934709e+15 1.940246e+15 1.938064e+15 1.917123e+15 1.868490e+15
## [11] 1.809102e+15 1.721245e+15 1.681505e+15 1.578019e+15 1.519777e+15
## [16] 1.564973e+15 1.566915e+15 1.609039e+15
## 
## $call
## forecast.ardlDlm(model = model.ardl, x = kurs.test, h = 18)
## 
## attr(,"class")
## [1] "forecast.ardlDlm" "dLagM"
data.ramalan <- ramalan$forecasts
pt_1 <- data.train[length(data.train)] #nilai akhir data latih
hasil.ardl <- data.ramalan^(1/4)
hasil.ardl
##  [1] 6821.895 6792.204 6754.432 6729.346 6674.882 6632.143 6636.883 6635.017
##  [9] 6617.021 6574.650 6521.774 6441.109 6403.605 6302.721 6243.742 6289.653
## [17] 6291.603 6333.469
perbandingan.ardl<-matrix(data=c(head(data.test, n=length(data.test)), hasil.ardl),
                     nrow = length(data.test), ncol = 2)
colnames(perbandingan.ardl)<-c("Aktual","Hasil Forecast")
perbandingan.ardl
##         Aktual Hasil Forecast
##  [1,] 6880.802       6821.895
##  [2,] 6900.230       6792.204
##  [3,] 6852.842       6754.432
##  [4,] 6879.979       6729.346
##  [5,] 6859.912       6674.882
##  [6,] 6895.443       6632.143
##  [7,] 6977.654       6636.883
##  [8,] 6924.780       6635.017
##  [9,] 6982.791       6617.021
## [10,] 7016.844       6574.650
## [11,] 6939.892       6521.774
## [12,] 6888.518       6441.109
## [13,] 6926.780       6403.605
## [14,] 6849.168       6302.721
## [15,] 6758.793       6243.742
## [16,] 6788.850       6289.653
## [17,] 6809.263       6291.603
## [18,] 6838.312       6333.469
akurasi.ardl <- accuracy(ts(hasil.ardl), head(data.test, n=length(data.test)))
akurasi.ardl
##                ME     RMSE      MAE      MPE     MAPE
## Test set 348.5945 384.7881 348.5945 5.065591 5.065591

6. Perbandingan ARIMAX-ARCH dan ARDL

par(mfrow=c(1,2))
hasil.forch.arch <- as.data.frame(hasil.arch[c(2:18)])
datadate2 <- data$Date
datadate2 <- as.data.frame(datadate2[c(173:189)])
dataplot2 <- cbind(datadate2, hasil.forch.arch)
dataplot2 <- as.data.frame(dataplot2)
colnames(dataplot2)<- c("date","forecast arch")
ggplot(dataplot2, aes(x = date, y = `forecast arch`)) +
  geom_line(color = "black", linetype = "solid", size = 1) +
  geom_point(color = "blue", size = 3) +
  labs(title = "Plot Time Series Harga Penutupan IHSG", x = "Tahun", y = "Harga Penutupan IHSG") +
  theme_minimal()+
  theme(plot.title = element_text(size = 20, face = "bold", hjust =0.5))

hasil.forch.ardl <- as.data.frame(hasil.ardl)
datadate3 <- data$Date
datadate3 <- as.data.frame(datadate3[c(172:189)])
dataplot3 <- cbind(datadate3, hasil.forch.ardl)
dataplot3 <- as.data.frame(dataplot3)
colnames(dataplot3)<- c("date","forecast ardl")
ggplot(dataplot3, aes(x = date, y = `forecast ardl`)) +
  geom_line(color = "black", linetype = "solid", size = 1) +
  geom_point(color = "blue", size = 3) +
  labs(title = "Plot Time Series Harga Penutupan IHSG", x = "Tahun", y = "Harga Penutupan IHSG") +
  theme_minimal()+
  theme(plot.title = element_text(size = 20, face = "bold", hjust =0.5))

perbandingan_arimax_ardl <- data.frame(Aktual=c(test.ts),
                           Predik_ARIMAX = hasil.arch[c(2,19)],
                           Predik_ARDL = hasil.ardl)
perbandingan_arimax_ardl
##      Aktual Predik_ARIMAX Predik_ARDL
## 1  6880.802      6853.969    6821.895
## 2  6900.230            NA    6792.204
## 3  6852.842      6853.969    6754.432
## 4  6879.979            NA    6729.346
## 5  6859.912      6853.969    6674.882
## 6  6895.443            NA    6632.143
## 7  6977.654      6853.969    6636.883
## 8  6924.780            NA    6635.017
## 9  6982.791      6853.969    6617.021
## 10 7016.844            NA    6574.650
## 11 6939.892      6853.969    6521.774
## 12 6888.518            NA    6441.109
## 13 6926.780      6853.969    6403.605
## 14 6849.168            NA    6302.721
## 15 6758.793      6853.969    6243.742
## 16 6788.850            NA    6289.653
## 17 6809.263      6853.969    6291.603
## 18 6838.312            NA    6333.469
akurasi1<- data.frame(accuracy(ts(hasil.arch[2:19]), head(data.test, n=length(data.test))))
akurasi2<- data.frame(accuracy(ts(hasil.ardl), head(data.test, n=length(data.test))))
akurasi <- rbind(akurasi1,akurasi2)
rownames(akurasi)<- c("ARIMAX","ARDL")
print(akurasi)
##              ME     RMSE      MAE      MPE     MAPE
## ARIMAX 109.4012 133.0107 109.4012 1.580178 1.580178
## ARDL   348.5945 384.7881 348.5945 5.065591 5.065591

Berdasarkan nilai akurasi kedua model di atas, terlihat MAPE ARIMAX(2,1,2) menghasilkan MAPE yang lebih kecil dibandingan ARDL(15,8). Oleh karena itu, model ARIMAX(2,1,2) dianggap lebih baik dalam meramalkan harga penutupan IHSG dengan peubah eksogennya nya kurs dolar.

7. Peramalan 22 Periode Ke Depan

forc = ugarchforecast(m.11, data = data.ts, n.ahead = 22,n.roll=0,  external.forecasts = list(mregfor = kursdif, vregfor = NULL))
print(forc)
## 
## *------------------------------------*
## *       GARCH Model Forecast         *
## *------------------------------------*
## Model: sGARCH
## Horizon: 22
## Roll Steps: 0
## Out of Sample: 22
## 
## 0-roll forecast [T0=1970-05-11]:
##       Series  Sigma
## T+1  106.558  97.17
## T+2   15.821 101.82
## T+3  139.262 102.27
## T+4  -14.109 102.31
## T+5   18.363 102.31
## T+6   41.739 102.31
## T+7   30.028 102.31
## T+8  191.163 102.31
## T+9  -49.274 102.31
## T+10   2.697 102.31
## T+11 -23.306 102.31
## T+12 -75.300 102.31
## T+13  26.059 102.31
## T+14 -64.921 102.31
## T+15  23.443 102.31
## T+16   5.241 102.31
## T+17 -10.362 102.31
## T+18 -33.761 102.31
## T+19 -10.374 102.31
## T+20  42.903 102.31
## T+21 -29.879 102.31
## T+22 -28.584 102.31
plot(forc,which=1)

datafix<-data_close[nrow(data_close),]
pt_2 <- data.ts[length(data.ts)] 
hasil.forc.Diff2 <- forc@forecast$seriesFor[,1]
peramalanfix <- diffinv(hasil.forc.Diff2, differences = 1) + pt_2
forecast <- as.data.frame(peramalanfix)
datadate4 <- data.frame(
  date = seq(as.Date("2023-11-20"), as.Date("2024-04-22"), by = "weeks")
)
dataplot4 <- cbind(datadate4, forecast)
dataplot4 <- as.data.frame(dataplot4)
colnames(dataplot4)<- c("date","forecast")
ggplot(dataplot4, aes(x = date, y = `forecast`)) +
  geom_line(color = "black", linetype = "solid", size = 1) +
  geom_point(color = "blue", size = 3) +
  labs(title = "Plot Time Series Harga Penutupan IHSG", x = "Tahun", y = "Harga Penutupan IHSG") +
  theme_minimal()+
  theme(plot.title = element_text(size = 20, face = "bold", hjust =0.5))