Studi Kasus

Permasalahan

Indeks Harga Saham Gabungan (IHSG) merupakan salah satu indeks pasar saham yang digunakan oleh Bursa Efek Indonesia. Setiap hari IHSG mengalami fluktuasi secara tidak pasti dan menjadikan kegiatan perdagangan saham beresiko tinggi. Fluktuasi yang tinggi pada data IHSG kemungkinan besar akan memiliki nilai pencilan. Pada beberapa hari terakhir, terdapat kebijakan pemerintah yang ramai dan menimbulkan sentimen negative sehingga membuat saham-saham di Indonesia menjadi anjlok termasuk IHSG. Kebijakan pemerintah tersebut adalah pengesahan RUU TNI yang disahkan pada tanggal 20 Maret 2025. Semenjak RUU TNI disahkan, nilai IHSG mengalami penurunan dan pada awal bulan April 2025 mengalami penurunan yang sangat tinggi. Berdasarkan karakteristik dari data IHSG yang selalu mengalami perubahan perlu dilakukan peramalan. Peramalan pada data close price IHSG dapat membantu investor dalam mengambil keputusan dalam berinvestasi.

Pertanyaan Permasalahan

Berdasarkan permasalahan pada data IHSG terdapat beberapa pertanyaan yang ditetapkan adalah

1. Model deret waktu manakah yang sesuai untuk permasalahan tersebut?

2.   Bagaiman kemampuan model deret waktu yang ditetapkan dalam memodelkan data IHSG?

3.   Bagaimana hasil peramalan dengan model deret waktu pada kasus data IHSG?

SYNTAX DAN LANGKAH ANALISIS

1. Eksplorasi Data Deret Waktu

Data_IHSG <- read_excel("C:/Users/IKHSAN/Downloads/Data IHSG.xlsx")
harga <- Data_IHSG$`Harga Saham`
tanggal <- Data_IHSG$Tanggal
plot(tanggal, harga, type = "o", col = "blue", lwd = 2,
     main = "Plot Harga Saham Harian IHSG",
     xlab = "Tanggal", ylab = "Harga Saham")

outlier <- c(tanggal[137], tanggal[277], tanggal[289], tanggal[297])
abline(v = outlier , col = "red", lty = 3, lwd = 1.5)

Pembahasan: Data IHSG menunjukkan fluktuasi signifikan sepanjang periode pengamatan. Penurunan tajam terjadi pada titik-titik tertentu yang diasumsikan sebagai outlier akibat sentimen negatif pasar.


2. Uji Stasioneritas

BoxCox.lambda(harga)
## [1] 1.999924
harga_trans <- harga^2
BoxCox.lambda(harga_trans)
## [1] 1.980826
adf.test(harga, k = 1)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  harga
## Dickey-Fuller = -0.78673, Lag order = 1, p-value = 0.9621
## alternative hypothesis: stationary
diff_harga <- diff(harga)
adf.test(diff_harga)
## Warning in adf.test(diff_harga): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff_harga
## Dickey-Fuller = -7.5443, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary

Pembahasan: Transformasi Box-Cox menghasilkan lambda mendekati 2, menandakan ketidakstasioneran terhadap ragam. Uji ADF menunjukkan bahwa data asli tidak stasioner, namun menjadi stasioner setelah differencing satu kali.


3. Identifikasi Model

acf(diff_harga)

pacf(diff_harga)

Pembahasan: Plot ACF dan PACF menunjukkan pola signifikan pada lag ke-1 dan ke-2. Model kandidat yang diuji adalah ARIMA(1,1,1) dan ARIMA(2,1,2).


4. Pendugaan Parameter dan Uji Signifikansi

arima1 <- arima(harga, order = c(1,1,1))
arima2 <- arima(harga, order = c(2,1,2))

coeftest(arima1)
## 
## z test of coefficients:
## 
##     Estimate Std. Error z value Pr(>|z|)   
## ar1 -0.65360    0.23356 -2.7984 0.005136 **
## ma1  0.70835    0.21561  3.2854 0.001019 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
coeftest(arima2)
## 
## z test of coefficients:
## 
##      Estimate Std. Error z value  Pr(>|z|)    
## ar1  0.841665   0.034149  24.647 < 2.2e-16 ***
## ar2 -0.911340   0.030544 -29.837 < 2.2e-16 ***
## ma1 -0.956037   0.023423 -40.816 < 2.2e-16 ***
## ma2  0.993144   0.042041  23.623 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Pembahasan: Model ARIMA(2,1,2) memberikan hasil estimasi parameter yang signifikan dan lebih stabil dibandingkan ARIMA(1,1,1).


5. Uji Asumsi Model

resid1 <- residuals(arima1)
resid2 <- residuals(arima2)

Box.test(resid1, lag = 2, type = "Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  resid1
## X-squared = 3.2697, df = 2, p-value = 0.195
Box.test(resid2, lag = 2, type = "Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  resid2
## X-squared = 3.0242, df = 2, p-value = 0.2204
jarque.bera.test(resid1)
## 
##  Jarque Bera Test
## 
## data:  resid1
## X-squared = 648.83, df = 2, p-value < 2.2e-16
jarque.bera.test(resid2)
## 
##  Jarque Bera Test
## 
## data:  resid2
## X-squared = 437.53, df = 2, p-value < 2.2e-16

Pembahasan: Hasil uji Ljung-Box menunjukkan tidak ada autokorelasi pada sisaan. Namun, uji Jarque-Bera menolak normalitas sisaan. Karena ARIMA tidak mensyaratkan normalitas, model tetap dapat digunakan.


6. Pemilihan Model Terbaik

AIC(arima1)
## [1] 3418.922
AIC(arima2)
## [1] 3406.847

Pembahasan: Model ARIMA(2,1,2) dipilih karena memiliki nilai AIC yang lebih kecil.


7. Deteksi Outlier dan Pemodelan ARIMA Outlier

prediksi <- fitted(arima2)
outlier_arima <- tso(prediksi, types = c("AO", "IO", "IS", "TC"))
plot(outlier_arima$effects)

n <- length(harga)
xreg_outlier <- matrix(0, nrow = n, ncol = 4)
colnames(xreg_outlier) <- c("TC138", "AO278", "IO290", "AO298")
xreg_outlier[138, "TC138"] <- 1
xreg_outlier[278, "AO278"] <- 1
xreg_outlier[290, "IO290"] <- 1
xreg_outlier[298, "AO298"] <- 1

arima_outlier <- Arima(harga, order = c(2,1,2),
                       xreg = xreg_outlier,
                       method = "ML", include.mean = TRUE)
summary(arima_outlier)
## Series: harga 
## Regression with ARIMA(2,1,2) errors 
## 
## Coefficients:
##          ar1      ar2      ma1     ma2    TC138     AO278     IO290    AO298
##       0.6809  -0.9478  -0.7394  0.8961  -6.8997  207.0423  -22.7585  -4.4131
## s.e.  0.0508   0.0432   0.0611  0.0566  52.3483   53.1546   53.0738  77.2646
## 
## sigma^2 = 5350:  log likelihood = -1692.59
## AIC=3403.18   AICc=3403.81   BIC=3436.42
## 
## Training set error measures:
##                    ME     RMSE      MAE         MPE      MAPE      MASE
## Training set -4.67011 72.02947 53.17007 -0.07620864 0.7530909 0.9708515
##                   ACF1
## Training set 0.1031748
coeftest(arima_outlier)
## 
## z test of coefficients:
## 
##         Estimate Std. Error  z value  Pr(>|z|)    
## ar1     0.680920   0.050757  13.4153 < 2.2e-16 ***
## ar2    -0.947795   0.043220 -21.9294 < 2.2e-16 ***
## ma1    -0.739390   0.061059 -12.1095 < 2.2e-16 ***
## ma2     0.896059   0.056594  15.8331 < 2.2e-16 ***
## TC138  -6.899677  52.348294  -0.1318    0.8951    
## AO278 207.042260  53.154575   3.8951 9.816e-05 ***
## IO290 -22.758546  53.073808  -0.4288    0.6681    
## AO298  -4.413109  77.264634  -0.0571    0.9545    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Pembahasan: Outlier yang terdeteksi dimasukkan sebagai variabel dummy ke dalam model. Hanya AO pada titik 278 yang signifikan. Model ARIMA outlier memberikan penyesuaian yang lebih baik.


8. Uji Asumsi Model ARIMA Outlier

resid_outlier <- residuals(arima_outlier)
Box.test(resid_outlier, lag = 2, type = "Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  resid_outlier
## X-squared = 3.4408, df = 2, p-value = 0.179
jarque.bera.test(resid_outlier)
## 
##  Jarque Bera Test
## 
## data:  resid_outlier
## X-squared = 413.89, df = 2, p-value < 2.2e-16

Pembahasan: Hasil uji menunjukkan bahwa sisaan dari model ARIMA outlier tidak memiliki autokorelasi, namun tidak berdistribusi normal. Namun model tetap valid.


9. Evaluasi Visual

prediksi_outlier <- harga - resid_outlier
plot(tanggal, harga, type = "l", col = "blue", lwd = 2)
lines(tanggal, prediksi, col = "red", lwd = 2)
lines(tanggal, prediksi_outlier, col = "green", lwd = 2)
legend("topright", legend = c("Harga Saham Aktual", "Prediksi ARIMA", "Prediksi ARIMA Outlier"),
       col = c("blue", "red", "green"), lty = 1)

Pembahasan: Model ARIMA dengan outlier mengikuti pola data aktual lebih akurat dibanding model ARIMA biasa.


10. Peramalan 31 Hari ke Depan

xreg_future <- matrix(0, nrow = 31, ncol = 4)
colnames(xreg_future) <- c("TC138", "AO278", "IO290", "AO298")

forecast_result <- forecast(arima_outlier, xreg = xreg_future, h = 31)
plot(forecast_result)

Pembahasan: Hasil peramalan 31 hari menunjukkan pola harga saham yang cenderung stabil. Model menunjukkan performa baik untuk prediksi jangka pendek.


11. Kesimpulan dan Saran

Kesimpulan: 1. Data IHSG awalnya tidak stasioner, tetapi menjadi stasioner setelah differencing. 2. Model terbaik berdasarkan AIC dan signifikansi parameter adalah ARIMA(2,1,2). 3. Penambahan variabel outlier meningkatkan akurasi prediksi.

Saran: - Gunakan analisis ARIMA dengan deteksi outlier untuk data pasar modal. - Kombinasikan analisis teknikal dengan faktor fundamental agar hasil peramalan lebih akurat.