Notes Theme: - Kelas A: cayman
- Kelas B: tactile
- Kelas C: architect
- Kelas D: hpstr
Library:
> library(tseries)
> library(FSA)
> library(knitr)
> library(tseries)
> library(TSA)
> library(lmtest)
> library(forecast)
> library(MLmetrics)
> library(xts)
> library(readxl)
> library(ggplot2)
> library(MASS)
> library(forecast)
> library(nortest)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.
Data terdiri dari 298 amatan dari 2 Januari 2024 sampai 9 April 2025. Data terdiri dari dua kolom yaitu tanggal dan Harga Saham. Berikut tampilan 10 amatan pertama.
| No | Tanggal | Harga Saham |
|---|---|---|
| 1 | 2024-01-02 | 7323.59 |
| 2 | 2024-01-03 | 7279.09 |
| 3 | 2024-01-04 | 7359.76 |
| 4 | 2024-01-05 | 7350.62 |
| 5 | 2024-01-08 | 7283.58 |
| 6 | 2024-01-09 | 7200.20 |
| 7 | 2024-01-10 | 7227.30 |
| 8 | 2024-01-11 | 7219.96 |
| 9 | 2024-01-12 | 7241.14 |
| 10 | 2024-01-15 | 7224.00 |
Eksplorasi data menggunakan visualisasi plot
> ggplot(data, aes(x = Tanggal, y = `Harga Saham`)) +
+ geom_line() +
+ labs(title = "Plot Deret Waktu IHSG",
+ x = "Tanggal",
+ y = "IHSG") +
+ theme_minimal()
Berdasarkan plot deret waktu diatas terlihat bahwa IHSG mengalami
fluktuasi yang cukup stabil pada periode Januari 2024 sampai Juni 2024.
Setelah bulan juni 2024, IHSG menurun cukup tajam dan diikuti kenaikan
setelah bulan juli sampai sekitar bulan oktober 2024. Namun, memasuki
tahun 2025 IHSG mengalami trend menurun secara tajam sampai mencapai
titik terendah pada Maret 2025.
Pada plot diketahui bahwa pengesahan RUU TNI pada 20 Maret 2025 merupakan kebijakan eksternal yang diketahui dan memiliki dampak sistematis terhadap pergerakan IHSG. Selain itu, penurunan yang drastis dapat berpotensi menghasilkan outlier. Sehingga akan dilakukan dua pemodelan yaitu outlier dan intervensi.
Pengecekan stasioneritas ragam akan menggunakan plot Box-Cox. Jika didapatkan p \(\lambda\) lebih dari 1 maka data sudah stasioner, sebaliknya jika pembulatan \(\lambda\) kurang dari 1 maka data tidak stasioner terhadap ragam. Jika data tidak stasioner terhadap ragam, perlu dilakukan transformasi Box-Cox dengan rumus sebagai berikut.
\[ y^{(\lambda)} = \begin{cases} \frac{y^\lambda - 1}{\lambda} & \text{jika } \lambda \neq 0, \\ \log(y) & \text{jika } \lambda = 0. \end{cases} \] Pada rstudio didapatkan hasil berupa berikut.
> x <- data$`Harga Saham`
> y<- data$Tanggal
> model <- lm(x~y, data = data)
> boxcox(model, lambda = seq(-2, 2, 0.5))> lambda <- BoxCox.lambda(data$`Harga Saham`)
> lambda
[1] 1.999924Berdasarkan pengecekan Box-Cox didapatkan \(\lambda= 1,999924\) maka dapat disimpulkan data sudah stasioner terhadap ragam
Pengecekan stasioneritas rata-rata akan menggunakan uji Augmented Dickey-Fuller (ADF) dengan hipotesis sebagai berikut.
Tolak \(H_0\) jika p-value kurang 0.05
Berdasarkan output rstudio didapatkan
> adf.test(data$`Harga Saham`)
Augmented Dickey-Fuller Test
data: data$`Harga Saham`
Dickey-Fuller = -0.58748, Lag order = 6, p-value = 0.9775
alternative hypothesis: stationarykarena p-value= 0,9775 maka didapatkan keputussan terima \(H_0\). Sehingga dapat disimpulkan bahwa data IHSG tidak stasioner terhadap rata-rata. Oleh karena itu, akan dilakukan diferensiasi sebanyak satu kali dengan rumus
\[ \nabla Y_t = Y_t - Y_{t-1} \]
di mana:
Berikut merupakan 10 amatan pertama hasil diferensiasi
| Perubahan |
|---|
| -44.50 |
| 80.67 |
| -9.14 |
| -67.04 |
| -83.38 |
| 27.10 |
| -7.34 |
| 21.18 |
| -17.14 |
| 18.79 |
Setelah melakukan diferensiasi, langkah selanjutnya adalah pengujian ADF ulang pada data diferensiasi. Dengan hipotesis
dan hasil
> adf.test(datadf)
Augmented Dickey-Fuller Test
data: datadf
Dickey-Fuller = -7.5443, Lag order = 6, p-value = 0.01
alternative hypothesis: stationaryBerdasarkan output diatas, didapatkan p-value 0.01 yang lebih kecil dari 0.05 maka dapat disimpulkan bahwa data diferensiasi pertama dari IHSG stasioner terhadap rata-rata.
Identifikasi model tentatif akan menggunakan plot ACF dan PACF dengan kriteria sebagai berikut.
| Model | ACF | PACF |
|---|---|---|
| AR(p) | Menurun secara eksponensial | Terjadi cut-off setelah lag ke-p |
| MA(q) | Terjadi cut-off setelah lag ke-q | Menurun secara eksponensial |
| ARMA(p,q) | Menurun secara eksponensial | Menurun secara eksponensial |
> acf(datadf)
Pada plot ACF, lag yang signifikan adalah lag 2,7,10,19.
> pacf(datadf)
Pada plot ACF, lag yang signifikan adalah lag 2,10, dan 19. Berdasarkan
kedua plot tersebut maka model tentatif yang mungkin adalah model
ARIMA([2,7,10,19],0,0) dan ARIMA (0,0,[2,10,19]).
> arima1 <- arima(x = datadf,
+ order = c(19, 0, 0), include.mean = TRUE,
+ fixed = c(0, NA, rep(0,4), NA, rep(0, 2), NA, rep(0, 8), NA, NA
+ ),
+ method = "ML")
>
> summary(arima1)
Call:
arima(x = datadf, order = c(19, 0, 0), include.mean = TRUE, fixed = c(0, NA,
rep(0, 4), NA, rep(0, 2), NA, rep(0, 8), NA, NA), method = "ML")
Coefficients:
ar1 ar2 ar3 ar4 ar5 ar6 ar7 ar8 ar9 ar10 ar11 ar12
0 -0.119 0 0 0 0 -0.1597 0 0 0.1782 0 0
s.e. 0 0.060 0 0 0 0 0.0614 0 0 0.0630 0 0
ar13 ar14 ar15 ar16 ar17 ar18 ar19 intercept
0 0 0 0 0 0 -0.2026 -4.2244
s.e. 0 0 0 0 0 0 0.0632 3.2362
sigma^2 estimated as 5181: log likelihood = -1692.19, aic = 3394.39
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set -0.05577381 71.97787 54.00799 -0.002396073 0.7622792 0.9842578
ACF1
Training set 0.003923282> coeftest(arima1)
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ar2 -0.119000 0.059988 -1.9837 0.047287 *
ar7 -0.159661 0.061409 -2.5999 0.009324 **
ar10 0.178227 0.062994 2.8293 0.004666 **
ar19 -0.202618 0.063239 -3.2040 0.001355 **
intercept -4.224442 3.236245 -1.3054 0.191773
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1Berdasarkan output diatas didapat bahwa semua paramater signifikan dengan persamaan model sebagai berikut. \[ Y_t = -4.2244 - 0.119 Y_{t-2} - 0.1597 Y_{t-7} + 0.1782 Y_{t-10} - 0.2026 Y_{t-19} + \epsilon_t \]
> arima2 <- arima(x = datadf,
+ order = c(0, 0, 19), include.mean = TRUE,
+ fixed = c(0, NA, rep(0,7), NA, rep(0, 8), NA, NA
+ ),
+ method = "ML")
>
> summary(arima2)
Call:
arima(x = datadf, order = c(0, 0, 19), include.mean = TRUE, fixed = c(0, NA,
rep(0, 7), NA, rep(0, 8), NA, NA), method = "ML")
Coefficients:
ma1 ma2 ma3 ma4 ma5 ma6 ma7 ma8 ma9 ma10 ma11 ma12 ma13
0 -0.1069 0 0 0 0 0 0 0 0.1139 0 0 0
s.e. 0 0.0571 0 0 0 0 0 0 0 0.0651 0 0 0
ma14 ma15 ma16 ma17 ma18 ma19 intercept
0 0 0 0 0 -0.1836 -4.3319
s.e. 0 0 0 0 0 0.0638 3.5450
sigma^2 estimated as 5369: log likelihood = -1697.22, aic = 3402.45
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set -0.021115 73.27529 54.45222 -0.001206947 0.7688139 0.9923537
ACF1
Training set 0.003766416> coeftest(arima2)
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ma2 -0.106904 0.057060 -1.8735 0.060995 .
ma10 0.113856 0.065108 1.7487 0.080338 .
ma19 -0.183591 0.063765 -2.8792 0.003987 **
intercept -4.331865 3.545013 -1.2220 0.221723
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1Berdasarkan uji signifikansi diatas terdapat parameter yang tidak signifikan yaitu parameter MA2 dan MA10. Maka dapat disimpulkan model ARIMA (0,0,[2,10,19]) tidak cocok digunakan pada kasus ini. Sehingga uji Diagnostik akan dilakukan pada ARIMA([2,7,10,19],0,0).
Pengujian normalitas residual akan menggunakan uji Anderson-Darling dengan hipotesis sebagai berikut.
\(H_0:\) :yang menyatakan bahwa residual model (εₜ) berdistribusi normal dengan mean μ dan varians σ² vs
\(H_1:\) : residual model (εₜ) tidak berdistribusi normal
Secara matematis dapat dituliskan:
\[ H_0: \epsilon_t \sim \mathcal{N}(\mu, \sigma^2) \quad \text{vs} \quad H_1: \epsilon_t \not\sim \mathcal{N}(\mu, \sigma^2) \] Berdasarkan output Rstudio didapatkan hasil sebagai berikut
> ad.test(residuals(arima1))
Anderson-Darling normality test
data: residuals(arima1)
A = 2.1479, p-value = 1.821e-05Berdasarkan output diatas, didapatkan p-value yang kurang dari 0.05 maka disimpulkan tolak \(H_0:\). Oleh karena itu, residual tidak berdistribusi normal.
Pengujian autokorelasi residual akan digunakan uji Ljung-Box yang memiliki hipotesis sebagai berikut.
\[ \begin{aligned} &H_0: \rho_1 = \rho_2 = \dots = \rho_{20} = 0 \\ &H_1: \rho_i \neq 0 \quad \text{untuk suatu } i \leq 20 \end{aligned} \]
> Box.test(residuals(arima1), lag = 20, type = "Ljung-Box")
Box-Ljung test
data: residuals(arima1)
X-squared = 12.634, df = 20, p-value = 0.8925Berdasarkan hasil diatas, didapatkan p-value sebesar 0,8925. Maka didapat keputusan terima \(H_0:\). Oleh karena itu, disimpulkan tidak terjadi autokorelasi residual.
Berdasarkan signifikansi parameter dan uji diagnostik dapat disimpulkan bahwa model terbaik adalah ARIMA([2,7,10,19],0,0). Dengan persamaan \[ Y_t = -4.2244 - 0.119 Y_{t-2} - 0.1597 Y_{t-7} + 0.1782 Y_{t-10} - 0.2026 Y_{t-19} + \epsilon_t \]
Berdasarkan yang menurun secara tajam, maka dapat diperkirakan terjadinya adanya outlier. Pendeteksian outlier pada model ARIMA akan menggunakan deteksi additive outlier, innovative outlier, dan level shift
> library(tsoutliers)
> prediksi <-data$`Harga Saham`[2:298]-residuals(arima1)
> outlier <- tso(prediksi, types = c('AO','IO','IS','TC'))
> print(outlier)
Series: prediksi
Regression with ARIMA(0,1,0) errors
Coefficients:
TC137 AO277 AO279 TC295 AO297
-264.3652 -226.7568 -204.6376 264.6799 -337.9785
s.e. 59.7140 45.7985 45.7985 62.0373 66.0661
sigma^2 = 4267: log likelihood = -1654.57
AIC=3321.14 AICc=3321.43 BIC=3343.28
Outliers:
type ind time coefhat tstat
1 TC 137 137 -264.4 -4.427
2 AO 277 277 -226.8 -4.951
3 AO 279 279 -204.6 -4.468
4 TC 295 295 264.7 4.266
5 AO 297 297 -338.0 -5.116Berdasarkan output diatas dapat diketahui bahwa tipe outlier yang terjadi adalah Tempory Change pada waktu ke 137 dan 295 dan Additive Outlier pada waktu ke 277, 279, dan 295
\[ \begin{aligned} Y_t = & -4.2244 - 0.119 Y_{t-2} - 0.1597 Y_{t-7} + 0.1782 Y_{t-10} - 0.2026 Y_{t-19} \\ & -264.4 I(t=137) -226.8 I(t=277) -204.6 I(t=279) \\ & +264.7 I(t=295) -338.0 I(t=297) + \epsilon_t \end{aligned} \]
> plot(outlier$effects)> xreg <- outlier$effects
> xreg
Time Series:
Start = 1
End = 297
Frequency = 1
[1] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[6] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[11] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[16] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[21] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[26] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[31] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[36] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[41] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[46] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[51] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[56] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[61] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[66] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[71] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[76] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[81] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[86] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[91] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[96] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[101] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[106] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[111] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[116] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[121] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[126] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[131] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[136] 0.000000e+00 -2.643652e+02 -1.850557e+02 -1.295390e+02 -9.067727e+01
[141] -6.347409e+01 -4.443186e+01 -3.110230e+01 -2.177161e+01 -1.524013e+01
[146] -1.066809e+01 -7.467663e+00 -5.227364e+00 -3.659155e+00 -2.561409e+00
[151] -1.792986e+00 -1.255090e+00 -8.785631e-01 -6.149942e-01 -4.304959e-01
[156] -3.013472e-01 -2.109430e-01 -1.476601e-01 -1.033621e-01 -7.235345e-02
[161] -5.064742e-02 -3.545319e-02 -2.481723e-02 -1.737206e-02 -1.216044e-02
[166] -8.512311e-03 -5.958618e-03 -4.171032e-03 -2.919723e-03 -2.043806e-03
[171] -1.430664e-03 -1.001465e-03 -7.010254e-04 -4.907178e-04 -3.435025e-04
[176] -2.404517e-04 -1.683162e-04 -1.178213e-04 -8.247494e-05 -5.773246e-05
[181] -4.041272e-05 -2.828890e-05 -1.980223e-05 -1.386156e-05 -9.703094e-06
[186] -6.792166e-06 -4.754516e-06 -3.328161e-06 -2.329713e-06 -1.630799e-06
[191] -1.141559e-06 -7.990915e-07 -5.593641e-07 -3.915549e-07 -2.740884e-07
[196] -1.918619e-07 -1.343033e-07 -9.401232e-08 -6.580862e-08 -4.606604e-08
[201] -3.224623e-08 -2.257236e-08 -1.580065e-08 -1.106046e-08 -7.742319e-09
[206] -5.419623e-09 -3.793736e-09 -2.655615e-09 -1.858931e-09 -1.301252e-09
[211] -9.108761e-10 -6.376132e-10 -4.463293e-10 -3.124305e-10 -2.187013e-10
[216] -1.530909e-10 -1.071637e-10 -7.501456e-11 -5.251019e-11 -3.675713e-11
[221] -2.572999e-11 -1.801100e-11 -1.260770e-11 -8.825388e-12 -6.177772e-12
[226] -4.324440e-12 -3.027108e-12 -2.118976e-12 -1.483283e-12 -1.038298e-12
[231] -7.268087e-13 -5.087661e-13 -3.561362e-13 -2.492954e-13 -1.745068e-13
[236] -1.221547e-13 -8.550831e-14 -5.985582e-14 -4.189907e-14 -2.932935e-14
[241] -2.053055e-14 -1.437138e-14 -1.005997e-14 -7.041977e-15 -4.929384e-15
[246] -3.450569e-15 -2.415398e-15 -1.690779e-15 -1.183545e-15 -8.284816e-16
[251] -5.799371e-16 -4.059560e-16 -2.841692e-16 -1.989184e-16 -1.392429e-16
[256] -9.747003e-17 -6.822902e-17 -4.776031e-17 -3.343222e-17 -2.340255e-17
[261] -1.638179e-17 -1.146725e-17 -8.027076e-18 -5.618953e-18 -3.933267e-18
[266] -2.753287e-18 -1.927301e-18 -1.349111e-18 -9.443775e-19 -6.610642e-19
[271] -4.627450e-19 -3.239215e-19 -2.267450e-19 -1.587215e-19 -1.111051e-19
[276] -7.777354e-20 -2.267568e+02 -3.810904e-20 -2.046376e+02 -1.867343e-20
[281] -1.307140e-20 -9.149980e-21 -6.404986e-21 -4.483490e-21 -3.138443e-21
[286] -2.196910e-21 -1.537837e-21 -1.076486e-21 -7.535402e-22 -5.274781e-22
[291] -3.692347e-22 -2.584643e-22 -1.809250e-22 -1.266475e-22 2.646799e+02
[296] 1.852759e+02 -2.082854e+02> arima1TCAO <- arima(x = datadf,
+ order = c(19, 0, 0), include.mean = TRUE,
+ fixed = c(0, NA, rep(0,4), NA, rep(0, 2), NA, rep(0, 8), NA, NA, NA), xreg = xreg,
+ method = "ML")
> summary(arima1TCAO)
Call:
arima(x = datadf, order = c(19, 0, 0), xreg = xreg, include.mean = TRUE, fixed = c(0,
NA, rep(0, 4), NA, rep(0, 2), NA, rep(0, 8), NA, NA, NA), method = "ML")
Coefficients:
ar1 ar2 ar3 ar4 ar5 ar6 ar7 ar8 ar9 ar10 ar11 ar12
0 -0.1202 0 0 0 0 -0.2047 0 0 0.1616 0 0
s.e. 0 0.0590 0 0 0 0 0.0616 0 0 0.0630 0 0
ar13 ar14 ar15 ar16 ar17 ar18 ar19 intercept xreg
0 0 0 0 0 0 -0.1744 -6.2078 -0.5454
s.e. 0 0 0 0 0 0 0.0629 3.0613 0.1119
sigma^2 estimated as 4801: log likelihood = -1680.81, aic = 3373.63
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set -0.04155156 69.29039 53.36989 -0.003486409 0.7527972 0.9726289
ACF1
Training set 0.05729604
> coeftest(arima1TCAO)
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ar2 -0.120160 0.058974 -2.0375 0.0415982 *
ar7 -0.204651 0.061589 -3.3228 0.0008911 ***
ar10 0.161635 0.063044 2.5638 0.0103523 *
ar19 -0.174368 0.062926 -2.7710 0.0055883 **
intercept -6.207809 3.061318 -2.0278 0.0425784 *
xreg -0.545366 0.111949 -4.8715 1.107e-06 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1Berdasarkan output diatas dapat disimpulkan bahwa pengaruh oulier mempengaruhi secara signifikan terhadap IHSG.
Pengujian normalitas residual akan menggunakan uji Anderson-Darling dengan hipotesis sebagai berikut.
\(H_0:\) :yang menyatakan bahwa residual model (εₜ) berdistribusi normal dengan mean μ dan varians σ² vs \(H_1:\) : residual model (εₜ) tidak berdistribusi normal
Secara matematis dapat dituliskan:
\[ H_0: \epsilon_t \sim \mathcal{N}(\mu, \sigma^2) \quad \text{vs} \quad H_1: \epsilon_t \not\sim \mathcal{N}(\mu, \sigma^2) \] Berdasarkan output Rstudio didapatkan hasil
> ad.test(residuals(arima1TCAO))
Anderson-Darling normality test
data: residuals(arima1TCAO)
A = 1.8997, p-value = 7.398e-05Berdsarkan output diatas didapat nilai p-value yang kurang dari 0.05 maka dapat disimpulkan tolak \(H_0:\). Oleh karena itu, dapat disimpulkan bahwa residual model tidak berdistribusi normal.
Pengujian autokorelasi residual akan digunakan uji Ljung-Box yang memiliki hipotesis sebagai berikut.
\[ \begin{aligned} &H_0: \rho_1 = \rho_2 = \dots = \rho_{20} = 0 \\ &H_1: \rho_i \neq 0 \quad \text{untuk suatu } i \leq 20 \end{aligned} \] Berdasarkan output Rstudio didapatkan hasil
> Box.test(residuals(arima1TCAO), lag = 20, type = "Ljung-Box")
Box-Ljung test
data: residuals(arima1TCAO)
X-squared = 11.366, df = 20, p-value = 0.9362Berdasarkan output diatas, didapat p-value yang lebih besar dari 0.05 maka terima \(H_0:\). Oleh karena, disimpulkan bahwa tidak terjadi autokorelasi antar residual pada model ARIMA Outlier
> library(ggplot2)
>
> plot_data <- data.frame(
+ Time = time(data$`Harga Saham`)[-c(1:1)],
+ Actual = as.numeric(data$`Harga Saham`)[-c(1:1)],
+ Fitted = as.numeric(fitted(arima1TCAO))
+ )
> ggplot(plot_data, aes(x = Time)) +
+ geom_line(aes(y = Actual, color = "Aktual"), linewidth = 0.8) +
+ geom_line(aes(y = Fitted, color = "Fitted"), linewidth = 0.8, linetype = "dashed") +
+ labs(title = "Perbandingan Data Aktual vs Fitted Model",
+ x = "Waktu",
+ y = "Harga Saham") +
+ scale_color_manual(values = c("Aktual" = "black", "Fitted" = "red"))Akan dilakukan peramalan untuk 20 periode kedepan, didapatkan hasil sebagi berikut
[1] 5973.099 5984.097 5975.450 5916.486 5899.230 5971.994 6018.071 6037.344
[9] 5941.756 5981.499 5978.994 5959.290 5965.946 5964.566 5937.042 5911.964
[17] 5903.849 6009.407 5995.755 5983.600 5977.266 5975.842 5988.229 5987.440
[25] 5943.959 5926.922 5923.181 5958.896 5943.578 5930.187
| x |
|---|
| 5973.099 |
| 5984.097 |
| 5975.450 |
| 5916.486 |
| 5899.230 |
| 5971.994 |
| 6018.071 |
| 6037.344 |
| 5941.756 |
| 5981.499 |
| 5978.994 |
| 5959.290 |
| 5965.946 |
| 5964.566 |
| 5937.042 |
| 5911.964 |
| 5903.849 |
| 6009.407 |
| 5995.755 |
| 5983.600 |
| 5977.266 |
| 5975.842 |
| 5988.229 |
| 5987.440 |
| 5943.959 |
| 5926.922 |
| 5923.181 |
| 5958.896 |
| 5943.578 |
| 5930.187 |
Dapat terlihat bahwa pada peramalan 30 periode kedepan, nilai IHSG terus mengalami penurunan.
Pemodelan intervensi diperlukan karena diketahui bahwa kasus pengesehan RUU TNI pada tanggal 20 Maret 2025 menyebabkan adanya penurunan drastis pada IHSG.
Akan dimodelkan ARIMA pada data Pra-intervensi yang berawal dari 2 Januari 2024 sampai 19 Maret 2025. Tampilan data akan seperti berikut
| x |
|---|
| 7323.59 |
| 7279.09 |
| 7359.76 |
| 7350.62 |
| 7283.58 |
| 7200.20 |
| 7227.30 |
| 7219.96 |
| 7241.14 |
| 7224.00 |
> plot(datainter)
### Uji Stasioneritas #### Stasioneritas Ragam
Pengecekan stasioneritas ragam akan menggunakan plot Box-Cox. Jika didapatkan p \(\lambda\) lebih dari 1 maka data sudah stasioner, sebaliknya jika pembulatan \(\lambda\) kurang dari 1 maka data tidak stasioner terhadap ragam. Jika data tidak stasioner terhadap ragam, perlu dilakukan transformasi Box-Cox.
> BoxCox.lambda(datainter)
[1] 1.999924Karena nilai \(\lambda\) lebih dari maka dapat dikatakan data pra-intervensi sudah stasioner terhadap ragam.
Pengecekan stasioneritas rata-rata akan menggunakan uji Augmented Dickey-Fuller (ADF) dengan hipotesis sebagai berikut.
Tolak \(H_0\) jika p-value kurang 0.05
Berdasarkan output rstudio didapatkan
> adf.test(datainter)
Augmented Dickey-Fuller Test
data: datainter
Dickey-Fuller = -1.033, Lag order = 6, p-value = 0.932
alternative hypothesis: stationaryBerdasarkan output diatas, didapatkan p-value 0.932 yang lebih besar dari 0.05 maka dapat disimpulkan bahwa data pra-intervensi tidak stasioner terhadap rata-rata. Maka akan dilakukan diferensiasi sebanyak satu kali lalu melakukan uji ADF kembali.
> datainterdif<- diff(datainter)
> adf.test(datainterdif)
Augmented Dickey-Fuller Test
data: datainterdif
Dickey-Fuller = -7.0095, Lag order = 6, p-value = 0.01
alternative hypothesis: stationaryBerdasarkan output diatas didapatkan p-value sebesar 0,01 yang lebih kecil dari 0.05. Maka didapat keputusan tolak \(H_0\). Oleh karena itu, dapat disimpulkan bahwa data diferensiasi pertama dari pra-intervensi sudah stasioner terhadap rata-rata.
> acf(datainterdif)> nilai <- acf(datainterdif, plot=FALSE)
> print(nilai)
Autocorrelations of series 'datainterdif', by lag
1 2 3 4 5 6 7 8 9 10 11
-0.022 -0.015 0.060 -0.008 0.038 -0.073 -0.082 -0.059 -0.091 0.115 -0.078
12 13 14 15 16 17 18 19 20 21 22
-0.019 0.086 -0.005 0.079 -0.027 -0.017 -0.052 -0.098 -0.012 -0.017 -0.062
23 24
0.021 -0.030 Berdarakan plot ACF didapat lag yang signifikan hanya pada lag 10
> pacf(datainterdif)
erdarakan plot PACF didapat lag yang signifikan hanya pada lag 10.
Berdasarkan kedua plot diatas model tentatif yang memungkinkan adalah
ARIMA(10,0,0), ARIMA(0,0,10), ARIMA([10],0,0), dan
ARIMA([10],0,[10])
> arima0010 <- Arima(
+ datainterdif,
+ order = c(0, 0, 10),
+ include.mean = TRUE,
+ method = "ML"
+ )
> summary(arima0010)
Series: datainterdif
ARIMA(0,0,10) with non-zero mean
Coefficients:
ma1 ma2 ma3 ma4 ma5 ma6 ma7 ma8
-0.0081 -0.0338 0.0448 0.0009 0.0195 -0.0395 -0.0863 -0.0403
s.e. 0.0594 0.0600 0.0619 0.0611 0.0632 0.0653 0.0627 0.0653
ma9 ma10 mean
-0.0960 0.0874 -3.3338
s.e. 0.0677 0.0649 3.3652
sigma^2 = 4672: log likelihood = -1625.51
AIC=3275.02 AICc=3276.15 BIC=3319.02
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set -0.0393662 67.03502 52.17176 Inf Inf 0.717049 -0.008561866
> coeftest(arima0010)
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ma1 -0.00811464 0.05943574 -0.1365 0.8914
ma2 -0.03382101 0.05998866 -0.5638 0.5729
ma3 0.04480399 0.06194399 0.7233 0.4695
ma4 0.00094122 0.06107308 0.0154 0.9877
ma5 0.01953532 0.06316898 0.3093 0.7571
ma6 -0.03953446 0.06533712 -0.6051 0.5451
ma7 -0.08628597 0.06267051 -1.3768 0.1686
ma8 -0.04031676 0.06529348 -0.6175 0.5369
ma9 -0.09601884 0.06769565 -1.4184 0.1561
ma10 0.08744771 0.06490557 1.3473 0.1779
intercept -3.33376960 3.36522628 -0.9907 0.3219berdasarkan output diatas, tidak ada parameter dari model yang memiliki pengaruh signifikan. Maka model ARIMA(0,0,10) tidak cocok digunakan.
> arima1000 <- Arima(
+ datainterdif,
+ order = c(10, 0, 0),
+ include.mean = TRUE,
+ method = "ML"
+ )
> summary(arima1000)
Series: datainterdif
ARIMA(10,0,0) with non-zero mean
Coefficients:
ar1 ar2 ar3 ar4 ar5 ar6 ar7 ar8
-0.0253 -0.0211 0.0754 0.0126 0.0438 -0.0776 -0.1035 -0.0745
s.e. 0.0584 0.0596 0.0595 0.0598 0.0595 0.0599 0.0600 0.0600
ar9 ar10 mean
-0.09 0.1304 -3.3493
s.e. 0.06 0.0603 3.4788
sigma^2 = 4609: log likelihood = -1623.64
AIC=3271.29 AICc=3272.42 BIC=3315.28
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set -0.05056863 66.58443 51.6979 Inf Inf 0.7105363 0.008188948
> coeftest(arima1000)
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ar1 -0.025296 0.058433 -0.4329 0.66508
ar2 -0.021077 0.059585 -0.3537 0.72353
ar3 0.075387 0.059481 1.2674 0.20501
ar4 0.012606 0.059767 0.2109 0.83295
ar5 0.043763 0.059456 0.7361 0.46169
ar6 -0.077581 0.059863 -1.2960 0.19499
ar7 -0.103535 0.059961 -1.7267 0.08422 .
ar8 -0.074522 0.059983 -1.2424 0.21409
ar9 -0.089984 0.060033 -1.4989 0.13390
ar10 0.130374 0.060265 2.1633 0.03051 *
intercept -3.349311 3.478818 -0.9628 0.33566
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1Berdasarkan output diatas, hanya satu parameter yang signifikan yaitu ar10, sisanya tidak signifikan. Maka dapat disimpulkan model ARIMA (10,0,0) tidak cocok untuk digunakan
> arima10_00 <- arima(x = datainterdif,
+ order = c(10, 0, 0), include.mean = TRUE,
+ fixed = c(rep(0,9), NA, NA),
+ method = "ML")
> summary(arima10_00)
Call:
arima(x = datainterdif, order = c(10, 0, 0), include.mean = TRUE, fixed = c(rep(0,
9), NA, NA), method = "ML")
Coefficients:
ar1 ar2 ar3 ar4 ar5 ar6 ar7 ar8 ar9 ar10 intercept
0 0 0 0 0 0 0 0 0 0.1233 -3.6126
s.e. 0 0 0 0 0 0 0 0 0 0.0604 4.5284
sigma^2 estimated as 4598: log likelihood = -1628.78, aic = 3261.56
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set 0.02024141 67.81073 52.02674 0.002584574 0.7295393 0.9989507
ACF1
Training set -0.0008026538
> coeftest(arima10_00)
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ar10 0.123315 0.060379 2.0423 0.04112 *
intercept -3.612599 4.528377 -0.7978 0.42500
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1Berdasrkan output diatas diketahui bahwa parameter ar10 signifikan. Oleh karena itu model ini cocok digunakan untuk data Pra-intervensi
> arima00_10 <- arima(x = datainterdif,
+ order = c(0, 0, 10), include.mean = TRUE,
+ fixed = c(rep(0,9), NA, NA),
+ method = "ML")
> summary(arima00_10)
Call:
arima(x = datainterdif, order = c(0, 0, 10), include.mean = TRUE, fixed = c(rep(0,
9), NA, NA), method = "ML")
Coefficients:
ma1 ma2 ma3 ma4 ma5 ma6 ma7 ma8 ma9 ma10 intercept
0 0 0 0 0 0 0 0 0 0.1340 -3.5955
s.e. 0 0 0 0 0 0 0 0 0 0.0641 4.5025
sigma^2 estimated as 4593: log likelihood = -1628.64, aic = 3261.27
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set 0.01999464 67.77349 51.969 0.002580221 0.7286192 0.9978421
ACF1
Training set -0.0009595943
> coeftest(arima00_10)
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ma10 0.133966 0.064073 2.0908 0.03654 *
intercept -3.595530 4.502533 -0.7986 0.42455
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1Berdasarkan output diatas, diketahui bahwa semua parameter signifikan, maka model ARIMA[0,0[10]] dapat digunakan.
> arima10_00_10 <- arima(x = datainterdif,
+ order = c(10, 0, 10), include.mean = TRUE,
+ fixed = c(rep(0,9), NA, rep(0,9), NA, NA),
+ method = "ML")
> summary(arima10_00_10)
Call:
arima(x = datainterdif, order = c(10, 0, 10), include.mean = TRUE, fixed = c(rep(0,
9), NA, rep(0, 9), NA, NA), method = "ML")
Coefficients:
ar1 ar2 ar3 ar4 ar5 ar6 ar7 ar8 ar9 ar10 ma1 ma2 ma3 ma4
0 0 0 0 0 0 0 0 0 -0.5444 0 0 0 0
s.e. 0 0 0 0 0 0 0 0 0 0.1491 0 0 0 0
ma5 ma6 ma7 ma8 ma9 ma10 intercept
0 0 0 0 0 0.6885 -3.4884
s.e. 0 0 0 0 0 0.1253 4.3204
sigma^2 estimated as 4530: log likelihood = -1626.8, aic = 3259.6
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set -0.02297456 67.30203 51.49289 0.001861122 0.721616 0.9887004
ACF1
Training set -0.004609932
> coeftest(arima10_00_10)
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ar10 -0.54442 0.14913 -3.6507 0.0002615 ***
ma10 0.68852 0.12527 5.4965 3.875e-08 ***
intercept -3.48845 4.32035 -0.8074 0.4194104
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1Berdasarkan output diatas, diketahui bahwa semua parameter signifikan, maka model ARIMA([10],0,[10]] dapat digunakan.
Hasil akhir menunjukan ARIMA(0,0,[10]) \[ Y_t = \ -3.595530 + \epsilon_t + \ 0.13966 \epsilon_{t-10} \] ARIMA([10,0,0]) \[ Y_t = \ -3.612599 + \ 0.123315Y_{t-10} + \epsilon_t \] dan ARIMA([10],0,[10]) \[ Y_t = \ -3.48845+ \ -0,544442Y_{t-10} + \epsilon_t + 0,68852 \epsilon_{t-10} \] dapat digunakan untuk model data pra-intervensi.
Hal yang pertama dilakukan adalah pengujian normalitas residual akan menggunakan uji Anderson-Darling dengan hipotesis sebagai berikut.
\(H_0:\) :yang menyatakan bahwa residual model (εₜ) berdistribusi normal dengan mean μ dan varians σ²
\(H_1:\) : residual model (εₜ) tidak berdistribusi normal
Secara matematis dapat dituliskan:
\[ H_0: \epsilon_t \sim \mathcal{N}(\mu, \sigma^2) \quad \text{vs} \quad H_1: \epsilon_t \not\sim \mathcal{N}(\mu, \sigma^2) \] Berdasarkan output Rstudio didapatkan hasil
> ad.test(residuals(arima10_00))
Anderson-Darling normality test
data: residuals(arima10_00)
A = 0.93905, p-value = 0.01716Berdasrkan uji anderson-darling didapatkan nilI P-Vlue= 0,01716 yang kurang dari 0,05. Maka dapat disimpulkan residual model ARIMA([10],0,0) tidak berdistribusi Normal
> ad.test(residuals(arima00_10))
Anderson-Darling normality test
data: residuals(arima00_10)
A = 0.9668, p-value = 0.01466Berdasrkan uji anderson-darling didapatkan nilI P-Vlue= 0,01466 yang kurang dari 0,05. Maka dapat disimpulkan residual model ARIMA([0,0,[10]) tidak berdistribusi Normal
> ad.test(residuals(arima10_00_10))
Anderson-Darling normality test
data: residuals(arima10_00_10)
A = 0.99608, p-value = 0.01241Berdasrkan uji anderson-darling didapatkan nilI P-Vlue= 0,01716 yang kurang dari 0,05. Maka dapat disimpulkan residual model ARIMA([10],0,0) tidak berdistribusi Normal
Setelah melakukan uji asumsi kenormalan residual, selanjutnya adalah pemeriksaan autokorelasi residual model \[ \begin{aligned} &H_0: \rho_1 = \rho_2 = \dots = \rho_{20} = 0 \\ &H_1: \rho_i \neq 0 \quad \text{untuk suatu } i \leq 20 \end{aligned} \] Berdasarkan output Rstudio didapatkan hasil
> Box.test(residuals(arima10_00), lag = 20, type = "Ljung-Box")
Box-Ljung test
data: residuals(arima10_00)
X-squared = 17.809, df = 20, p-value = 0.6Berdasarkan Output diketahui bahwa nilai p-value sebesar 0,6 yang lebih dari 0,05. Maka dapat disimpulkan tidak terjadi autokorelasi residual pada model ARIMA([10],0,0)
> Box.test(residuals(arima00_10), lag = 20, type = "Ljung-Box")
Box-Ljung test
data: residuals(arima00_10)
X-squared = 17.523, df = 20, p-value = 0.6188Berdasarkan Output diketahui bahwa nilai p-value sebesar 0,6188 yang lebih dari 0,05. Maka dapat disimpulkan tidak terjadi autokorelasi residual pada model ARIMA(0,0,[10])
> Box.test(residuals(arima10_00_10), lag = 20, type = "Ljung-Box")
Box-Ljung test
data: residuals(arima10_00_10)
X-squared = 17.477, df = 20, p-value = 0.6218Berdasarkan Output diketahui bahwa nilai p-value sebesar 0,6218 yang lebih dari 0,05. Maka dapat disimpulkan tidak terjadi autokorelasi residual pada model ARIMA(0,0,[10])
Karena ARIMA(0,0,[10]), ARIMA([10],0,0), dan ARIMA([10],0,[10]) sama baiknya, maka kriteria selanjutnta adalah menggunakan AIC. Model dengan nilai AIC terkecil akan dipilih sebagai model terbaik.
> AIC(arima00_10)
[1] 3263.274
> AIC(arima10_00)
[1] 3263.564
> AIC(arima10_00_10)
[1] 3261.604Berdasarkan nilai AIC didaptkan model terbaik adalah ARIMA([10],0,[10]) karena memiliki nilai AIC terkecil sebesar 3261,604. Persamaan sebagai berikut \[ Y_t = \ -3.48845+ \ -0,544442Y_{t-10} + \epsilon_t + 0,68852 \epsilon_{t-10} \]
> peramalan <- forecast(datainter, model = arima10_00_10, h=35)
> peramalan$mean
Time Series:
Start = 291
End = 325
Frequency = 1
[1] 544.49559 538.67953 530.58145 532.41288 557.89860 567.53381
[7] 570.14864 558.87838 536.28716 532.01786 -301.82348 -298.65708
[13] -294.24830 -295.24538 -309.12038 -314.36601 -315.78958 -309.65380
[19] -297.35462 -295.03032 158.93196 157.20811 154.80786 155.35069
[25] 162.90456 165.76040 166.53543 163.19497 156.49901 155.23361
[31] -91.91383 -90.97532 -89.66858 -89.96410 -94.07660> sisaan <- data$`Harga Saham`[291:298]-peramalan$mean
> sisaan
Time Series:
Start = 291
End = 325
Frequency = 1
[1] 5837.174 5719.500 5630.639 5703.207 5914.461 5943.086 5425.991 5413.682
[9] 5845.383 5726.162 6463.043 6534.277 6766.608 6805.865 6305.260 6286.926
[17] 6697.460 6567.834 6458.575 6530.650 6313.428 6353.412 5841.332 5817.209
[25] 6218.765 6092.420 5994.685 6072.425 6315.861 6355.386 6088.054 6063.535
[33] 6471.339 6348.144 6255.297> error <- rep(0,298)
> error[1:290]<-residuals(arima10_00_10)> error[291:298] <- sisaan
> plot(error, type="h", xlab="Waktu (T)", ylab = "Residual", xaxt = "n")
> abline(h=c(-3*sd(residuals(arima00_10)), 3*sd(residuals(arima00_10))), col="blue", lty=2)
> abline(v = 63, col = "red", lty = 3, lwd = 1.5)Berdasarkan Analisis Outlier didapatkan tie]pe outlier TC dan AO yang membentuk persamaan model sebagai berikut \[ \begin{aligned} Y_t = & -4.2244 - 0.119 Y_{t-2} - 0.1597 Y_{t-7} + 0.1782 Y_{t-10} - 0.2026 Y_{t-19} \\ & -264.4 I(t=137) -226.8 I(t=277) -204.6 I(t=279) \\ & +264.7 I(t=295) -338.0 I(t=297) + \epsilon_t \end{aligned} \] Peramalan untuk 30 periode kedepan memberikan kesimpulan bahwa efek RUU TNI akan terus memberikan dampak negatif terhadap nilai IHSG. Penurunan IHSG akan berdampak secara luas baik bagi pelaku pasa, perusahaan, bahkan perekonomian Nasional.
Penurunan IHSG seharusnya menjadi perhatian utama pemerintah.Pemerintah perlu segera mengambil langkah-langkah strategis dengan merumuskan kebijakan yang dapat mendorong pemulihan pasar modal. Selain itu, pemerintah seharusnya mengkaji terlebih dahulu suatu aturan sebelum disahkan.