Analisis Deret Waktu

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

1.1 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")

1.2 Uji Stasioner

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.

1.3 Differencing

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.

1.4 ACF dan PACF Plot:

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.