Anggota Kelompok 6
| NIM | Nama |
|---|---|
| G1401201004 | Alfidhia Rahman Nasa Juhanda |
| G1401201017 | Ervina Dwi Anggrahini |
| G1401201024 | Nanda Putri Cintari |
| G1401201054 | Fransiska Agustina Siahaan |
| G1401201102 | Kayla Fakhriya Jasmine |
Pendahuluan
IHSG atau Indeks Harga Saham Gabungan adalah rangkaian informasi historis tentang pergerakan harga atas sekumpulan saham gabungan sampai tanggal tertentu dan mencerminkan suatu nilai yang berfungsi sebagai salah satu indeks harga dan pengukuran kinerja suatu saham gabungan di bursa efek (Puspitasari et al. 2012). Pergerakan IHSG di suatu negara dapat dijadikan sebagai salah satu tolak ukur untuk melihat perkembangan suatu perekonomian di negara tersebut. Jika terjadi penurunan pada indeks harga saham gabungan di suatu negara biasanya negara tersebut sedang mengalami permasalahan, dan sebaliknya jika IHSG di suatu negara mengalami peningkatan hal tersebut mengindikasikan adanya perbaikan kinerja ekonomi yang baik di negara tersebut (Grestandhi et al. 2011).
Pada tahun 2020, IHSG mengalami penurunan yang signifikan karena pandemi Covid-19. Namun lambat laun, Indonesia dapat beradaptasi dengan pandemi sehingga nilai IHSG membaik pada 2021. Meskipun begitu, perekonomian Indonesia belum terlalu stabil. Pada 29 Desember 2021, IHSG mencapai posisi 6600.68 atau naik 10.4% secara tahunan (OJK 2021). Peningkatan IHSG juga diiringi dengan peningkatan jumlah investor pasar modal pada 2021 sebesar 92.7% dari tahun sebelumnya. Pada tahun 2022, nilai IHSG mengalami penurunan juga yang disebabkan oleh kebijakan moneter terbaru dan anjloknya bursa saham Amerika Serikat dan kenaikan suku bunga oleh The Fed (Aludi 2022).
Pergerakan harga saham yang sangat fluktuatif mengharuskan para investor untuk memprediksi pergerakan harga saham di masa depan. Namun, masih banyak investor melakukan transaksi saham tanpa memiliki informasi yang akurat dan jelas sehingga salah dalam mengambil keputusan. Selain itu, pada 29 Desember 2021 jumlah investor sebanyak 7.48 juta dengan 59.98% didominasi oleh investor berumur di bawah 30 tahun (OJK 2021). Oleh karena itu, penting untuk meramalkan nilai IHSG dalam beberapa periode ke depan untuk menentukan kebijakan dan strategi yang tepat agar masyarakat terutama investor dapat meminimalkan kerugian dan mengoptimalkan keuntungan dalam kondisi apa pun.
Peramalan nilai IHSG dapat menggunakan analisis deret waktu sebagai pertimbangan pengaruh waktu dan perencanaan ke depan. Pada data model stokastik terdapat beberapa model peramalan yang dapat digunakan seperti AR, MA, ARMA, ARIMA, SARIMA dan lainnya. Model ARIMA menjadi model paling sering digunakan dan biasanya dilakukan pada data stasioner atau data yang dilakukan differencing sehingga data menjadi stasioner. Secara umum, model ARIMA dinotasikan sebagai ARIMA (p, d, q) yang merupakan gabungan dari model ARMA (p, q) dan proses differencing (Ukhra 2014). Model ARIMA cocok untuk digunakan meramal perubahan IHSG harian karena sesuai menggunakan data time series dari data historis sebagai dasar peramalan (forecasting) (Zulkarnain 2010).
Data dapat disebut sebagai data deret waktu apabila data tersedia secara periodik berdasarkan urutan waktu, baik dalam jam, hari, minggu, bulan, kuartal, dan tahun. Namun, terkadang data tidak lengkap atau hilang (missing value) yang diakibatkan alat ukur kurang akurat atau masalah teknis lainnya. Hal ini melanggar salah satu syarat data time series yaitu rentang waktu tidak sama. Salah satu pendugaan untuk mengatasi data hilang adalah metode imputasi, di antaranya interpolasi. Interpolasi memperkirakan missing value dengan asumsi terdapat hubungan dalam rentang titik data yaitu titik data masa lalu dan masa akan datang. Pendugaan missing value dengan teknik interpolasi pernah dilakukan oleh Febrianti S (2019) menggunakan data penerimaan batubara PT. Pacific Global Utama. Pada data nilai IHSG, akan selalu ada data hilang (missing value) yang diakibatkan oleh bursa saham Indonesia yang hanya bekerja di hari kerja dan akan libur di setiap tanggal merah dan akhir pekan. Sehingga, perlu dilakukan pendugaan missing value dengan beberapa metode interpolasi di antaranya metode interpolasi linear dan spline.
Peramalan nilai IHSG menggunakan metode ARIMA pernah dilakukan oleh Susanti dan Adji (2020) dan Purnama dan Juliana (2019). Purnama dan Juliana (2019) melakukan peramalan pada data harian harga penutupan IHSG dari Yahoo Finance periode 16 Juli 2018 hingga 16 Juli 2019 menggunakan metode ARIMA dan dianggap baik untuk peramalan jangka pendek. Susanti dan Adji (2020) melakukan peramalan pada data harian harga penutupan IHSG dari Bursa Efek Indonesia periode 2 Januari 2017 hingga 3 Januari 2018 menggunakan metode ARIMA. Fluktuasi harga saham sangat cepat berubah-ubah seiring berjalannya waktu. Penelitian lain juga telah dilakukan oleh Zulkarnain (2010) yang menunjukkan bahwa Model ARIMA cocok untuk digunakan meramal perubahan harga saham harian karena sesuai dengan analisis teknikal yang menggunakan data time series dari data historis sebagai dasar peramalan (forecasting).
Berdasarkan uraian di atas, kebaruan penelitian tentang prediksi harga saham penting untuk dilakukan sebagai strategi para investor. Tujuan penelitian adalah untuk mendapatkan model ARIMA terbaik yang digunakan untuk melakukan peramalan pada data IHSG dengan melakukan pendugaan missing value melalui perbandingan interpolasi linear dan spline.
Tinjauan Pustaka
Data Stasioner
Data Stasioner merupakan data deret waktu yang memiliki ciri-ciri statistik dasar seperti nilai tengah dan ragam yang tetap (konstan) sepanjang waktu. Menurut Pramujo et. al (2014), keStasioneran data deret waktu memiliki arti bahwa dalam data tersebut tidak terdapat pertumbuhan atau penurunan secara signifikan dan tidak memiliki kecenderungan terhadap trend tertentu. Dengan kata lain, fluktuasi data berada di sekitar suatu nilai rata-rata yang konstan, tidak bergantung pada waktu maupun ragam dari fluktuasi tersebut. Pada dasarnya, data Stasioner dibagi menjadi dua, yaitu Stasioner dalam mean (rata-rata) dan Stasioner dalam variance (ragam). Apabila data Stasioner dalam rata-rata, maka terjadi fluktuasi data di sekitar suatu nilai rata-rata yang konstan. Sedangkan data Stasioner dalam ragam, yaitu data yang dari waktu ke waktu mempunyai fluktuasi yang tetap atau konstan dan tidak berubah-ubah (Pramujo et. al 2014).
Model Autoregressive Integrated Moving Average (ARIMA)
Metode Autoregressive Integrated Moving Average (ARIMA) adalah model peramalan yang sering digunakan dalam pemodelan time series dan menghasilkan ramalan-ramalan berdasarkan sintesis dari pola data secara historis. Metode ARIMA sering digunakan untuk peramalan di berbagai bidang, salah satunya bidang transportasi (Nurjanah, et al. 2018). Model peramalan univariate time series yang memadukan antara model Autoregressive (AR), model Moving Average (MA) dan model campuran autoregressive moving average (ARMA) untuk data yang tidak stasioner. Bentuk umum ARIMA (p, d, q) sebagai berikut:
\[ \phi_p(B)Y_t^*=\theta_0+\theta_q(B)e_t\\ \]
\[ \begin{aligned} \text{Dengan:}\\ Y_t^*&= \text{ data deret waktu yang telah dilakukan differencing}\\ \phi_p(B)&=1-\phi_1B-\phi_2B^2-...-\phi_pB^p\\ \phi_q(B)&=1-\phi_1B-\phi_2B^2-...-\phi_qB^q\\ (1-B)^d&=\text{ differencing non-musiman pada orde ke-d}\\ e_t&=\text{ nilai kesalahan pada waktu ke-t} \end{aligned} \]
Di mana nilai \(d>0\), untuk \(d=0\) model stasioner sama dengan \(ARMA(p,q)\).
Pembedaan (differencing) dengan lag-d dilakukan untuk menstasionerkan data. Konsep differencing adalah mengurangkan antara pengamatan Yt dengan pengamatan sebelumnya yaitu Yt-1. Metode estimasi maximum likelihood masih dianggap metode estimasi parameter ARIMA yang efisien (As’ad, et al. 2017).
Augmented Dickey-Fuller (ADF)
Uji Augmented Dickey Fuller (ADF) merupakan pengujian yang dilakukan terhadap data deret waktu (time series) untuk mengetahui apakah data deret waktu tersebut stationer atau tidak. Tidak semua proses runtun waktu dapat direpresentasikan dengan baik menggunakan model AR(1). Jika model merupakan suatu autoregresif tingkat p, dengan p ≥ 1, Dickey dan Fuller menambahkan tiga statistik-F untuk uji hipotesis gabungan (joint hypotesis) pada koefisien-koefisien model autoregresif yang terbentuk. Uji akar-akar unit metode Dickey-Fuller untuk model autoregresif tingkat p dengan p ≥ 1 dikenal sebagai uji Dickey-Fuller diperluas (Augmented Dickey-Fuller Test) (Rusdi, 2011).
Teknik Interpolasi
Teknik interpolasi memperkirakan nilai yang hilang dengan mengasumsikan hubungan dalam rentang titik data. Interpolasi adalah perkiraan suatu nilai tengah dari suatu set nilai yang diketahui. Dalam teknik statistik bergulir di mana hanya nilai-nilai sebelumnya yang dianggap memperhitungkan nilai yang hilang, teknik interpolasi memperkirakan dengan titik data masa lalu dan masa akan datang yang diketahui. Interpolasi memiliki berbagai metode:
Linier: Mengasumsikan hubungan linier b/w rentang titik data
Spline: Memperkirakan nilai yang meminimalkan kelengkungan keseluruhan sehingga memperoleh permukaan halus yang melewati titik input.
Waktu: Memperkirakan nilai yang hilang dengan lebih fokus pada titik terdekat daripada titik jauh. Ada berbagai teknik interpolasi lain yang dapat digunakan untuk menghitung nilai yang hilang.
Semua ini mengasumsikan bahwa titik data yang berdekatan serupa, yang tidak selalu demikian. Menurut Fatimah (2015), berdasarkan derajat polinomial interpolasi dibagi menjadi empat macam yaitu:
Interpolasi Linear merupakan interpolasi untuk polinomial berderajat satu.
Interpolasi Kuadrat merupakan interpolasi untuk polinomial berderajat dua.
Interpolasi Lagrange merupakan interpolasi untuk polinomial berderajat m-1 jika diberikan n titik, yaitu 𝑥1, 𝑥2, …, 𝑥𝑛.
Interpolasi Newton merupakan interpolasi untuk polinomial berderajat m jika diberikan n+1 titik, yaitu 𝑥0, 𝑥1, 𝑥2,… , 𝑥𝑛.
Differencing/Pembedaan
Teknik Differencing (Pembedaan) dapat membantu menstabilkan nilai rata-rata deret waktu dengan menghilangkan perubahan tingkat deret waktu, dan karenanya menghilangkan (atau mengurangi) tren dan musiman.
Package yang digunakan
library(googlesheets4)
library(tseries)
library(forecast)
library(TTR)
library(TSA)
library(imputeTS)
library(ggplot2)
library(lmtest)
library(ggpubr)
Data untuk Analisis
Data yang digunakan adalah data Indeks Harga Saham Gabungan (IHSG) harian 1 tahun terakhir yang bersumber dari yahoo finance. Data tersebut telah diunduh dan dirangkum pada google sheets ini..
Import Data
Data yang digunakan hanyalah data Close, didapatkan
dengan syntax berikut:
gs4_deauth()
daily <- read_sheet("https://docs.google.com/spreadsheets/d/1qLvTOVejNRXFKpu57O_vxJ55cc3qFc_aKDAS_xzU2Go/edit?usp=sharing")
daily <- daily[c("Date","Close")]
daily$Date <- as.Date(daily$Date)
daily
Cek missing value:
# Cek berdasarkan plot
ggplot(daily, aes(x=Date, y=Close), x_axis_labels=daily$Date)+
labs(title = "Distribution of Missing Values",
y="Nilai IHSG",
subtitle = "Time Series with missing regions") +
geom_line() + geom_point() + theme_minimal() +
theme(legend.position="none", plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5))
Plot di atas merupakan plot asli dari dat IHSG harian. Dapat terlihat terdapat banyak data yang hilang.
# Cek berdasarkan tabel
daily[which(is.na(daily$Close)),]
Dari output di atas, dapat terlihat bahwa terdapat missing value pada 119 baris dari total 365 data. Hal ini melanggar salah satu syarat data time series, yaitu rentang waktu yang tidak sama. Missing value ini dapat terjadi karana bursa saham Indonesia hanya bekerja di hari kerja dan akan libur di setiap tanggal merah dan akhir pekan. Oleh karena itu, akan dilakukan penanganan missing value . Adapun teknik missing value yang akan dilakukan adalah 2, yaitu interpolasi linear dan interpolasi spline.
Menduga Missing Value
Pendugaan dilakukan dengan teknik interpolasi yang memperhitungkan
nilai sebelum dan setelah nilai yang hilang. Interpolasi linear
mengasumsikan hubungan linear antara nilai di sekitar missing value.
Sedangkan, interpolasi spline mengasumsikan hubungan tak linear sehingga
memperhitungkan kelengkungan antara nilai di sekitar missing value. Akan
dibandingkan manakah metode penanganan missing value terbaik untuk
menduga nilai IHSG harian. Fungsi yang digunakan untuk mengatasi
missing value adalah fungsi na_interpolation yang
tersedia pada package imputeTS, yang syntax-nya adalah
sebagai berikut:
daily_linear <- na_interpolation(daily, option = "linear")
daily_linear
daily_spline <- na_interpolation(daily, option = "spline")
daily_spline
Setelah dilakukan penanganan, dapat terlihat bahwa nilai IHSG sudah terisi semua dengan kedua metode di atas.
Eksplorasi Data
Eksplorasi data diperlukan untuk melihat pola dari data time series. Selain itu, eksplorasi juga berguna dalam pembagian data training dan data testing. Data testing yang baik adalah data testing yang memiliki pola seperti data trainingnya. Maka dari itu, diperlukan eksplorasi data untuk menentukan proporsi terbaik data training vs data testing.
#linear
plin <- ggplot(daily_linear, aes(x=Date, y=Close))+
scale_x_date(date_breaks = "6 weeks", date_labels = "%Y %b") +
labs(title = "Plot Time Series Data IHSG Harian (Linear)",
y="Nilai IHSG",
subtitle = "(Desember 2021 sd November 2022)") +
geom_line()+
theme(plot.title = element_text(face = "bold", hjust=.5),
plot.subtitle = element_text(hjust=.5))
plin
#Spline
pspl <- ggplot(daily_spline, aes(x=Date, y=Close)) +
geom_line() +
scale_x_date(date_breaks = "6 weeks", date_labels = "%Y %b") +
labs(title = "Plot Time Series Data IHSG Harian (Spline)",
subtitle = "(Desember 2021 sd November 2022)",
y="Nilai IHSG") +
theme(plot.title = element_text(face = "bold", hjust=.5),
plot.subtitle = element_text(hjust=.5))
pspl
Dari plot di atas, terlihat bahwa plot pendugaan spline terlihat lebih fluktuatif jika dibandingkan plot pendugaan linear. Namun, hal itu tidak mengubah kecenderungan pola data yang memiliki pola trend yang naik. Terlihat pula bahwa pembagian data training-testing dapat dilakukan antara bulan Juli 2022 hingga Agustus 2022. Hal ini karena pola setelah bulan-bulan tersebut cenderung memiliki pola trend naik pula, sama seperti data trainingnya. Untuk lebih jelasnya, perhatikan penjelasan di bawah ini:
p = 0.67 #setelah dilakukan pencarian nilai proporsi data training terbaik
freq_train=as.integer(p*nrow(daily))
ggplot(daily_linear, aes(x=Date, y=Close)) +
geom_line() +
scale_x_date(date_breaks = "6 weeks", date_labels = "%Y %b") +
labs(title = "Plot Time Series Data IHSG harian (Linear)",
subtitle = "(Desember 2021 sd November 2022)") +
geom_vline(aes(xintercept = Date[freq_train],
col="Frequenclin_train_Data"), lty=2, lwd=.7) +
theme(plot.title = element_text(face = "bold", hjust=.5),
plot.subtitle = element_text(hjust=.5),
legend.position = "bottom") +
scale_color_manual(name = "", values = c(Frequenclin_train_Data="red"))
ggplot(daily_spline, aes(x=Date, y=Close)) +
geom_line() +
scale_x_date(date_breaks = "6 weeks", date_labels = "%Y %b") +
labs(title = "Plot Time Series Data IHSG harian (Spline)",
subtitle = "(Desember 2021 sd November 2022)") +
geom_vline(aes(xintercept = Date[freq_train],
col="Frequenclin_train_Data"), lty=2, lwd=.7) +
theme(plot.title = element_text(face = "bold", hjust=.5),
plot.subtitle = element_text(hjust=.5),
legend.position = "bottom") +
scale_color_manual(name = "", values = c(Frequenclin_train_Data="red"))
Setelah dilakukan eksplorasi kembali, didapatkan titik potong yang sekiranya baik dalam membagi data training testing terdapat pada nilai proporsi data training 0.67 atau \(p=67\%\). Titik tersebut bertepatan pada amatan ke-244 atau tanggal 1 Agustus 2022 (didapatkan dengan syntax di bawah).
freq_train
## [1] 244
daily[freq_train,1]
Selanjutnya, akan dilakukan pembagian data training testing berdasarkan eksplorasi di atas.
Splitting Data
train <- 1:freq_train
# Linear
y_lin <- daily_linear$Close
lin_train <- ts(y_lin[train])
lin_test <- ts(y_lin[-train], start = freq_train+1)
ggplot(daily_linear[train,], aes(x=Date, y=Close)) +
geom_line() +
scale_x_date(date_breaks = "6 weeks", date_labels = "%Y %b") +
labs(title = "Plot Time Series Data Training (Linear)",
subtitle = "(Desember 2021 sd November 2022)",
y="Harga IHSG") +
theme(plot.title = element_text(face = "bold", hjust=.5),
plot.subtitle = element_text(hjust=.5))
ggplot(daily_linear[-train,], aes(x=Date, y=Close)) +
geom_line() +
scale_x_date(date_breaks = "6 weeks", date_labels = "%Y %b") +
labs(title = "Plot Time Series Data Testing (Linear)",
subtitle = "(Desember 2021 sd November 2022)",
y="Harga IHSG") +
theme(plot.title = element_text(face = "bold", hjust=.5),
plot.subtitle = element_text(hjust=.5))
# Spline
y_spl <- daily_spline$Close
spl_train <- ts(y_spl[train])
spl_test <- ts(y_spl[-train], start = freq_train+1)
ggplot(daily_spline[train,], aes(x=Date, y=Close)) +
geom_line() +
scale_x_date(date_breaks = "6 weeks", date_labels = "%Y %b") +
labs(title = "Plot Time Series Data Training (Spline)",
subtitle = "(Desember 2021 sd November 2022)",
y="Harga IHSG") +
theme(plot.title = element_text(face = "bold", hjust=.5),
plot.subtitle = element_text(hjust=.5))
ggplot(daily_spline[-train,], aes(x=Date, y=Close)) +
geom_line() +
scale_x_date(date_breaks = "6 weeks", date_labels = "%Y %b") +
labs(title = "Plot Time Series Data Testing (Spline)",
subtitle = "(Desember 2021 sd November 2022)",
y="Harga IHSG") +
theme(plot.title = element_text(face = "bold", hjust=.5),
plot.subtitle = element_text(hjust=.5))
Terlihat bahwa pola data testing tidak berbeda jauh dengan pola data training. Hal ini menandakan bahwa pembagian kedua data ini telah tepat.
Membuat Model ARIMA pada data dugaan interpolasi linear
Cek Kestasioneran data
Prosedur Eksploratif
Secara eksploratif, kestasioneran data dapat terlihat dari plot deret waktu atau melihat plot acf dari peubah yang akan diuji. Jika pada plot deret waktu menunjukan pola tren naik/turun pada kurun waktu tertentu (tidak stabil), atau, jika plot acf menunjukkan pola tails off slowly, maka data tersebut tidak stasioner.
plot.ts(lin_train, ylab=expression(Y[t]), main = "Plot Time Series Data IHSG harian (Linear)")
acf(lin_train, main="Series Data IHSG harian (Linear)")
Dapat terlihat dari plot deret waktu dan plot acf peubah lin_train di atas, bahwa secara eksploratif dapat disimpulkan data tersebut tidak stasioner. Uji ADF akan dilakukan untuk meyakinkan kesimpulan tersebut.
Uji Formal
Secara formal, metode Augmented Dickey-Fuller (ADF) dapat memberikan hasil uji secara akurat untuk menentukan apakah sebuah data stasioner atau tidak. Dengan hipotesis sebagai berikut:
\[ \begin{aligned} H_0&: \text{ Data tidak stasioner}\\ H_1&: \text{ Data stasioner} \end{aligned} \]
adf.test(lin_train)
##
## Augmented Dickey-Fuller Test
##
## data: lin_train
## Dickey-Fuller = -2.2698, Lag order = 6, p-value = 0.4623
## alternative hypothesis: stationary
Didapat nilai \(p-value(0.4623)>0.05\) maka tak tolak \(H_0\) pada taraf nyata 5%. Artinya, cukup bukti untuk mengatakan bahwa data tidak stasioner. Untuk mengatasi ketidakstasioneran ini, perlu dilakukan differencing atau pembedaan.
Differencing
lin_diff <- diff(lin_train, differences = 1)
head(lin_diff)
## Time Series:
## Start = 2
## End = 7
## Frequency = 1
## [1] 76.143066 -45.313965 2.870117 2.870117 2.870117 55.452637
Cek ulang kestasioneran data
adf.test(lin_diff)
## Warning in adf.test(lin_diff): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: lin_diff
## Dickey-Fuller = -5.056, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
Didapat nilai \(P-value=0.01<0.05\) maka tolak \(H_0\) pada taraf nyata 5% atau tidak cukup bukti untuk mengatakan bahwa data tidak stasioner. Artinya, differencing pertama berhasil untuk membuat data stasioner.
Identifikasi model Arima
Untuk mengidentifikasi model arima, nilai ACF dan
PACF dapat digunakan untuk menentukan nilai q pada
nilai MA(q) dan nilai p pada model AR(p).
Namun, kedua nilai ini p dan q pada model campuran
ARMA(p,q). Oleh karena itu, dikembangkan metode
extended autocorrelation function (EACF) untuk
mengindentifikasi model campuran ARMA(p,q). Pada tabel
EACF, triangle of zeros akan terbentuk, dan nilai pada pojok
kiri atas akan bersesuaian dengan ordo ARMA.
ACF
acf(lin_diff)
Dari plot ACF di atas, dapat terlihat bahwa tidak
terdapat cuts off pada model. Oleh karena itu, model tidak dapat
ditentukan.
PACF
pacf(lin_diff)
Dari plot PACF di atas, dapat terlihat bahwa tidak
terdapat cuts off pada model. Oleh karena itu, model tidak dapat
ditentukan.
EACF
eacf(lin_diff)
## AR/MA
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 o x o o o o o o o o o o o o
## 1 o x o o o o o o o o o o o o
## 2 x x 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 o x o o o o o o o o o o
## 5 x x x o o o o o o o o o o o
## 6 x x x x o o o o o o o o o o
## 7 x x x x o o o o o o o o o o
Dari tabel EACF di atas, dapat dibentuk model
ARIMA(0,1,2), ARIMA(1,1,2), dan ARIMA(2,1,2).
Kesimpulan
Berdasarkan hasil eksploratif di atas, dapat disimpulkan bahwa terdapat empat model yang menjadi dugaan model terbaik untuk data IHSG, yaitu ARIMA(0,1,2), ARIMA(1,1,2), dan ARIMA(2,1,2). Keempat model akan dianalisis lebih lanjut pada bagian selanjutnya.
Pemilihan model terbaik
Signifikansi Parameter
ARIMA(0,1,2)
arima012 <- Arima(lin_train, order=c(0,1,2), method="ML")
coeftest(arima012)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ma1 -0.019243 0.063429 -0.3034 0.76160
## ma2 0.165620 0.065732 2.5196 0.01175 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Dari output di atas, dapat terlihat bahwa hanya dugaan parameter ma2 signifikan.
ARIMA(1,1,2)
arima112 <- Arima(lin_train, order=c(1,1,2), method="ML")
coeftest(arima112)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 0.173281 0.344427 0.5031 0.61489
## ma1 -0.186199 0.337848 -0.5511 0.58154
## ma2 0.166383 0.066327 2.5085 0.01212 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Dari output di atas, dapat terlihat bahwa hanya dugaan parameter ma2 signifikan.
ARIMA(2,1,2)
arima212 <- Arima(lin_train, order=c(2,1,2), method="ML")
coeftest(arima212)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 0.17358 0.39068 0.4443 0.6568
## ar2 -0.17979 0.43130 -0.4169 0.6768
## ma1 -0.18648 0.37440 -0.4981 0.6184
## ma2 0.34247 0.41224 0.8307 0.4061
Dari output di atas, dapat terlihat bahwa semua dugaan parameter tidak signifikan.
Keakuratan Model
akurasi_model = data.frame("Model" = c("ARIMA(0,1,2)", "ARIMA(1,1,2)", "ARIMA(2,1,2)"),
"AIC" = c(arima012$aic, arima112$aic, arima212$aic))
akurasi_model[order(akurasi_model[,2]),]
Dari ukuran AIC dan BIC, terlihat bahwa model yang memiliki nilai AIC terkecil adalah ARIMA(0,1,2), yaitu sebesar 2501.503.
Dugaan Model terbaik
Berdasarkan hasil di atas, didapatkan tabel sebagai berikut:
| Model | Signifikansi Parameter (\(\alpha=5\%\)) | AIC |
|---|---|---|
| ARIMA(0,1,2) | MA(2) signifikan | 2501.503 |
| ARIMA(1,1,2) | MA(2) signifikan | 2503.245 |
| ARIMA(2,1,2) | Tidak ada parameter yang signifikan | 2505.067 |
Berdasarkan tabel di atas, maka dapat disimpulkan bahwa model terbaiknya adalah ARIMA(0,1,2).
Overfitting
Overfitting adalah metode dengan menambahkan parameter sebanyak 1 ke masing-masing AR atau MA. Artinya, model yang terbentuk dari overfitting ARIMA(0,1,2) adalah ARIMA(1,1,2) dan ARIMA(0,1,3). Namun, pada bagian sebelumnya sudah terbukti bahwa model ARIMA(1,1,2) tidak lebih baik daripada model arima (0,1,2). Oleh karena itu, overfitting yang dilakukan hanyalah ARIMA(0,1,3)
ARIMA(0,1,3)
arima013 <- Arima(lin_train, order=c(0,1,3), method="ML")
coeftest(arima013)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ma1 -0.010284 0.065077 -0.1580 0.87444
## ma2 0.161738 0.066474 2.4331 0.01497 *
## ma3 0.038634 0.065145 0.5931 0.55315
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Dari model overfitting ARIMA(0,1,2), dapat terlihat bahwa parameter yang ditambahkan yaitu MA(3) tidak signifikan terhadap model dan hanya parameter ma(2) yang signifikan. Hal ini mengindikasikan bahwa model ARIMA(0,1,3) tidak lebih baik daripada model awal ARIMA(0,1,2).
Kesimpulan Model Terbaik
Dari hasil di atas, dapat disimpulkan bahwa model terbaiknya adalah model awal yaitu ARIMA(0,1,2).
# Membuat variabel baru untuk model linear terbaik
best_linear <- arima012
Membuat Model ARIMA pada data dugaan interpolasi Spline
Cek Kestasioneran data
Prosedur Eksploratif
Secara eksploratif, kestasioneran data dapat terlihat dari plot deret waktu atau melihat plot acf dari peubah yang akan diuji. Jika pada plot deret waktu menunjukan pola tren naik/turun pada kurun waktu tertentu (tidak stabil), atau, jika plot acf menunjukkan pola tails off slowly, maka data tersebut tidak stasioner.
plot.ts(spl_train, ylab=expression(Y[t]), main = "Plot Time Series Data IHSG harian (Spline)")
acf(spl_train, main="Series Data IHSG harian (Spline)")
Dapat terlihat dari plot deret waktu dan plot acf peubah lin_train di atas, bahwa secara eksploratif dapat disimpulkan data tersebut tidak stasioner. Uji ADF akan dilakukan untuk meyakinkan kesimpulan tersebut.
Uji Formal
Secara formal, metode Augmented Dickey-Fuller (ADF) dapat memberikan hasil uji secara akurat untuk menentukan apakah sebuah data stasioner atau tidak. Dengan hipotesis sebagai berikut:
\[ \begin{aligned} H_0&: \text{ Data tidak stasioner}\\ H_1&: \text{ Data stasioner} \end{aligned} \]
adf.test(spl_train)
##
## Augmented Dickey-Fuller Test
##
## data: spl_train
## Dickey-Fuller = -2.5307, Lag order = 6, p-value = 0.3525
## alternative hypothesis: stationary
Didapat nilai \(P-value>0.05\) maka tak tolak \(H_0\) pada taraf nyata 5%. Artinya, cukup bukti untuk mengatakan bahwa data tidak stasioner. Untuk mengatasi ketidakstasioneran ini, perlu dilakukan differencing atau pembedaan.
Differencing
spl_diff <- diff(spl_train, differences = 1)
head(spl_diff)
## Time Series:
## Start = 2
## End = 7
## Frequency = 1
## [1] 76.143066 -45.313965 -36.072742 2.672844 42.010250 55.452637
Cek ulang kestasioneran data
adf.test(spl_diff)
## Warning in adf.test(spl_diff): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: spl_diff
## Dickey-Fuller = -5.2033, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
Didapat nilai \(P-value=0.01<0.05\) maka tolak \(H_0\) pada taraf nyata 5% atau tidak cukup bukti untuk mengatakan bahwa data tidak stasioner. Artinya, differencing pertama berhasil untuk membuat data stasioner.
Identifikasi model Arima
Untuk mengidentifikasi model arima, nilai ACF dan
PACF dapat digunakan untuk menentukan nilai q pada
nilai MA(q) dan nilai p pada model AR(p).
Namun, kedua nilai ini p dan q pada model campuran
ARMA(p,q). Oleh karena itu, dikembangkan metode
extended autocorrelation function (EACF) untuk
mengindentifikasi model campuran ARMA(p,q). Pada tabel
EACF, triangle of zeros akan terbentuk, dan nilai pada pojok
kiri atas akan bersesuaian dengan ordo ARMA.
ACF
acf(spl_diff)
Dari plot ACF di atas, dapat terlihat bahwa terdapat
cuts off setelah lag 1. Oleh karena itu, model yang terbentuk adalah
ARIMA(0,1,1).
PACF
pacf(spl_diff)
Dari plot PACF di atas, dapat terlihat bahwa terdapat
cuts off setelah lag 1. Oleh karena itu, model yang terbentuk adalah
ARIMA(1,1,0).
Kesimpulan
Berdasarkan hasil eksploratif di atas, dapat disimpulkan bahwa terdapat dua model yang menjadi dugaan model terbaik untuk data IHSG, yaitu ARIMA(0,1,1) dan ARIMA(1,1,0). Kedua model akan dianalisis lebih lanjut pada bagian selanjutnya.
Pemilihan model terbaik
Signifikansi Parameter
ARIMA(0,1,1)
arima011 <- Arima(spl_train, order=c(0,1,1), method="ML")
coeftest(arima011)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ma1 0.315535 0.062598 5.0407 4.639e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Dari output di atas, dapat terlihat bahwa dugaan parameter ma1 signifikan.
ARIMA(1,1,0)
arima110 <- Arima(spl_train, order=c(1,1,0), method="ML")
coeftest(arima110)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 0.270881 0.061935 4.3737 1.222e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Dari output di atas, dapat terlihat bahwa dugaan parameter ar1 signifikan.
Keakuratan Model
akurasi_model = data.frame("Model" = c("ARIMA(0,1,1)", "ARIMA(1,1,0)"),
"AIC" = c(arima011$aic, arima110$aic))
akurasi_model[order(akurasi_model[,2]),]
Dari ukuran AIC dan BIC, terlihat bahwa model yang memiliki nilai AIC terkecil adalah ARIMA(0,1,1), yaitu sebesar 2544.930. Kemudian, model yang memiliki nilai AIC terbesar adalah ARIMA(2,1,3).
Dugaan Model terbaik
Berdasarkan hasil di atas, didapatkan tabel sebagai berikut:
| Model | Signifikansi Parameter (\(\alpha=5\%\)) | AIC |
|---|---|---|
| ARIMA(0,1,1) | Seluruh parameter signifikan | 2544.930 |
| ARIMA(1,1,0) | Seluruh parameter signifikan | 2548.182 |
Berdasarkan tabel di atas, maka dapat disimpulkan bahwa model terbaiknya adalah ARIMA(0,1,1).
Overfitting
Overfitting adalah metode dengan menambahkan parameter sebanyak 1 ke masing-masing AR atau MA. Artinya, model yang terbentuk dari overfitting ARIMA(0,1,1) adalah ARIMA(0,1,2) dan ARIMA(1,1,1).
ARIMA(0,1,2)
arima012 <- Arima(lin_train, order=c(0,1,2), method="ML")
coeftest(arima012)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ma1 -0.019243 0.063429 -0.3034 0.76160
## ma2 0.165620 0.065732 2.5196 0.01175 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Dari model overfitting ARIMA(0,1,2), dapat terlihat bahwa hanya parameter ma(2) yang signifikan. Hal ini mengindikasikan bahwa model ARIMA(0,1,2) tidak lebih baik daripada model awal ARIMA(0,1,1).
ARIMA(1,1,1)
arima111 <- Arima(spl_train, order=c(1,1,1), method="ML")
coeftest(arima111)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.074984 0.193437 -0.3876 0.69828
## ma1 0.382394 0.178440 2.1430 0.03211 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Dari output di atas, dapat terlihat bahwa ma1 signifikan, sedangkan ar1 tidak signifikan. Hal ini mengindikasikan bahwa model ARIMA(1,1,1) tidak lebih baik daripada model awal ARIMA(0,1,1).
Kesimpulan Model Terbaik
Dari hasil di atas, dapat disimpulkan bahwa model terbaiknya adalah model awal yaitu ARIMA(0,1,1).
# Membuat variabel baru untuk model linear terbaik
best_spline <- arima011
Diagnostik Model Terbaik
Prosedur Eskploratif Linear
#Eksplorasi
sisaan_lin <- best_linear$residuals
par(mfrow=c(2,2))
qqnorm(sisaan_lin)
qqline(sisaan_lin, col = "blue", lwd = 2)
plot(as.numeric(best_linear$fitted), as.numeric(sisaan_lin), xlab="Fitted", ylab="Sisaan", main="Residuals vs Fitted"); abline(h=0, col="red")
acf(sisaan_lin, lag.max = 20)
plot(1:length(sisaan_lin),sisaan_lin,type='o', xlab="Order",
main="Residuals vs Order"); abline(h=0, col="red")
Normal Q-Q Plot
Berdasarkan hasil eksplorasi di atas, terlihat bahwa banyak amatan sisaan cenderung menjauhi garis qq-plot distribusi normal. Oleh karena itu, secara eksploratif dapat dikatakan bahwa sisaan belum cukup menyebar normal.Plot Residual vs Fitted
Berdasarkan hasil eksplorasi di atas, mayoritas titik amatan berada disekitar nol meskipun ada beberapa titik amatan yang terletak jauh dari titik nol. Selain itu, dapat terlihat bahwa lebar pita dari sisaan tidak terlalu berbeda jauh dari kiri hingga ke kanan, hal ini mengindikasikan bahwa ragam dari sisaan cukup homogen.Plot ACF
Berdasarkan hasil eksplorasi di atas, pada plot ACF tidak terdapat garis vertikal di lag tertentu yang melebihi tinggi garis biru horizontal. Oleh karena itu, secara eksploratif plot ACF dapat disimpulkan tidak terdapat autokorelasi pada model.Residual vs Order
Berdasarkan plot residual vs order, terlihat bahwa titik amatan pada Residuals vs Order memiliki pola yang acak dan mayoritas bergerak di sekitar titik nol. Oleh karena itu, dapat disimpulkan bahwa secara eksploratif dapat dikatakan bahwa tidak terdapat autokorelasi pada sisaan.
Prosedur Eksploratif Spline
#Eksplorasi
sisaan <- best_spline$residuals
par(mfrow=c(2,2))
qqnorm(sisaan)
qqline(sisaan, col = "blue", lwd = 2)
plot(as.numeric(best_spline$fitted), as.numeric(sisaan), xlab="Fitted", ylab="Sisaan", main="Residuals vs Fitted"); abline(h=0, col="red")
acf(sisaan, lag.max = 20)
plot(1:length(sisaan),sisaan,type='o', xlab="Order",
main="Residuals vs Order"); abline(h=0, col="red")
Normal Q-Q Plot
Berdasarkan hasil eksplorasi di atas, terlihat bahwa banyak amatan sisaan cenderung menjauhi garis qq-plot distribusi normal. Oleh karena itu, secara eksploratif dapat dikatakan bahwa sisaan belum cukup menyebar normal.Plot Residual vs Fitted
Berdasarkan hasil eksplorasi di atas, mayoritas titik amatan berada disekitar nol meskipun ada beberapa titik amatan yang terletak jauh dari titik nol. Selain itu, dapat terlihat bahwa lebar pita dari sisaan tidak terlalu berbeda jauh dari kiri hingga ke kanan, hal ini mengindikasikan bahwa ragam dari sisaan cukup homogen.Plot ACF
Berdasarkan hasil eksplorasi di atas, pada plot ACF tidak terdapat garis vertikal di lag tertentu yang melebihi tinggi garis biru horizontal. Oleh karena itu, secara eksploratif plot ACF dapat disimpulkan tidak terdapat autokorelasi pada model.Residual vs Order
Berdasarkan plot residual vs order, terlihat bahwa titik amatan pada Residuals vs Order memiliki pola yang acak dan mayoritas bergerak di sekitar titik nol. Oleh karena itu, dapat disimpulkan bahwa secara eksploratif dapat dikatakan bahwa tidak terdapat autokorelasi pada sisaan.
Uji Formal Linear
Kolmogrov-Smirnov Test
\(H_0:\) Sisaan menyebar secara normal
\(H_1:\) Sisaan tidak menyebar secara normal
ks.test(sisaan_lin, "pnorm")
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: sisaan_lin
## D = 0.46234, p-value < 2.2e-16
## alternative hypothesis: two-sided
Berdasarkan uji normalitas dengan Kolmogorov-Smirnov Test diperoleh nilai \(P-value = 2.2e-16 < 0.05\). Sehingga dapat disimpulkan bahwa data tidak menyebar secara normal.
L-Jung Box Test
\(H_0:\) Sisaan saling bebas (tidak terdapat korelasi)
\(H_1:\) Sisaan tidak saling bebas (terdapat korelasi)
Box.test(sisaan_lin,type = "Ljung-Box")
##
## Box-Ljung test
##
## data: sisaan_lin
## X-squared = 0.012989, df = 1, p-value = 0.9093
Berdasarkan uji autokorelasi dengan L-Jung Box Test diperoleh nilai \(P-value = 0.9093 > 0.05\). Sehingga, dapat disimpulkan bahwa tidak terdapat korelasi sisaan antar lagnya.
T-Test
\(H_0:\) Rataan sisaan sama dengan 0
\(H_1:\) Rataan sisaan tidak sama dengan 0
t.test(sisaan_lin, mu = 0, conf.level = 0.95)
##
## One Sample t-test
##
## data: sisaan_lin
## t = 0.64014, df = 243, p-value = 0.5227
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -3.494731 6.859723
## sample estimates:
## mean of x
## 1.682496
Berdasarkan uji rataan dengan T-Test diperoleh nilai \(P-value = 0.5227 > 0.05\), sehingga dapat disimpulkan bahwa sisasaannya sama dengan 0.
Box-Cox Test
BoxCox.lambda(sisaan_lin)
## [1] 0.9896363
Berdasarkan output di atas, dapat terlihat bahwa nilai lambda mendekati nilai 1. Artinya, tidak perlu dilakukan transformasi terhadap model atau ragam sisaan sudah cukup homogen.
Uji Formal Spline
Kolmogrov-Smirnov Test
\(H_0:\) Sisaan menyebar secara normal
\(H_1:\) Sisaan tidak menyebar secara normal
ks.test(sisaan, "pnorm")
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: sisaan
## D = 0.4833, p-value < 2.2e-16
## alternative hypothesis: two-sided
Berdasarkan uji normalitas dengan Kolmogorov-Smirnov Test diperoleh nilai \(P-value = 2.2e-16 < 0.05\). Sehingga dapat disimpulkan bahwa data tidak menyebar secara normal.
L-Jung Box Test
\(H_0:\) Sisaan saling bebas (tidak terdapat korelasi)
\(H_1:\) Sisaan tidak saling bebas (terdapat korelasi)
Box.test(sisaan,type = "Ljung-Box")
##
## Box-Ljung test
##
## data: sisaan
## X-squared = 0.032757, df = 1, p-value = 0.8564
Berdasarkan uji autokorelasi dengan L-Jung Box Test diperoleh nilai \(P-value = 0.8564 > 0.05\). Sehingga, dapat disimpulkan bahwa tidak terdapat korelasi sisaan antar lagnya.
T-Test
\(H_0:\) Rataan sisaan sama dengan 0
\(H_1:\) Rataan sisaan tidak sama dengan 0
t.test(sisaan, mu = 0, conf.level = 0.95)
##
## One Sample t-test
##
## data: sisaan
## t = 0.50755, df = 243, p-value = 0.6122
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -4.220632 7.150650
## sample estimates:
## mean of x
## 1.465009
Berdasarkan uji rataan dengan T-Test diperoleh nilai \(P-value = 0.6122 > 0.05\), sehingga dapat disimpulkan bahwa sisasaannya sama dengan 0.
Box-Cox Test
BoxCox.lambda(sisaan)
## [1] 1.017082
Berdasarkan output di atas, dapat terlihat bahwa nilai lambda mendekati nilai 1. Artinya, tidak perlu dilakukan transformasi terhadap model atau ragam sisaan sudah cukup homogen.
Perbandingan Pendugaan Model Terbaik berdasarkan Validasi Model
Plot
ramalan_linear <- forecast(best_linear, h = 121)
ramalan_spline <- forecast(best_spline, h = 121)
plot(ramalan_linear, main="Forecast ARIMA (Linear)"); lines(lin_test)
plot(ramalan_spline, main="Forecast ARIMA (Spline)"); lines(spl_test)
Berdasarkan perbandingan kedua plot di atas, dapat terlihat bahwa ramalan model ARIMA (Spline) relatif lebih mendekati data asli. Artinya, secara eksploratif dapat dikatakan bahwa model ARIMA (Spline) lebih baik dalam menduga nilai IHSG 121 hari setelah data latih.
Nilai Akurasi
akurasi_linear <- accuracy(ramalan_linear, lin_test)
akurasi_spline <- accuracy(ramalan_spline, spl_test)
akurasi_model = data.frame("Model" = c("ARIMA (Linear)", "ARIMA (Spline)"),
"RMSE" = c(akurasi_linear[2,2], akurasi_spline[2,2]),
"MAPE" = c(akurasi_linear[2,5], akurasi_spline[2,5]))
akurasi_model[order(akurasi_model[,3]),]
Dari ukuran RMSE dan MAPE, terlihat bahwa model ramalan yang memiliki nilai RMSE dan MAPE terkecil adalah ARIMA (Spline), yaitu sebesar 150.3765 dan 1.8465. Sehingga, dapat disimpulkan bahwa metode Interpolasi Spline lebih baik untuk digunakan dalam meramalkan data IHSG harian dengan parameter ARIMA terbaik yang digunakan adalah ARIMA(0,1,1).
Kesimpulan
Pendugaan nilai missing value pada data IHSG harian dapat diatasi dengan metode interpolasi Linear dan Spline. Dari hasil yang diperoleh, model ARIMA terbaik pada data interpolasi linear adalah ARIMA(0,1,2). Sedangkan, model ARIMA terbaik pada data interpolasi spline adalah ARIMA(0,1,1). Berdasarkan ukuran keakuratan validasi model (RMSE dan MAPE), dapat disimpulkan bahwa metode terbaik yang digunakan untuk menduga missing value data IHSG harian adalah metode Interpolasi Spline, dengan bentuk pemodelan yaitu ARIMA(0,1,1).
Daftar Pustaka
Achadiani D, Santoso Y. 2009. Metode interpolasi spline kuadrat untuk proses smoothing database. Bit (Fakultas Teknologi Informasi Universitas Budi Luhur). 6(2):38-52.
Aludi. 2022. Pengaruh Kenaikan Suku Bunga terhadap Indeks Harga Saham Gabungan. Perkumpulan Securities Crowdfunding Indonesia. Jakarta: 29 September 2022.
Febrianti S. 2019. Pemodelan Autoregressive Integrated Moving Average (ARIMA) dengan Data Hilang melalui Metode Interpolasi. Skripsi. Fakultas Matematika dan Ilmu Pengetahuan Alam. Universitas Lampung: Bandar Lampung.
Grestandhi, Jordan, Bambang Susanto, and Tundjung Mahatma. 2011. Analisis Perbandingan Metode Peramalan Indeks Harga Saham Gabungan (IHSG) Dengan Metode Ols-Arch Garch Dan Arima. Prosiding (T-14). 6(3): 131-141.
Hanke, J.E., Arthur G. Reitsch, and Dean W. Wichern. 2003. Peramalan Bisnis. Jakarta: PT. Prenhallindo.
Hartomo KD. 2016. Implementasi metode interpolasi linear untuk pembesaran resolusi citra. TEKNOIN. 11(3): 219-232.
Hatta HHM, Daud FM, Mohammad N. 2018. An application of time series ARIMA forecasting model for predicting the ringgit Malaysia-dollar exchange rate. Journal of Data Analysis. 1(1): 42-48.
Jalil A, Rao NH. 2019. Environmental Kuznets Curve (EKC). Massachusetts (MA): Academic Press.
Nurjanah IS, Ruhiat D, Andiani D. 2018. Implementasi Model Autoregressive Integrated Moving Average (ARIMA) untuk Peramalan Jumlah Penumpang Kereta Api di Pulau Sumatera. Jurnal Teorema: Teori dan Riset Matematika. 3(2):145-156.
[OJK] Otoritas Jasa Keuangan. 2021. Tutup Tahun 2021 dengan Optimisme Pasar Modal Indonesia Lebih Baik. https://www.ksei.co.id/files/uploads/press_releases /press_file/id-id/203_berita_pers_tutup_tahun_2021_dengan_optimisme_pasar_ modal_indonesia_lebih_baik_20211230130225.pdf, diakses pada 5 Desember 2022 pukul 14.00 WIB. Puspitasari I, Suparti, Wilandari Y. 2012. Analisis Indeks Harga Saham Gabungan (IHSG) dengan menggunakan Model Regresi Kernel. Jurnal Gaussian. 1(1): 93-102.
Purnama J, Juliana A. 2019. Analisis prediksi indeks harga saham gabungan menggunakan metode ARIMA. Cakrawala Management Business Journal. 2(2): 454 – 468.
Susanti R, Adji AR. 2020. Analisis peramalan IHSG dengan time series modeling ARIMA. Jurnal Manajemen Kewirausahaan. 17(1): 97 – 106.
Ukhra AU. 2014. Pemodelan dan peramalan data deret waktu dengan metode seasonal ARIMA. Jurnal Matematika UNAND. 3(3): 59 – 67.
Zulkarnain I. 2012. Akurasi peramalan harga saham dengan model ARIMA dan kombinasi main chart + ichimoku chart. Managament Insight. 7(1): 59-70.