Impor Library Yang Dibutuhkan

library(TSA)
## 
## Attaching package: 'TSA'
## The following objects are masked from 'package:stats':
## 
##     acf, arima
## The following object is masked from 'package:utils':
## 
##     tar
library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(forecast)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## Registered S3 methods overwritten by 'forecast':
##   method       from
##   fitted.Arima TSA 
##   plot.Arima   TSA
library(xts)
library(readxl)
library(MASS)
library(zoo)
library(tsoutliers)
library(tseries)
library(knitr)

Impor Data yang Dibutuhkan

Data yang digunakan pada penerapan model ARIMA Outlier adalah data saham IHSG bulan Januari 2024 hingga April 2025.Indeks Harga Saham Gabungan merupakan salah satu indeks pasar saham yang digunakan oleh Bursa Efek Indonesia. IHSG diperkenalkan pertama kali pada tanggal 1 April 1983 sebagai indikator pergerakan harga saham di BEJ. Indeks ini mencakup pergerakan harga seluruh saham biasa dan saham preferen yang tercatat di BEI.

# Impor Data
sahamihsg<-read_excel("D:/metode peramalan 2025/Data IHSG.xlsx")
saham<- as.numeric(sahamihsg$`Harga Saham`)
harian<- as.Date(sahamihsg$Tanggal)
head(sahamihsg)
## # A tibble: 6 x 3
##      No Tanggal             `Harga Saham`
##   <dbl> <dttm>                      <dbl>
## 1     1 2024-01-02 00:00:00         7324.
## 2     2 2024-01-03 00:00:00         7279.
## 3     3 2024-01-04 00:00:00         7360.
## 4     4 2024-01-05 00:00:00         7351.
## 5     5 2024-01-08 00:00:00         7284.
## 6     6 2024-01-09 00:00:00         7200.

Statistika Deskriptip Data IHSG

Berdasarkan data harian IHSG dari Januari 2024 hingga April 2025, nilai rata-rata (mean) adalah 7.197, median sebesar 7.235, nilai maksimum (max) mencapai 7.905, dan nilai minimum (min) tercatat sebesar 5.973.

# Statistika Deskriptif
summary(sahamihsg$`Harga Saham`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    5973    7080    7235    7197    7351    7905

Visualisasi Data

Berdasarkan grafik deret waktu IHSG dari Januari 2024 hingga April 2025, terlihat bahwa pergerakan indeks mengalami perubahan yang cukup dinamis. Pada awal tahun 2024, pergerakan IHSG cenderung stabil dengan kecenderungan naik secara perlahan. Memasuki pertengahan tahun, indeks menunjukkan lonjakan signifikan hingga mendekati angka 7900. Namun, tren ini tidak bertahan lama karena setelah mencapai puncaknya, IHSG mulai melemah secara bertahap. Penurunan semakin tajam menjelang awal tahun 2025, di mana indeks sempat menyentuh level terendah di bawah 6100. Secara umum, data menunjukkan pola yang fluktuatif dengan kecenderungan penurunan pada akhir periode. Hal ini menunjukkan tidak terjadi stasioneritas terhadap rata rata dan ragam

# Visualisasi Data
plot(harian, saham, type = "o", col = "slategray", lwd = 2)

Stasioneritas terhadap ragam dan rata rata

Stasioneritas terhadap ragam

# Stasioneritas terhadap ragam
BoxCox.lambda(saham)
## [1] 1.999924

Berdasarkan hasil pengujian bahwa data tidak stasioner terhadap ragam karena nilainya mendekati 2. Ragam dinyatakan stasioner jika mendekati satu maka di lakukan transforamsi boxcox

Stasioneritas terhadap rata rata

Pengujian stasioneritas terhadap rata rata menggunakan uji dicky fuller dengan kriteria sebagai berikut :

\(H_0\) : \(\phi=1\) (data tidak stasioner terhadap rata-rata)
\(H_1\) : \(\phi<1\) (data stasioner terhadap rata-rata)
Taraf nyata: \(\alpha=0,05\)

# Stasioneritas terhadap rata rata
adf.test(saham,k=1)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  saham
## Dickey-Fuller = -0.78673, Lag order = 1, p-value = 0.9621
## alternative hypothesis: stationary

Berdasarkan nilai pvalue (0,9621) > alpha (0,05) maka dapat disimpulkan bahwa tidak stasioner terhadap rata rata

Differencing

#Transformasi boxcox
lambda <- BoxCox.lambda(saham)
saham_bc <- BoxCox(saham, lambda)
tssahambc<-ts(saham_bc,frequency=252)
tssahambc
## Time Series:
## Start = c(1, 1) 
## End = c(2, 46) 
## Frequency = 252 
##   [1] 26800428 26475737 27065798 26998616 26508409 25904986 26100347 26047362
##   [9] 26200402 26076519 26212343 25908080 26286076 26101070 26249559 26309711
##  [17] 26104103 25745782 25452877 25596295 25847599 25960708 25915780 26183399
##  [25] 25893619 26245793 26157074 26611064 25973675 26651992 26887957 26603991
##  [33] 27013163 26986865 26918021 26592325 26510155 26521075 26837400 26745713
##  [41] 26715014 26458719 26246155 26845896 27170336 27228951 27519636 27609446
##  [49] 26833079 26645935 26896828 26855639 26908560 26995164 27198346 27109208
##  [57] 26701717 26546490 25939967 26170307 25665505 26296442 26532434 25650968
##  [65] 25408320 25665290 25099140 25003617 25265785 25720611 25582850 24737542
##  [73] 25586354 26150206 26150206 25312778 25435976 25444319 25356825 25109553
##  [81] 25183777 25073933 25758624 26240651 26753975 26385614 25803200 26064825
##  [89] 25734163 26290860 25475277 24723903 24280246 24738315 25184132 24119804
##  [97] 24309233 23775833 23938794 23485413 23447131 23320387 22664687 22611481
## [105] 23236899 23652121 23715348 23670826 23828872 24260814 24931282 25470996
## [113] 25367718 25880168 26054072 26288976 26271655 26408203 26533599 26631050
## [121] 26829638 26474064 26078612 26078107 26781988 26587951 26788646 26729265
## [129] 26357083 26194179 26541828 26547145 26205612 26306303 26817923 26687328
## [137] 24903548 25396706 25990898 25868447 26315294 26610773 27042855 27629729
## [145] 27432861 27600384 27859003 28362315 28517698 28022282 28440067 28908581
## [153] 28845451 29310467 29071549 29401234 29583957 28987153 29417870 29480319
## [161] 29794402 29647119 30100298 30096963 30386088 30495130 30648727 30627990
## [169] 31227540 29957831 30211623 30233073 29941584 29969594 29602337 28316784
## [177] 29182408 28583189 28436523 28077763 28138023 28536952 28116730 27957960
## [185] 28261668 28555911 29066594 29234439 29896271 30089983 30187307 30314669
## [193] 30303618 29753518 29584956 29125159 28911698 28633019 28664573 28146498
## [201] 27953624 28046609 27243412 26220088 26534691 26383944 26788720 26691345
## [209] 26008415 25625557 25432839 25872689 25762212 25480130 25871610 26731092
## [217] 26234785 25904698 25290378 24814313 25874918 26823633 26725245 27235444
## [225] 27642288 27758062 27843485 27319985 26809211 26327117 25600301 25244969
## [233] 24325546 24371796 25163775 24946602 24740987 25046615 25639514 25648248
## [241] 25050648 25070535 25049799 24938412 25110120 24602724 24182332 25044210
## [249] 25242412 25578346 25693445 25772904 26316237 26138929 25659919 25001213
## [257] 25254346 24695231 25001072 24654290 23621604 22716877 22084989 21320062
## [265] 22069312 21855913 22020724 23315745 23607933 23070577 23024222 23125815
## [273] 22764203 21681252 21807098 21017348 19647938 21239652 20342018 21316211
## [281] 21884209 22004408 21754514 21410631 22197410 22080205 21213404 20929944
## [289] 19353213 19906081 20350116 19570186 18968492 19429349 20932595 21180795
## [297] 17965685 17824667
## attr(,"lambda")
## [1] 1.999924
saham_diff <- diff(tssahambc, differences = 1)

Stasioneritas terhadap ragam dan rata rata setelah differencing

Stasioneritas terhadap ragam setelah differencing

# Stasioneritas terhadap ragam setelah differencing
 BoxCox.lambda(saham_diff)
## [1] 1

Berdasarkan hasil pengujian bahwa data stasioner terhadap ragam karena nilainya sama dengan 1 karena Ragam dinyatakan stasioner jika mendekati satu

Stasioneritas terhadap rata rata setelah differencing

Pengujian stasioneritas terhadap rata rata menggunakan uji dicky fuller dengan kriteria sebagai berikut :

\(H_0\) : \(\phi=1\) (data tidak stasioner terhadap rata-rata) vs
\(H_1\) : \(\phi<1\) (data stasioner terhadap rata-rata)
Taraf nyata: \(\alpha=0,05\)

# Stasioneritas terhadap rata rata setelah differencing
adf.test(saham_diff)
## Warning in adf.test(saham_diff): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  saham_diff
## Dickey-Fuller = -7.4284, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary

Berdasarkan nilai pvalue (0,01) < alpha (0,05) maka dapat disimpulkan bahwa stasioner terhadap rata rata

Visualisasi Data Differencing

#Visualisasi Data
plot(saham_diff, type = "l", col = "slategray", main = "Data Setelah Differencing", ylab = "Nilai Diferensi")

Setelah dilakukan transformasi untuk mengatasi ketidakstasioneran terhadap rata rata dan ragam maka diperoleh grafik speerti gambar diatas. Dapat dilihat bahwa grafik tidak terlalu fluktuatif dan grafik berada disekitar rata rata = 0, meskipun terjadi penurunan yang sangat tajam (outlier negative) pada sekitar bulan maret ke april dimana terdapat kejadian yang ekstrim pada pasar saham. Meskipun demikian dapat dilakukan uji berikutnya.

Model terbaik

# ACF
acf(saham_diff)

# PACF
pacf(saham_diff)

# Pemilihan model terbaik
model_arima <- auto.arima(tssahambc)
model_arima
## Series: tssahambc 
## ARIMA(0,1,0) 
## 
## sigma^2 = 2.728e+11:  log likelihood = -4331.74
## AIC=8665.48   AICc=8665.49   BIC=8669.17
arima1 <- arima(tssahambc, order = c(0, 1, 0))

Berdasarkan syntax auto.arima maka diperoleh model arima terbaik pada data ini adalah arima(0,1,0) hal itu juga senada dengan plot acf dan pacf tidak terdapat cutoff pada lag lag diawal sehingga data ini hanya terdapat 1 kali differencing saja tidak cutoff di lag manapun sehingga tidak terdapat koefisien AR dan MA.

Uji Asumsi Model Arima

Uji Asumsi Autokorelasi Sisaan

Kemudian dilakukan pengujian asumsi autokorelasi sisaan dan normalitas sisaan, dengan hipotesis untuk uji tersebut adalah: \(H_0\) : \(\rho_1=\rho_2=\rho_3=...=\rho_x=0\) (tidak terdapat autokorelasi pada sisaan)
\(H_1\) : minimal terdapat satu \(\rho_x \neq 0\) ( terdapat autokorelasi pada sisaan)

Box.test(residuals(arima1), lag = 2, type = "Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  residuals(arima1)
## X-squared = 3.4973, df = 2, p-value = 0.174

Berdasarkan hasil Rstudio maka diperoleh nilai pvalue (0,174) lebih dari nilai alpha (0,05) maka dapat disimpulkan tidak terdapat autokorelasi sisaan sehingga dapat dilanjutkan ke uji normalitas sisaan

Uji Asumsi Normalitas Sisaan

H0 : residual menyebar secara normal
H1 : residual tidak menyebar secara normal

jarque.bera.test(residuals(arima1))
## 
##  Jarque Bera Test
## 
## data:  residuals(arima1)
## X-squared = 309.43, df = 2, p-value < 2.2e-16

Berdasarkan hasil perhitungan maka diperoleh nilai pvalue (0,000) kurang dari alpha (0,05) maka dapat disimpulkan bahwa model arima yang dihasilkan tidak menyebar secara normal. Berdasarkan literatur yang ada tidak menjadi suatu masalah jika uji normalitas tidak terpenuhi maka model tetap dapat dipakai.

Mendeteksi Outlier

prediksioutlier <- tssahambc - residuals(arima1)
outlier <- tso(prediksioutlier, types = c("AO", "IO", "IS", "TC"))
print(outlier)
## Series: prediksioutlier 
## Regression with ARIMA(0,1,0) errors 
## 
## Coefficients:
##            TC138       AO278       AO298
##       -1831870.2  -1480561.8  -3215109.3
## s.e.    421702.3    323427.7    458602.4
## 
## sigma^2 = 2.12e+11:  log likelihood = -4292.8
## AIC=8593.6   AICc=8593.74   BIC=8608.38
## 
## Outliers:
##   type ind  time  coefhat  tstat
## 1   TC 138 1:138 -1831870 -4.344
## 2   AO 278  2:26 -1480562 -4.578
## 3   AO 298  2:46 -3215109 -7.011
xreg.outlier <- outlier$effects
plot(outlier$effects)

Berdasarkan grafik pada bagian ke enam pembahasan maka dapat disimpuplkan terdapat outlier pada data ini, hal tersebut senada dengan hasil syntax yang menyatakan terdapat outlier additive outlier (AO) pada data ke 278 dan 298 dan temporary change (TC) pada data ke-138. Data ini juga diperkuat dengan grafik yang menandakan bahwa terdapat outlier dalam data saham IHSG.

Pemodelan Outlier pada Data Saham IHSG

# Pemodelan Arima Outlier
arima.tc <- arima(tssahambc, order=c(0,1,0), xreg = xreg.outlier,  method = 'ML', include.mean=TRUE, transform.pars = FALSE)
coeftest(arima.tc)
## 
## z test of coefficients:
## 
##      Estimate Std. Error z value Pr(>|z|)
## xreg -0.19021    0.12038   -1.58   0.1141

Karena pvalue (0,1141) lebih dari alpha (0,05) maka dapat disimpulkan terdapat parameter yang tidak signifikan akan tetapi dapat dilanjutkan ke perhitungan berikutnya

Uji Asumsi Model Arima Outlier

Uji Asumsi Autokorelasi Sisaan

Kemudian dilakukan pengujian asumsi autokorelasi sisaan dan normalitas sisaan, dengan hipotesis untuk uji tersebut adalah: \(H_0\) : \(\rho_1=\rho_2=\rho_3=...=\rho_x=0\) (tidak terdapat autokorelasi pada sisaan)
\(H_1\) : minimal terdapat satu \(\rho_x \neq 0\) ( terdapat autokorelasi pada sisaan)

residarimatc<- residuals(arima.tc)
Box.test(residarimatc, lag=2, type = c('Ljung-Box'))
## 
##  Box-Ljung test
## 
## data:  residarimatc
## X-squared = 4.4337, df = 2, p-value = 0.109

Berdasarkan hasil Rstudio maka diperoleh nilai pvalue (0,109) lebih dari nilai alpha (0,05) maka dapat disimpulkan tidak terdapat autokorelasi sisaan sehingga dapat dilanjutkan ke uji normalitas sisaan

Uji Asumsi Normalitas Sisaan

H0 : residual menyebar secara normal
H1 : residual tidak menyebar secara normal

jarque.bera.test(residarimatc)
## 
##  Jarque Bera Test
## 
## data:  residarimatc
## X-squared = 307.14, df = 2, p-value < 2.2e-16

Berdasarkan hasil perhitungan maka diperoleh nilai pvalue (0,000) kurang dari alpha (0,05) maka dapat disimpulkan bahwa model arima outlier yang dihasilkan tidak menyebar secara normal. Berdasarkan literatur yang ada tidak menjadi suatu masalah jika uji normalitas tidak terpenuhi maka model tetap dapat dipakai.

Grafik Perbandingan Model Outlier dengan Model Arima tanpa Outlier

prediksi.arimatc <- tssahambc - residuals(arima.tc)
plot(harian, tssahambc, type = "o", col = "blue", lwd = 2,
     ylab = "Nilai", xlab = "Tanggal", main = "Saham Aktual vs Prediksi ARIMA + Outlier")
lines(harian, prediksi.arimatc, type = "o", col = "red", lwd = 2)
legend("bottomleft",
       legend = c("Saham Aktual", "Prediksi ARIMA + Outlier"),
       col = c("blue", "red"), lty = 1, pch = 1, cex = 0.8)

Berdasarkan grafik yang ditampilkan bahwa pemodelan data IHSG harian dari Januari 2024 hingga April 2025 dengan pemodelan outlier dapat menangkap fluktuatif nilai saham harian. Hal tersebut dapat ditunjukkan melalui grafik antara garis merah dan biru tidak begitu jauh jarak antara titiknya yang berarti standard deviasinya tidak besar maka dapat dikatakan bahwa model ini mampu menangkap pola data deret waktu sehingga model ini dapat digunakan para investor untuk mengambil keputusan baik jangka pendek maupun jangka panjang agar lebih bijak dalam membeli.

Kesimpulan

Pemodelan data IHSG harian dari Januari 2024 hingga April 2025 menggunakan metode ARIMA (0,1,0) yang dikombinasikan dengan deteksi outlier (AO, IO, IS, TC) menunjukkan bahwa model ini mampu menangkap pola fluktuatif pergerakan indeks secara baik. Hasil visualisasi menunjukkan bahwa prediksi model sangat mendekati nilai aktual, ditunjukkan oleh garis prediksi (merah) yang hampir berimpit dengan data aktual (biru). Hal ini menandakan bahwa simpangan antara prediksi dan data aktual kecil (standar deviasi rendah), sehingga model ini cukup baik untuk digunakan sebagai dasar pengambilan keputusan investasi. Model ini bermanfaat baik untuk strategi jangka pendek maupun jangka panjang, khususnya dalam mengantisipasi pergerakan pasar yang beresiko.

Saran

Berdasarkan hasil pemodelan yang dilakukan ,yaitu model arima outlier dalam menggambarkan pergerakan IHSG dari Januari 2024 – April 2025 maka dapat digunakan model ini. Akan tetapi, investor harus lebih berhati hati dalam mengambil Keputusan. Model ini memiliki kekurangan seperti tidak mempertimbangkan faktor atau variabel lain serta dapat mengeksplore model lain yang lebih baik untuk meminimalisir resiko bagi para investor.  untuk melakukan analisis tambahan guna meningkatkan akurasi prediksi.