Tugas Minggu 6
Pada Kesempatan kali ini, kami dari Kelompok 1 mendapatkan tema Ekonomi. Sehubungan dengan hal tersebut, kami memutuskan untuk mengambil dataset Saham BBCA sebagai acuan data deret waktu kami. Harga Saham yang kami ambil adalah harga penutupan saham Mingguan dari Tahun (2004- 2024). Harga Mingguan Saham sejatinya adalah harga terakhir penutupan sebuah saham pada rentan waktu dimana saham itu dijual di bursa dalam suatu minggu, yang adalah Hari Jumat Pukul 3 Sore.
Saya Mendapat Bagian rentetatan Saham dari Tahun 2012- 2016.
Import Data
## Warning: package 'ggplot2' was built under R version 4.3.2
## Warning: package 'tsibble' was built under R version 4.3.3
## Registered S3 method overwritten by 'tsibble':
## method from
## as_tibble.grouped_df dplyr
##
## Attaching package: 'tsibble'
## The following objects are masked from 'package:base':
##
## intersect, setdiff, union
## Warning: package 'tseries' was built under R version 4.3.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## Warning: package 'forecast' was built under R version 4.3.3
## Warning: package 'TSA' was built under R version 4.3.3
## 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
## Warning: package 'TTR' was built under R version 4.3.3
## Warning: package 'aTSA' was built under R version 4.3.2
##
## Attaching package: 'aTSA'
## The following object is masked from 'package:forecast':
##
## forecast
## The following objects are masked from 'package:tseries':
##
## adf.test, kpss.test, pp.test
## The following object is masked from 'package:graphics':
##
## identify
## Warning: package 'readxl' was built under R version 4.3.2
## # A tibble: 6 × 2
## Waktu `Harga Penutupan`
## <dttm> <dbl>
## 1 2012-07-09 00:00:00 1490
## 2 2012-07-16 00:00:00 1570
## 3 2012-07-23 00:00:00 1600
## 4 2012-07-30 00:00:00 1540
## 5 2012-08-06 00:00:00 1590
## 6 2012-08-13 00:00:00 1610
Mengubah Jenis Data
Data.ts<- ts(data$`Harga Penutupan`)
## Membuat Plot Untuk Melihat Pola Saham
ts.plot(Data.ts, xlab="Waktu", ylab="Harga Penutupan", main="Time Series Plot")
points(Data.ts)Dapat Dilihat Secara Eksplorasi Lewat Plot Time Series, Data ini memiliki Pola Tren. Tren pada data ini dapat dikatakan Tren yang positif karena terlihat adanya kenaikan berdasarkan waktu. Secara Visualisasi Kita dapat mengatakan Mungkin data ini Tidak stasioner dalam Rataan maupun dalam Ragam. Tidak stasioner dalam rataan karena adanya pola tren yang terbuat, tidak dalam ragam karena terdapat beberapa pola “Pita” yang berbeda di setiap urutan datanya.
Data Keseluruhan
Disini akan dicoba lihat pola secara keseluruhannya:
Plot Time Series
Dapat Dilihat Secara Eksplorasi Lewat Plot Time Series, Data ini memiliki Pola Tren. Tren pada data ini dapat dikatakan Tren yang positif karena terlihat adanya kenaikan berdasarkan waktu. Secara Visualisasi Kita dapat mengatakan Mungkin data ini Tidak stasioner dalam Rataan Tapi mungkin dalam Ragam. Tidak stasioner dalam rataan karena adanya pola tren yang terbuat, Stasioner dalam ragam karena terdapat beberapa pola “Pita” yang cenderung cukup sama di beberapa periode waktu.
Plot ACF
Dapat dilihat Dari Plot ACFnya bahkan sampai di LAG ke 20 saja masih Tails off slowly. Hal ini menunjukkan bahwa Data keseluruhan Penutupan Saham BBCA Periode 2012-2016 TIdak Stasioner dalam Rataan
Uji ADF
## Augmented Dickey-Fuller Test
## alternative: stationary
##
## Type 1: no drift no trend
## lag ADF p.value
## [1,] 0 0.96 0.909
## [2,] 1 1.31 0.952
## [3,] 2 1.25 0.945
## [4,] 3 1.23 0.943
## [5,] 4 1.38 0.957
## Type 2: with drift no trend
## lag ADF p.value
## [1,] 0 -1.82 0.397
## [2,] 1 -1.49 0.525
## [3,] 2 -1.42 0.550
## [4,] 3 -1.55 0.504
## [5,] 4 -1.49 0.523
## Type 3: with drift and trend
## lag ADF p.value
## [1,] 0 -3.27 0.0774
## [2,] 1 -2.51 0.3629
## [3,] 2 -2.52 0.3565
## [4,] 3 -2.68 0.2908
## [5,] 4 -2.36 0.4237
## ----
## Note: in fact, p.value = 0.01 means p.value <= 0.01
\(H_0\) : Data tidak stasioner dalam rataan
\(H_1\) : Data stasioner dalam rataan
Berdasarkan uji ADF tersebut, didapat p-value sebesar 0.4236 yang lebih besar dari taraf nyata 5% dan menandakan bahwa data tidak stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF.
Uji Variance Plot Lambda Box-Cox
## [1] 1.151515
## [1] 0.6060606 0.6666667 0.7272727 0.7878788 0.8484848 0.9090909 0.9696970
## [8] 1.0303030 1.0909091 1.1515152 1.2121212 1.2727273 1.3333333 1.3939394
## [15] 1.4545455 1.5151515 1.5757576 1.6363636 1.6969697
Dilihat Dari Kumpulan Lambda Optimalnya, berkisar antara 0 sampai ke lambda 1.696967 . Dengan Lambda optimum di angka 0. Disini dapat dikatakan Data stasioner dalam ragam ,mengandung lambda 1. Lambda 1 sendiri artinya data tidak perlu ditransformasi ( memangkatkan data dengan 1) sehingga dapat dikatakan data itu sendiri sudah masuk kedalam wilayah Lambda-Lambda Boxcox. Jadi Dapat dikatakan Stasioner dalam Ragam.
Kesimpulan
Dari Data Saham BBCA Tahun 2012-2016. Set Partisi Data Pertama , yaitu Periode 2012- Pertengahan tahun 2014, Didapatkan Pola data yang tidak stasioner dalam rataan maupun ragam. Namun pola yang berbeda terjadi pada Data lanjutan 2014- 2016. Pola yang ditunjukkan masih tidak stasioner dalam rataan karena adanya trend kenaikan harga saham, namun dapat dikatakan stasioner dalam ragam.
Ketika Data digabungkan secara utuh, maka didapat kesimpulan Polanya tidak stasioner dalam rataan namun stasioner dalam Ragam.
Identifikasi Pendugaan Parameter
Sebelumnya kita telah menguji Kestasioneran Data Harga Saham Mingguan BBCA dari periode 2012-2016. Didapatkan bahwa Data tersebut Stasioner dalam Ragam namun tidak stasioner dalam rataan, Maka dari itu Saya akan melakukan penaganan ketidakstasioneran rataan melalui differencing
Dilihat Dari Pola Datanya, Saya akan melakukan splitting data 70:30 (Train:Test) Hal ini berdasarkan dari pola eksploratif dari data yang didapat.
Splitting Data
Uji Stasioneritas Data
Plot ACF Train
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
Uji ADF Train
##
## Augmented Dickey-Fuller Test
##
## data: sahamtrain
## Dickey-Fuller = -2.1371, Lag order = 5, p-value = 0.5195
## 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.5195 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
Plot Box-Cox Train
## [1] 5
## [1] 5.000000 5.050505 5.101010
Plot Boxcox menunjukkan nilai rounded value (\(\lambda\)) optimum sebesar 5 dan pada selang kepercayaan 95% nilai memiliki batas bawah 5 sampai 5.1 Selang tersebut tidak memuat nilai satu sehingga dapat dikatakan bahwa data bangkitan tidak stasioner dalam ragam.
Penaganan Ketidakstasioneran
train.diff<-diff(sahamtrain,differences = 1)
plot.ts(train.diff, lty=1, xlab="waktu", ylab="Data Difference 1 Kurs", main="Plot Difference Kurs")Setelah differncing 1 kita telah menyelesaikan permasalah kestasioneran secara visual, namun mari kita lihat dengan pengujian plot dan uji formal yang ada
Plot ACF Differencing
Berdasarkan plot tersebut, terlihat bahwa plot ACF cuts off pada lag ke 1. Hal ini menandakan data sudah stasioner dalam rataan dan ketidakstasioneran data telah berhasil tertangani.
Plot ADF Differencing
## Warning in tseries::adf.test(train.diff): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: train.diff
## Dickey-Fuller = -5.064, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
Aman ges
\(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
Plot Boxcox
index <- seq(1:129)
library(MASS)
train.diff.pos <- train.diff + abs(min(train.diff)) + 1
bc <- boxcox(train.diff.pos ~ index, lambda = seq(-2, 2, by = 0.1))## [1] 0.9494949
## [1] 0.7070707 0.7474747 0.7878788 0.8282828 0.8686869 0.9090909 0.9494949
## [8] 0.9898990 1.0303030 1.0707071 1.1111111 1.1515152 1.1919192 1.2323232
Pada Tahap Ini, Karena Differencing , terdapat respon yang bernilai negatif. Hal ini tentu menjadi batasan dari transformasi box-cox yang mengharuskan semua variabel responnya berniali positif. Untuk itu saya melakukan perubahan pada variabel respon dengan fungsi absolute sehingga mendapat nilai posiif agar bisa dilakukan transformasi box cox. Setelah dilakukan transformasi, dapat dilihat bahwa Lambda 1 berada direntang lambda optimum , sehingga kita dapat menyimpulkan data ini stasioner dalam ragam.
Identifikasi Model
ACF
Berdasarkan plot tersebut, terlihat bahwa plot ACF cenderung cuts off pada lag ke 1, sehingga jika plot PACF dianggap tails of, maka model tentatifnya adalah ARIMA(0,1,1).
PACF
Berdasarkan plot tersebut, terlihat bahwa plot PACF cenderung cuts off pada lag ke 1, sehingga jika plot ACF dianggap tails of, maka model tentatifnya adalah ARIMA(1,1,0).
Jika baik plot ACF maupun plot PACF keduanya dianggap tails of, maka model yang terbentuk adalah ARIMA(1,1,1)
Plot EACF
## AR/MA
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x o o o o o o o o o o o x o
## 1 o o o o o o o o o o o o o o
## 2 x o o o o o o o o o o o o o
## 3 x o x o o o o o o o o o o o
## 4 x o x o o o o o o o o o o o
## 5 x o x x x o o o o o o o o o
## 6 x x o o o x o o o o o o o o
## 7 x x o o o o x 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(0,1,1), ARIMA(1,1,1), ARIMA(2,1,1), dan ARIMA(1,1,2), ARIMA (0,1,3).
Pendugaan Parameter Model Tentatif
ARIMA(0,1,1)
## Series: train.diff
## ARIMA(0,0,1) with non-zero mean
##
## Coefficients:
## ma1 mean
## -0.1778 8.8617
## s.e. 0.0868 4.9370
##
## sigma^2 = 4708: log likelihood = -727.53
## AIC=1461.07 AICc=1461.26 BIC=1469.65
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 0.1084488 68.08361 51.64934 NaN Inf 0.6434176 -0.002826794
lmtest::coeftest(model1) # Paramater MA signfikan pada alpha 5 %, Intercept Signfikan pada taraf 10%.##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ma1 -0.17781 0.08677 -2.0492 0.04044 *
## intercept 8.86166 4.93705 1.7949 0.07266 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ARIMA (1,1,0)
## Series: train.diff
## ARIMA(1,0,0) with non-zero mean
##
## Coefficients:
## ar1 mean
## -0.1804 8.8743
## s.e. 0.0866 5.0818
##
## sigma^2 = 4704: log likelihood = -727.47
## AIC=1460.94 AICc=1461.14 BIC=1469.52
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 0.08984153 68.05038 51.62459 NaN Inf 0.6431092 0.001892674
lmtest::coeftest(model2) #Paramater AR signfikan pada alpha 5 %, Intercept Signfikan pada taraf 10%.##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.180439 0.086605 -2.0835 0.03721 *
## intercept 8.874304 5.081786 1.7463 0.08076 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ARIMA (1,1,1)
## Series: train.diff
## ARIMA(1,0,1) with non-zero mean
##
## Coefficients:
## ar1 ma1 mean
## -0.2465 0.0685 8.881
## s.e. 0.4775 0.4923 5.141
##
## sigma^2 = 4740: log likelihood = -727.46
## AIC=1462.93 AICc=1463.25 BIC=1474.37
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 0.08137256 68.04595 51.6583 NaN Inf 0.6435291 -0.0001478487
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.246531 0.477467 -0.5163 0.60562
## ma1 0.068479 0.492268 0.1391 0.88936
## intercept 8.881050 5.141047 1.7275 0.08408 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ARIMA (2,1,1)
## Series: train.diff
## ARIMA(2,0,1) with non-zero mean
##
## Coefficients:
## ar1 ar2 ma1 mean
## -0.2499 -0.0017 0.0717 8.8825
## s.e. 1.4201 0.2538 1.4206 5.1358
##
## sigma^2 = 4778: log likelihood = -727.46
## AIC=1464.93 AICc=1465.41 BIC=1479.23
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 0.07976898 68.04589 51.65556 NaN Inf 0.6434951 -7.350304e-06
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.2498959 1.4200893 -0.1760 0.86032
## ar2 -0.0016569 0.2537731 -0.0065 0.99479
## ma1 0.0716680 1.4205859 0.0504 0.95976
## intercept 8.8824723 5.1357758 1.7295 0.08371 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ARIMA (1,1,2)
## Series: train.diff
## ARIMA(1,0,2) with non-zero mean
##
## Coefficients:
## ar1 ma1 ma2 mean
## -0.2776 0.0983 -0.0101 8.8783
## s.e. 0.6451 0.6433 0.1526 5.1093
##
## sigma^2 = 4778: log likelihood = -727.46
## AIC=1464.92 AICc=1465.41 BIC=1479.22
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 0.08519107 68.04472 51.66024 NaN Inf 0.6435533 0.0005861324
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.277563 0.645064 -0.4303 0.66699
## ma1 0.098323 0.643300 0.1528 0.87852
## ma2 -0.010104 0.152586 -0.0662 0.94721
## intercept 8.878273 5.109333 1.7377 0.08227 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ARIMA (0,0,3)
## Series: train.diff
## ARIMA(0,0,3) with non-zero mean
##
## Coefficients:
## ma1 ma2 ma3 mean
## -0.2016 0.0660 -0.1413 8.9001
## s.e. 0.0885 0.1001 0.1079 4.3296
##
## sigma^2 = 4721: log likelihood = -726.71
## AIC=1463.43 AICc=1463.92 BIC=1477.73
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 0.1152985 67.63444 52.3444 NaN Inf 0.6520762 0.01121321
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ma1 -0.201609 0.088535 -2.2772 0.02278 *
## ma2 0.066008 0.100074 0.6596 0.50952
## ma3 -0.141265 0.107945 -1.3087 0.19064
## intercept 8.900073 4.329617 2.0556 0.03982 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Kesimpulan Model
#Ambil AIC dari Model1.da sampai Model6.da Untuk Dibandingkan
AIC1<-summary(model1)$aic
AIC2<-summary(model2)$aic
AIC3<-summary(model3)$aic
AIC4<-summary(model4)$aic
AIC5<-summary(model5)$aic
AIC6<-summary(model6)$aic
#Ambil Sigma^2 dari Model1.da sampai Model6.da Untuk Dibandingkan
sig1<-summary(model1)$sigma2
sig2<-summary(model2)$sigma2
sig3<-summary(model3)$sigma2
sig4<-summary(model4)$sigma2
sig5<-summary(model5)$sigma2
sig6<-summary(model6)$sigma2
Conclussion<-data.frame(Model=c("ARIMA(0,1,1)","ARIMA(1,1,0)","ARIMA(1,1,1)","ARIMA(2,1,1)","ARIMA(1,1,2)","ARIMA(0,1,3)"), AIC=c(AIC1,AIC2,AIC3,AIC4,AIC5,AIC6), Sigma2=c(sig1,sig2,sig3,sig4,sig5,sig6)
)
Conclussion## Model AIC Sigma2
## 1 ARIMA(0,1,1) 1461.068 4708.376
## 2 ARIMA(1,1,0) 1460.943 4703.782
## 3 ARIMA(1,1,1) 1462.927 4740.495
## 4 ARIMA(2,1,1) 1464.926 4778.411
## 5 ARIMA(1,1,2) 1464.922 4778.247
## 6 ARIMA(0,1,3) 1463.428 4720.798
Dari Perbandingan Model Didapatkan Model terbaik adalah ARIMA (1,1,0). Model ini diambil dnegan perbandingan AIC dan Varians model yang paling kecil. Selain itu pada model ini juga seluruh parameternya signifikan walau unutk Parameter AR 1 , alpha perlu di turunkan menjadi 90% agar masih signifikan. Sehingga Dapat dikatakan pada Model ARIMA (1,1,0), seluruh parameter signifikan pada taraf nyata 90%.