Analisis deret waktu adalah suatu metode untuk menganalisis dan memodelkan data statistik yang dikumpulkan dalam urutan waktu. Data deret waktu terdiri dari serangkaian observasi yang diambil pada interval waktu yang konsisten, seperti data bulanan, mingguan, harian, atau bahkan lebih sering.
Tujuan dari analisis deret waktu adalah untuk memahami pola, tren, siklus, dan fluktuasi yang terdapat dalam data seiring waktu. Hal ini melibatkan identifikasi komponen penting dalam deret waktu, seperti tren jangka panjang, fluktuasi musiman, pola siklus, dan variabilitas acak.
Selanjutnya data yang digunakan kemudian ditransformasi dalam bentuk time series dengan menggunakan fungsi dari ts.data
library(readxl)
## Warning: package 'readxl' was built under R version 4.3.2
data <- read_excel("Saham BNI 2.xlsx",
range = "A1:B228")
data.ts <- ts(data,
frequency= 12,
start = c(2005,1))
print(data.ts)
## Periode Saham
## Jan 2005 1130803200 30
## Feb 2005 1128124800 161
## Mar 2005 1125532800 49
## Apr 2005 1122854400 116
## May 2005 1120176000 108
## Jun 2005 1117584000 23
## Jul 2005 1114905600 126
## Aug 2005 1112313600 16
## Sep 2005 1109635200 167
## Oct 2005 1107216000 130
## Nov 2005 1104537600 17
## Dec 2005 1164931200 171
## Jan 2006 1162339200 150
## Feb 2006 1159660800 140
## Mar 2006 1157068800 149
## Apr 2006 1154390400 193
## May 2006 1151712000 1
## Jun 2006 1149120000 61
## Jul 2006 1146441600 8
## Aug 2006 1143849600 45
## Sep 2006 1141171200 110
## Oct 2006 1138752000 198
## Nov 2006 1136073600 192
## Dec 2006 1196467200 14
## Jan 2007 1193875200 94
## Feb 2007 1191196800 128
## Mar 2007 1188604800 6
## Apr 2007 1185926400 53
## May 2007 1183248000 113
## Jun 2007 1180656000 59
## Jul 2007 1177977600 148
## Aug 2007 1175385600 4
## Sep 2007 1172707200 121
## Oct 2007 1170288000 178
## Nov 2007 1167609600 35
## Dec 2007 1228089600 96
## Jan 2008 1225497600 106
## Feb 2008 1199145600 170
## Mar 2008 1220227200 52
## Apr 2008 1217548800 41
## May 2008 1214870400 4
## Jun 2008 1212278400 78
## Jul 2008 1209600000 169
## Aug 2008 1207008000 180
## Sep 2008 1205107200 143
## Oct 2008 1202688000 84
## Nov 2008 1200096000 190
## Dec 2008 1259625600 138
## Jan 2009 1257120000 82
## Feb 2009 1254528000 135
## Mar 2009 1252022400 136
## Apr 2009 1249430400 197
## May 2009 1246838400 185
## Jun 2009 1244332800 200
## Jul 2009 1241740800 48
## Aug 2009 1239235200 80
## Sep 2009 1236643200 171
## Oct 2009 1234310400 109
## Nov 2009 1231718400 110
## Dec 2009 1291161600 118
## Jan 2010 1288656000 68
## Feb 2010 1286064000 21
## Mar 2010 1283558400 147
## Apr 2010 1280966400 152
## May 2010 1278374400 142
## Jun 2010 1275868800 73
## Jul 2010 1273276800 149
## Aug 2010 1270771200 177
## Sep 2010 1268179200 40
## Oct 2010 1265846400 117
## Nov 2010 1263254400 145
## Dec 2010 1322697600 101
## Jan 2011 1320192000 168
## Feb 2011 1317600000 92
## Mar 2011 1315094400 13
## Apr 2011 1312502400 26
## May 2011 1309910400 50
## Jun 2011 1307404800 15
## Jul 2011 1304812800 93
## Aug 2011 1302307200 27
## Sep 2011 1299715200 119
## Oct 2011 1297382400 202
## Nov 2011 1294790400 111
## Dec 2011 1354320000 170
## Jan 2012 1351814400 176
## Feb 2012 1349222400 5
## Mar 2012 1346716800 154
## Apr 2012 1344124800 207
## May 2012 1341100800 95
## Jun 2012 1338508800 191
## Jul 2012 1335830400 139
## Aug 2012 1333238400 46
## Sep 2012 1330560000 85
## Oct 2012 1328054400 115
## Nov 2012 1325376000 29
## Dec 2012 1385856000 137
## Jan 2013 1385856000 3
## Feb 2013 1385856000 66
## Mar 2013 1385856000 70
## Apr 2013 1385856000 127
## May 2013 1385856000 36
## Jun 2013 1385856000 102
## Jul 2013 1385856000 173
## Aug 2013 1385856000 42
## Sep 2013 1385856000 146
## Oct 2013 1385856000 33
## Nov 2013 1385856000 85
## Dec 2013 1417392000 24
## Jan 2014 1414800000 25
## Feb 2014 1412121600 184
## Mar 2014 1409529600 114
## Apr 2014 1406851200 141
## May 2014 1404172800 174
## Jun 2014 1401580800 2
## Jul 2014 1398902400 18
## Aug 2014 1396310400 96
## Sep 2014 1393632000 195
## Oct 2014 1391212800 134
## Nov 2014 1388534400 38
## Dec 2014 1448928000 120
## Jan 2015 1446336000 62
## Feb 2015 1443657600 75
## Mar 2015 1441065600 158
## Apr 2015 1438387200 209
## May 2015 1435708800 10
## Jun 2015 1433116800 44
## Jul 2015 1430438400 205
## Aug 2015 1427846400 172
## Sep 2015 1425168000 206
## Oct 2015 1422748800 74
## Nov 2015 1420070400 162
## Dec 2015 1480550400 1
## Jan 2016 1477958400 124
## Feb 2016 1475280000 32
## Mar 2016 1472688000 151
## Apr 2016 1470009600 165
## May 2016 1467331200 125
## Jun 2016 1464739200 116
## Jul 2016 1462060800 188
## Aug 2016 1459468800 12
## Sep 2016 1456790400 159
## Oct 2016 1454284800 132
## Nov 2016 1451606400 137
## Dec 2016 1512086400 1
## Jan 2017 1509494400 156
## Feb 2017 1506816000 187
## Mar 2017 1504224000 203
## Apr 2017 1501545600 179
## May 2017 1498867200 64
## Jun 2017 1496275200 1
## Jul 2017 1493596800 133
## Aug 2017 1491004800 31
## Sep 2017 1488326400 47
## Oct 2017 1485907200 34
## Nov 2017 1483228800 72
## Dec 2017 1543622400 19
## Jan 2018 1541030400 122
## Feb 2018 1538352000 163
## Mar 2018 1535760000 157
## Apr 2018 1533081600 65
## May 2018 1530403200 107
## Jun 2018 1527811200 160
## Jul 2018 1525132800 122
## Aug 2018 1522540800 60
## Sep 2018 1519862400 77
## Oct 2018 1517443200 22
## Nov 2018 1514764800 87
## Dec 2018 1575158400 81
## Jan 2019 1572566400 199
## Feb 2019 1569888000 51
## Mar 2019 1567296000 200
## Apr 2019 1564617600 89
## May 2019 1561939200 208
## Jun 2019 1559347200 201
## Jul 2019 1556668800 105
## Aug 2019 1554076800 186
## Sep 2019 1551398400 94
## Oct 2019 1549843200 196
## Nov 2019 1577836800 56
## Dec 2019 1606780800 100
## Jan 2020 1604188800 204
## Feb 2020 1601510400 144
## Mar 2020 1598918400 103
## Apr 2020 1596240000 54
## May 2020 1593561600 99
## Jun 2020 1590969600 112
## Jul 2020 1588291200 131
## Aug 2020 1585699200 58
## Sep 2020 1583020800 69
## Oct 2020 1580515200 137
## Nov 2020 1577836800 43
## Dec 2020 1638316800 175
## Jan 2021 1635724800 182
## Feb 2021 1633046400 7
## Mar 2021 1630454400 88
## Apr 2021 1627776000 98
## May 2021 1625097600 1
## Jun 2021 1622505600 20
## Jul 2021 1619827200 57
## Aug 2021 1617235200 104
## Sep 2021 1614556800 11
## Oct 2021 1612137600 123
## Nov 2021 1609459200 90
## Dec 2021 1669852800 155
## Jan 2022 1667260800 71
## Feb 2022 1664582400 1
## Mar 2022 1661990400 194
## Apr 2022 1659312000 76
## May 2022 1656633600 91
## Jun 2022 1654041600 181
## Jul 2022 1651363200 37
## Aug 2022 1648771200 164
## Sep 2022 1646092800 129
## Oct 2022 1643673600 153
## Nov 2022 1640995200 28
## Dec 2022 1701388800 183
## Jan 2023 1698796800 39
## Feb 2023 1696118400 63
## Mar 2023 1693526400 55
## Apr 2023 1690848000 67
## May 2023 1688169600 97
## Jun 2023 1685577600 9
## Jul 2023 1682899200 166
## Aug 2023 1680307200 189
## Sep 2023 1677628800 83
## Oct 2023 1675209600 86
## Nov 2023 1672531200 79
plot(data.ts, xlab = "Periode",
ylab = "Saham",
col = "red",
main = "Saham")
points(data.ts, col ="red")
uji stasioner dilakukan untuk mengetahui apakah data deret waktu yang digunakan bersifat stasioner atau tidak stasioner. sifat kestasioneran (stasionary) sangat penting bagi data time series, karena jika suatu data time series tidak stasioner maka kita hanya dapat mempelajari perilakunya pada waktu tertentu, sedangkan untuk peramalan (forecasting) akan sulit untuk dilakukan. Pengujian terhadap keberadaan unit root untuk semua variabel yang dimasukkan kedalam model menunjukkan bahwa seluruh variabel pada level tidak mempunyai unit root atau dapat di katakan sema variabel stasioner. Dalam analisis ini menggunakan unit root dengan menggunakan pendekatan uji Argumented Dickey-Fuller (ADF) dan Kwiatkwoski-Philips-Schmidt-Shin (KPSS). Uji Argumented Dickey-Fuller (ADF) menggunakan fungsi adf.test dan Kwiatkwoski-Philips-Schmidt-Shin (KPSS) menggunakan fungsi kpss.test.
library(tseries)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
x<- rnorm(227)
adf.test (x)
## Warning in adf.test(x): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: x
## Dickey-Fuller = -5.8606, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
x<-rnorm(227)
kpss.test(x)
## Warning in kpss.test(x): p-value greater than printed p-value
##
## KPSS Test for Level Stationarity
##
## data: x
## KPSS Level = 0.2086, Truncation lag parameter = 4, p-value = 0.1
Berdasarkan hasil uji Argumented Dickey-Fuller diperoleh p-value sebesar 0.1 > 0.05 yang berarti bahwa H0 gagal ditolak atau data tidak stasioner. karena data tidak stasioner maka langka selanjutnya dilakukan differencing untuk membuat data stasioner sebelum dilakukan identifikasi model tentatif.
Apabila dalam uji ADF ditemukan data yang tidak stasioner, maka harus menstasionerkan data terlebih dahulu dengan proses differencing. Proses differencing dilakukan sampai data menjadi stasioner.
differenced_data <-diff(data.ts)
data.dif1 <-diff(data.ts,
differences = 1)
plot(data.dif1,
main = "Data yang Telah di-Defferencing")
y <- diffinv(x)
adf.test(y)
##
## Augmented Dickey-Fuller Test
##
## data: y
## Dickey-Fuller = -1.5274, Lag order = 6, p-value = 0.7744
## alternative hypothesis: stationary
setelah melakukan differencing hasil dari p-value 0.07204 > 0.05, artinya bahwa H0 gagal ditolak atau data tidak stasioner setelah melakukan 1 kali differncing. karena nilai p-value belum stasioner jadi kita perlu melakukan differencing kedua.
differenced_data <-diff(data.ts)
data.dif2 <-diff(data.ts,
lag = 2)
plot(data.dif2,
main = "Data yang Telah di-Defferencing")
y <- lag(x)
adf.test(y)
## Warning in adf.test(y): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: y
## Dickey-Fuller = -4.6563, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
Hasilnya memerlukan 2 kali differencing untuk membuat data stasioner. jadi model dasar ini bahwa model optimal yang hanya membutuhkan 2 kali differencing.
Plot ACF (Autocorrelation Function) dan PACF(Partial Autocorrelation Function) dari data yang telah didifferencing. plot ini akan membantu menentukan nilai p(lag untuk model AR) dan q(lag untuk model MA). selanjutnya membuat model ARIMA menggunakan fungsi auto.arima, fungsi otomatis ini akan memberikan hasil yang optimal berdasarkan pola korelasi dalam data dan memilih nilai p, d, dan q yang sesuai untuk model ARIMA.
pacf(data.dif2,
main = "Plot PACF Data Saham")
library(forecast)
## Warning: package 'forecast' was built under R version 4.3.2
auto.arima(x,
trace = TRUE)
##
## Fitting models using approximations to speed things up...
##
## ARIMA(2,0,2) with non-zero mean : 650.6831
## ARIMA(0,0,0) with non-zero mean : 644.3691
## ARIMA(1,0,0) with non-zero mean : 645.1113
## ARIMA(0,0,1) with non-zero mean : 644.5829
## ARIMA(0,0,0) with zero mean : 647.1388
## ARIMA(1,0,1) with non-zero mean : 647.0008
##
## Now re-fitting the best model(s) without approximations...
##
## ARIMA(0,0,0) with non-zero mean : 644.3691
##
## Best model: ARIMA(0,0,0) with non-zero mean
## Series: x
## ARIMA(0,0,0) with non-zero mean
##
## Coefficients:
## mean
## -0.1450
## s.e. 0.0658
##
## sigma^2 = 0.9874: log likelihood = -320.16
## AIC=644.32 AICc=644.37 BIC=651.17
Model yang kita peroleh adalah ARIMA(0,0,0), tetapi yang kita prediksi sebelum diferencing optimum adalah 1, model ARIMA (0,0,0) yang sangat sederhana tanpa komponen AR dan MA, sehingga memiliki keterbatasan dalam memodelkan tren, pola korelasi, atau perubahan yang kompleks dalam data deret waktu. Model ini hanya cocok untuk data yang stasioner dan tanpa pola korelasi yang signifikan.
Model ARIMA dengan parameter yang telah ditentukan menggunaakan data Saham BNI sebelum Desember 2023
data.train <- ts(data.ts[1:227,1])
data <- ts(data.train,
frequency = 12,
start = c(2005,1))
print(data)
## Jan Feb Mar Apr May Jun
## 2005 1130803200 1128124800 1125532800 1122854400 1120176000 1117584000
## 2006 1162339200 1159660800 1157068800 1154390400 1151712000 1149120000
## 2007 1193875200 1191196800 1188604800 1185926400 1183248000 1180656000
## 2008 1225497600 1199145600 1220227200 1217548800 1214870400 1212278400
## 2009 1257120000 1254528000 1252022400 1249430400 1246838400 1244332800
## 2010 1288656000 1286064000 1283558400 1280966400 1278374400 1275868800
## 2011 1320192000 1317600000 1315094400 1312502400 1309910400 1307404800
## 2012 1351814400 1349222400 1346716800 1344124800 1341100800 1338508800
## 2013 1385856000 1385856000 1385856000 1385856000 1385856000 1385856000
## 2014 1414800000 1412121600 1409529600 1406851200 1404172800 1401580800
## 2015 1446336000 1443657600 1441065600 1438387200 1435708800 1433116800
## 2016 1477958400 1475280000 1472688000 1470009600 1467331200 1464739200
## 2017 1509494400 1506816000 1504224000 1501545600 1498867200 1496275200
## 2018 1541030400 1538352000 1535760000 1533081600 1530403200 1527811200
## 2019 1572566400 1569888000 1567296000 1564617600 1561939200 1559347200
## 2020 1604188800 1601510400 1598918400 1596240000 1593561600 1590969600
## 2021 1635724800 1633046400 1630454400 1627776000 1625097600 1622505600
## 2022 1667260800 1664582400 1661990400 1659312000 1656633600 1654041600
## 2023 1698796800 1696118400 1693526400 1690848000 1688169600 1685577600
## Jul Aug Sep Oct Nov Dec
## 2005 1114905600 1112313600 1109635200 1107216000 1104537600 1164931200
## 2006 1146441600 1143849600 1141171200 1138752000 1136073600 1196467200
## 2007 1177977600 1175385600 1172707200 1170288000 1167609600 1228089600
## 2008 1209600000 1207008000 1205107200 1202688000 1200096000 1259625600
## 2009 1241740800 1239235200 1236643200 1234310400 1231718400 1291161600
## 2010 1273276800 1270771200 1268179200 1265846400 1263254400 1322697600
## 2011 1304812800 1302307200 1299715200 1297382400 1294790400 1354320000
## 2012 1335830400 1333238400 1330560000 1328054400 1325376000 1385856000
## 2013 1385856000 1385856000 1385856000 1385856000 1385856000 1417392000
## 2014 1398902400 1396310400 1393632000 1391212800 1388534400 1448928000
## 2015 1430438400 1427846400 1425168000 1422748800 1420070400 1480550400
## 2016 1462060800 1459468800 1456790400 1454284800 1451606400 1512086400
## 2017 1493596800 1491004800 1488326400 1485907200 1483228800 1543622400
## 2018 1525132800 1522540800 1519862400 1517443200 1514764800 1575158400
## 2019 1556668800 1554076800 1551398400 1549843200 1577836800 1606780800
## 2020 1588291200 1585699200 1583020800 1580515200 1577836800 1638316800
## 2021 1619827200 1617235200 1614556800 1612137600 1609459200 1669852800
## 2022 1651363200 1648771200 1646092800 1643673600 1640995200 1701388800
## 2023 1682899200 1680307200 1677628800 1675209600 1672531200
plot(data,
main = "Data Sebelum Desember 2023")
model_arima <- Arima(data, order = c(0,0,0))
summary(model_arima)
## Series: data
## ARIMA(0,0,0) with non-zero mean
##
## Coefficients:
## mean
## 1405007493
## s.e. 11931039
##
## sigma^2 = 2.992e+16: log likelihood = -4627.47
## AIC=9258.94 AICc=9258.99 BIC=9265.79
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 1.85163e-07 172582536 148758976 -1.554909 10.84908 4.714233
## ACF1
## Training set 0.9844847
RMSE adalah akar dari rata-rata kuadrat dari selisih anatar nilai-niali aktual dan prediksi. RMSE adalah ukuran kesalahan model yang umumnya digunakan.Dalam konteks ini, RMSE adalah sekitar 172582536, yang berarti rata-rata selisih antara prediksi dan nilai aktual adalah 172582536.