Sebelum melakukan analisis data dengan \(\textit R-studio\) perlu memanggil \(\textit library\) yang diperlukan yaitu sebagai berikut.
library(tseries)
## Warning: package 'tseries' was built under R version 4.4.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(FSA)
## Warning: package 'FSA' was built under R version 4.4.3
## ## FSA v0.9.6. See citation('FSA') if used in publication.
## ## Run fishR() for related website and fishR('IFAR') for related book.
library(FinTS)
## Warning: package 'FinTS' was built under R version 4.4.3
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(tseries)
library(TSA)
## Warning: package 'TSA' was built under R version 4.4.1
##
## Attaching package: 'TSA'
## The following objects are masked from 'package:stats':
##
## acf, arima
## The following object is masked from 'package:utils':
##
## tar
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.4.2
library(forecast)
## Warning: package 'forecast' was built under R version 4.4.2
## Registered S3 methods overwritten by 'forecast':
## method from
## fitted.Arima TSA
## plot.Arima TSA
##
## Attaching package: 'forecast'
## The following object is masked from 'package:FinTS':
##
## Acf
library(MLmetrics)
## Warning: package 'MLmetrics' was built under R version 4.4.3
##
## Attaching package: 'MLmetrics'
## The following object is masked from 'package:base':
##
## Recall
library(xts)
library(readxl)
## Warning: package 'readxl' was built under R version 4.4.3
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
library(ggrepel)
## Warning: package 'ggrepel' was built under R version 4.4.3
library(MASS)
library(tsoutliers)
## Warning: package 'tsoutliers' was built under R version 4.4.3
Data yang digunakan dalam studi ini adalah data harian harga
penutupan Indeks Harga Saham Gabungan (IHSG) dari tanggal 2 Januari 2024
hingga 9 April 2025. Nilainya berubah-ubah setiap hari dan sangat
sensitif terhadap perkembangan ekonomi, kebijakan pemerintah, serta
sentimen pelaku pasar. Perubahan harga yang tajam dari waktu ke waktu
bisa menimbulkan lonjakan ekstrem yang dikenal sebagai pencilan. Salah
satu contoh kondisi yang menyebabkan gejolak tersebut adalah saat RUU
TNI disahkan pada 20 Maret 2025. Setelah kebijakan ini diumumkan, IHSG
mengalami penurunan tajam yang terus berlanjut hingga awal April.
Melihat sifat IHSG yang sangat dinamis, dibutuhkan metode peramalan yang
mampu menangkap pola-pola yang tersembunyi dalam data. Peramalan ini
penting untuk membantu investor membuat keputusan secara lebih terarah
dan berbasis data.
#Impor Data
data <- read_excel("D:/6th sem/Metode Peramalan/Praktikum/Tugas1/Data IHSG.xlsx",
col_types = c("numeric", "date", "numeric"))
head(data)
## # A tibble: 6 × 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.
Eksplorasi data deret waktu dilakukan untuk mengetahui pola dari data IHSG.
# Konversi tanggal dan buat time series
data$Tanggal <- as.Date(data$Tanggal, format="%m/%d/%Y")
ts_ihsg <- xts(data$`Harga Saham`, order.by = data$Tanggal)
# Plot time series
plot(ts_ihsg, main="Plot Deret Waktu IHSG", ylab="Harga Saham", xlab="Tanggal")
Pada plot deret waktu di atas, terlihat bahwa harga IHSG relatif stabil
dari awal hingga pertengahan tahun 2024, kemudian mengalami kenaikan
pada periode Juli hingga Oktober 2024. Memasuki kuartal akhir 2024
hingga awal tahun 2025, harga mulai menurun, dan penurunan tersebut
semakin tajam setelah pertengahan Maret 2025. Penurunan ini bertepatan
dengan pengesahan RUU TNI yang memicu sentimen negatif di pasar. Dengan
demikian, dapat dinyatakan bahwa terdapat intervensi pada periode
tersebut sehingga dapat diterapkan pemodelan ARIMA Intervensi dan
tambahan ARIMA Outlier untuk perbandingan. Sesuai fokus permasalahan
yang menyoroti pengaruh RUU TNI, pemodelan ARIMA intervensi dapat
dilakukan dengan menggunakan data sebelum intervensi, yaitu dari 2
Januari 2024 hingga 19 Maret 2025.
lambda1 <- BoxCox.lambda(ts_ihsg)
lambda1
## [1] 1.999924
Hasil pemeriksaan stasioneritas terhadap ragam menggunakan fungsi BoxCox.lambda() menunjukkan bahwa nilai \(\lambda = 1.999924\). Nilai lambda yang sangat mendekati 2 mengindikasikan bahwa data belum stasioner terhadap ragam, sehingga perlu dilakukan transformasi pertama menggunakan metode Box-Cox.
transformed1 <- BoxCox(ts_ihsg, lambda1)
# Uji Stasioneritas terhadap Ragam Kedua
lambda2 <- BoxCox.lambda(transformed1)
lambda2
## [1] 1.980901
Transformasi Box-Cox pertama menghasilkan nilai \(\lambda = 1.980901\). Meskipun terdapat sedikit penurunan nilai lambda, angka ini masih sangat dekat dengan 2, yang berarti ragam data belum stasioner terhadap ragam. Oleh karena itu, transformasi kedua diperlukan.
transformed2 <- BoxCox(transformed1, lambda2)
# Uji Stasioneritas terhadap Ragam Ketiga
lambda3 <- BoxCox.lambda(transformed2)
lambda3
## [1] 0.9980468
Transformasi Box-Cox kedua menghasilkan nilai \(\lambda = 0.9980468\), yang sangat dekat dengan 1. Hal ini menunjukkan bahwa data IHSG sudah stasioner terhadap ragam setelah ditrasnformasi dua kali.
Pengujian hipotesis stasioneritas terhadap rata-rata dapat
menggunakan statistik uji Dickey Fuller dengan hipotesis 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\)
Daerah penolakan:
apabila nilai-p kurang dari 0,05 maka \(H_0\) ditolak yang artinya data stasioner
terhadap rata-rata
adf.test(transformed2)
##
## Augmented Dickey-Fuller Test
##
## data: transformed2
## Dickey-Fuller = -1.0779, Lag order = 6, p-value = 0.9248
## alternative hypothesis: stationary
Hasil uji Dickey-Fuller pada data hasil transformasi Box-Cox kedua menunjukkan nilai-p sebesar \(0.9248\), yang lebih besar dari \(\alpha=0.05\). Dengan demikian, keputusan yang diambil adalah tolak ketidakstasioneran (terima \(H_0\)), sehingga dapat disimpulkan bahwa data belum stasioner terhadap rata-rata. Untuk mengatasi permasalahan ini, data perlu dilakukan differencing (pembedaan) orde pertama guna menghilangkan komponen non-stasioner tersebut dan mencapai kestasioneran terhadap rata-rata.
# Differencing orde 1
diff1 <- diff(transformed2, differences = 1)
# Visualisasi hasil differencing
plot(diff1, main = "Differencing Orde 1", ylab = "Nilai Berbeda", xlab = "Tanggal")
## Warning in merge.xts(temp_xts, xts_object, fill = na.locf, join = "right", :
## NAs introduced by coercion to integer range
# Uji ADF setelah differencing
adf.test(na.omit(diff1))
## Warning in adf.test(na.omit(diff1)): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: na.omit(diff1)
## Dickey-Fuller = -7.2371, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
Hasil uji Dickey-Fuller pada data hasil differencing pertama menunjukkan nilai-p sebesar \(0.01\) yang kurang dari \(\alpha=0.05\), sehingga menghasilkan keputusan tolak \(H_0\). Dengan demikian, dapat dinyatakan bahwa data hasil differencing pertama telah stasioner terhadap rata-rata.
Identifikasi model ARIMA dapat menggunakan plot ACF dan PACF. Nilai ACF dan PACF bertujuan untuk memilih orde \(p\) dan \(q\) pada model ARIMA. Pemeriksaan ACF dan PACF dilakukan pada data yang telah stasioner.
#Data IHSG yang Sudah Stasioner
data_stasioner <- na.omit(scale(diff1))
plot(data_stasioner, main = "Data IHSG Setelah Stasioner",
ylab = "Nilai Terdifferensi dan Distandarisasi", xlab = "Tanggal")
head(data_stasioner)
## [,1]
## 2024-01-03 -0.62527996
## 2024-01-04 1.29182361
## 2024-01-05 -0.08933211
## 2024-01-08 -0.97542805
## 2024-01-09 -1.18757200
## 2024-01-10 0.45165108
acf(data_stasioner)
pacf(data_stasioner)
Berdasarkan nilai pada plot ACF dan PACF, dapat diketahui bahwa ACF
signifikan pada lag ke-7 dan 19, sedangkan PACF signifikan pada lag
ke-7, 10, dan 19. Karena data yang dipakai sudah distasionerkan melalui
pembedaan satu kali, maka orde d = 0. Pada kasus ACF dan PACF yang hanya
signifikan pada lag tertentu, dapat digunakan model ARIMA restricted.
Model ARIMA restricted adalah model ARIMA yang menduga parameter hanya
untuk lag tertentu saja.
Maka, model-model ARIMA yang mungkin sesuai adalah model ARIMA([7,10,19], 0, 0) dan ARIMA(0, 0, [7,19]).
# Model 1: ARIMA([7,10,19], 0, 0)
m1 <- arima(data_stasioner, order=c(19, 0, 0),
fixed = c(rep(0, 6), NA, rep(0, 2), NA, rep(0,8), NA, NA),
transform.pars = FALSE)
coeftest(m1)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar7 -0.1613276 0.0593033 -2.7204 0.006521 **
## ar10 0.1284326 0.0598495 2.1459 0.031879 *
## ar19 -0.1758729 0.0599745 -2.9325 0.003363 **
## intercept 0.0024461 0.0467723 0.0523 0.958292
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Model 2: ARIMA(0, 0, [7,19])
m2 <- arima(data_stasioner, order=c(0,0,19),
fixed = c(rep(0, 6), NA, rep(0, 11), NA, NA))
coeftest(m2)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ma7 -0.1398797 0.0556145 -2.5152 0.011898 *
## ma19 -0.1833573 0.0605664 -3.0274 0.002467 **
## intercept 0.0058951 0.0391597 0.1505 0.880340
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Model 3: ARIMA(0,0,0) - Model white noise (hanya noise)
m6 <- arima(data_stasioner, order = c(0, 0, 0),
method = "ML", include.mean = FALSE)
ekstrak_koef <- function(model, nama_model) {
hasil <- coeftest(model)
data.frame(
Model = nama_model,
Parameter = rownames(hasil),
Estimate = round(hasil[, 1], 4),
p_value = round(hasil[, 4], 4),
row.names = NULL
)
}
# Buat tabel ringkasan
tabel_m1 <- ekstrak_koef(m1, "ARIMA([7,10,19], 0, 0)")
tabel_m2 <- ekstrak_koef(m2, "Model 2: ARIMA(0, 0, [7,19])")
# Gabungkan semua tabel
tabel_ringkas <- rbind(
tabel_m1, tabel_m2
)
# Tampilkan hasil ringkasan
print(tabel_ringkas)
## Model Parameter Estimate p_value
## 1 ARIMA([7,10,19], 0, 0) ar7 -0.1613 0.0065
## 2 ARIMA([7,10,19], 0, 0) ar10 0.1284 0.0319
## 3 ARIMA([7,10,19], 0, 0) ar19 -0.1759 0.0034
## 4 ARIMA([7,10,19], 0, 0) intercept 0.0024 0.9583
## 5 Model 2: ARIMA(0, 0, [7,19]) ma7 -0.1399 0.0119
## 6 Model 2: ARIMA(0, 0, [7,19]) ma19 -0.1834 0.0025
## 7 Model 2: ARIMA(0, 0, [7,19]) intercept 0.0059 0.8803
Berdasarkan hasil pendugaan parameter dari kedua model tentatif ARIMA di atas, dapat dilihat bahwa seluruh parameter dari kedua model ARIMA signifikan sehingga kedua model dapat digunakan.
Langkah selanjutnya adalah melakukan pengujian asumsi sisaan yaitu
autokorelasi sisaan dan normalitas sisaan dari 2 model ARIMA dengan
parameter signifikan. Hipotesis untuk uji autokorelasi sisaan
\(H_0\) : \(\rho_1=\rho_2=...=\rho_k=0\) (tidak
terdapat autokorelasi pada sisaan) vs
\(H_1\) : minimal terdapat satu \(\rho_k \neq 0\) ( terdapat autokorelasi
pada sisaan)
Taraf nyata: 0,05
resid.arima1 <- residuals(m1)
resid.arima2 <- residuals(m2)
Box.test(resid.arima1, lag=2, type = c('Ljung-Box'))
##
## Box-Ljung test
##
## data: resid.arima1
## X-squared = 1.5255, df = 2, p-value = 0.4664
Box.test(resid.arima2, lag=2, type = c('Ljung-Box'))
##
## Box-Ljung test
##
## data: resid.arima2
## X-squared = 2.2812, df = 2, p-value = 0.3196
Berasarkan hasil uji autokorelasi sisaan dari 2 model tentatif ARIMA
dengan Ljung-Box dapat diperoleh informasi bahwa nilai-p yang didapatkan
\(>0,05\) sehingga \(H_0\) diterima untuk kedua model. Dengan
demikian, dapat dinyatakan bahwa tidak terdapat autokorelasi sisaan
sehingga dapat dilanjutkan ke tahap uji normalitas sisaan. Uji
normalitas sisaan menggunakan uji Jarque Bera dengan hipotesis sebagai
berikut.
\(H_0\) : \(\epsilon_i\sim N(0, \sigma_e^{2})\) (sisaan
menyebar normal) vs
\(H_1\) :
\(\varepsilon\not\sim N(0,
\sigma_e^2)\) (sisaan tidak menyebar normal)
Taraf nyata:
0,05
jarque.bera.test(resid.arima1)
##
## Jarque Bera Test
##
## data: resid.arima1
## X-squared = 33.916, df = 2, p-value = 4.318e-08
jarque.bera.test(resid.arima2)
##
## Jarque Bera Test
##
## data: resid.arima2
## X-squared = 35.045, df = 2, p-value = 2.455e-08
Berdasarkan hasil uji normalitas sisaan menggunakan uji Jarque-Bera, diperoleh nilai-p yang lebih kecil dari 0.05 pada kedua model, sehingga hipotesis nol ditolak. Artinya, sisaan dari model tentatif ARIMA tidak berdistribusi normal. Meskipun demikian, dalam analisis deret waktu, normalitas bukan merupakan asumsi yang wajib dipenuhi, sehingga model tetap dapat digunakan. Dari hasil pengujian asumsi sisaan, disimpulkan bahwa 2 model ARIMA masih layak digunakan. Setelah semua asumsi terpenuhi, proses selanjutnya adalah memilih model terbaik berdasarkan nilai AIC.
m1$aic
## [1] 830.8977
m2$aic
## [1] 833.8334
Berdasarhan nilai AIC dari kedua model tentatif, dapat diperoleh informasi bahwa model dengan nilai AIC terkecil adalah ARIMA([7,10,19], 0, 0).
Berdasarkan plot data deret waktu IHSG, terlihat adanya fluktuasi tajam pada banyak titik yang mengindikasikan kemungkinan keberadaan titik ekstrim (outlier) dalam data. Oleh karena itu, saat dilakukan pemodelan ARIMA, perlu dilakukan deteksi outlier. Deteksi ini dapat mencakup Additive Outlier (AO), Innovative Outlier (IO), dan Level Shift (LS).
prediksi.arima <- data_stasioner-resid.arima1
## Warning: Incompatible methods ("Ops.xts", "Ops.ts") for "-"
outlier <- tso(prediksi.arima, types = c('AO','IO','IS','TC'))
print(outlier)
## Series: prediksi.arima
## Regression with ARIMA(0,0,0) errors
##
## Coefficients:
## AO286
## -0.9542
## s.e. 0.2392
##
## sigma^2 = 0.05743: log likelihood = 3.38
## AIC=-2.75 AICc=-2.71 BIC=4.64
##
## Outliers:
## type ind time coefhat tstat
## 1 AO 286 286 -0.9542 -3.988
Pada hasil deteksi Additive Outlier (AO), Innovative Outlier (IO), Level Shift (LS), dan Transitory Change (TC), ditemukan bahwa terdapat satu outlier pada data deret waktu IHSG, yaitu outlier bertipe Additive Outlier (AO) pada periode ke-286. Hal ini mengindikasikan bahwa fluktuasi tajam bersifat tambahan (AO) yang memengaruhi nilai deret secara mendadak. Berdasarkan hasil deteksi ini, maka model ARIMA yang digunakan perlu mempertimbangkan keberadaan jenis outlier tersebut untuk meningkatkan keakuratan model. Untuk melihat pengaruh dari outlier tersebut terhadap model, dapat dilakukan visualisasi terhadap data dan sisaannya.
# Visualisasi efek outlier AO
plot(outlier$effects, main = "Efek Outlier terhadap Data", ylab = "Nilai Efek", xlab = "Waktu")
# Menyimpan efek outlier sebagai variabel eksternal
xreg.outlier <- outlier$effects
xreg.outlier
## Time Series:
## Start = 1
## End = 297
## Frequency = 1
## [,1]
## [1,] 0.0000000
## [2,] 0.0000000
## [3,] 0.0000000
## [4,] 0.0000000
## [5,] 0.0000000
## [6,] 0.0000000
## [7,] 0.0000000
## [8,] 0.0000000
## [9,] 0.0000000
## [10,] 0.0000000
## [11,] 0.0000000
## [12,] 0.0000000
## [13,] 0.0000000
## [14,] 0.0000000
## [15,] 0.0000000
## [16,] 0.0000000
## [17,] 0.0000000
## [18,] 0.0000000
## [19,] 0.0000000
## [20,] 0.0000000
## [21,] 0.0000000
## [22,] 0.0000000
## [23,] 0.0000000
## [24,] 0.0000000
## [25,] 0.0000000
## [26,] 0.0000000
## [27,] 0.0000000
## [28,] 0.0000000
## [29,] 0.0000000
## [30,] 0.0000000
## [31,] 0.0000000
## [32,] 0.0000000
## [33,] 0.0000000
## [34,] 0.0000000
## [35,] 0.0000000
## [36,] 0.0000000
## [37,] 0.0000000
## [38,] 0.0000000
## [39,] 0.0000000
## [40,] 0.0000000
## [41,] 0.0000000
## [42,] 0.0000000
## [43,] 0.0000000
## [44,] 0.0000000
## [45,] 0.0000000
## [46,] 0.0000000
## [47,] 0.0000000
## [48,] 0.0000000
## [49,] 0.0000000
## [50,] 0.0000000
## [51,] 0.0000000
## [52,] 0.0000000
## [53,] 0.0000000
## [54,] 0.0000000
## [55,] 0.0000000
## [56,] 0.0000000
## [57,] 0.0000000
## [58,] 0.0000000
## [59,] 0.0000000
## [60,] 0.0000000
## [61,] 0.0000000
## [62,] 0.0000000
## [63,] 0.0000000
## [64,] 0.0000000
## [65,] 0.0000000
## [66,] 0.0000000
## [67,] 0.0000000
## [68,] 0.0000000
## [69,] 0.0000000
## [70,] 0.0000000
## [71,] 0.0000000
## [72,] 0.0000000
## [73,] 0.0000000
## [74,] 0.0000000
## [75,] 0.0000000
## [76,] 0.0000000
## [77,] 0.0000000
## [78,] 0.0000000
## [79,] 0.0000000
## [80,] 0.0000000
## [81,] 0.0000000
## [82,] 0.0000000
## [83,] 0.0000000
## [84,] 0.0000000
## [85,] 0.0000000
## [86,] 0.0000000
## [87,] 0.0000000
## [88,] 0.0000000
## [89,] 0.0000000
## [90,] 0.0000000
## [91,] 0.0000000
## [92,] 0.0000000
## [93,] 0.0000000
## [94,] 0.0000000
## [95,] 0.0000000
## [96,] 0.0000000
## [97,] 0.0000000
## [98,] 0.0000000
## [99,] 0.0000000
## [100,] 0.0000000
## [101,] 0.0000000
## [102,] 0.0000000
## [103,] 0.0000000
## [104,] 0.0000000
## [105,] 0.0000000
## [106,] 0.0000000
## [107,] 0.0000000
## [108,] 0.0000000
## [109,] 0.0000000
## [110,] 0.0000000
## [111,] 0.0000000
## [112,] 0.0000000
## [113,] 0.0000000
## [114,] 0.0000000
## [115,] 0.0000000
## [116,] 0.0000000
## [117,] 0.0000000
## [118,] 0.0000000
## [119,] 0.0000000
## [120,] 0.0000000
## [121,] 0.0000000
## [122,] 0.0000000
## [123,] 0.0000000
## [124,] 0.0000000
## [125,] 0.0000000
## [126,] 0.0000000
## [127,] 0.0000000
## [128,] 0.0000000
## [129,] 0.0000000
## [130,] 0.0000000
## [131,] 0.0000000
## [132,] 0.0000000
## [133,] 0.0000000
## [134,] 0.0000000
## [135,] 0.0000000
## [136,] 0.0000000
## [137,] 0.0000000
## [138,] 0.0000000
## [139,] 0.0000000
## [140,] 0.0000000
## [141,] 0.0000000
## [142,] 0.0000000
## [143,] 0.0000000
## [144,] 0.0000000
## [145,] 0.0000000
## [146,] 0.0000000
## [147,] 0.0000000
## [148,] 0.0000000
## [149,] 0.0000000
## [150,] 0.0000000
## [151,] 0.0000000
## [152,] 0.0000000
## [153,] 0.0000000
## [154,] 0.0000000
## [155,] 0.0000000
## [156,] 0.0000000
## [157,] 0.0000000
## [158,] 0.0000000
## [159,] 0.0000000
## [160,] 0.0000000
## [161,] 0.0000000
## [162,] 0.0000000
## [163,] 0.0000000
## [164,] 0.0000000
## [165,] 0.0000000
## [166,] 0.0000000
## [167,] 0.0000000
## [168,] 0.0000000
## [169,] 0.0000000
## [170,] 0.0000000
## [171,] 0.0000000
## [172,] 0.0000000
## [173,] 0.0000000
## [174,] 0.0000000
## [175,] 0.0000000
## [176,] 0.0000000
## [177,] 0.0000000
## [178,] 0.0000000
## [179,] 0.0000000
## [180,] 0.0000000
## [181,] 0.0000000
## [182,] 0.0000000
## [183,] 0.0000000
## [184,] 0.0000000
## [185,] 0.0000000
## [186,] 0.0000000
## [187,] 0.0000000
## [188,] 0.0000000
## [189,] 0.0000000
## [190,] 0.0000000
## [191,] 0.0000000
## [192,] 0.0000000
## [193,] 0.0000000
## [194,] 0.0000000
## [195,] 0.0000000
## [196,] 0.0000000
## [197,] 0.0000000
## [198,] 0.0000000
## [199,] 0.0000000
## [200,] 0.0000000
## [201,] 0.0000000
## [202,] 0.0000000
## [203,] 0.0000000
## [204,] 0.0000000
## [205,] 0.0000000
## [206,] 0.0000000
## [207,] 0.0000000
## [208,] 0.0000000
## [209,] 0.0000000
## [210,] 0.0000000
## [211,] 0.0000000
## [212,] 0.0000000
## [213,] 0.0000000
## [214,] 0.0000000
## [215,] 0.0000000
## [216,] 0.0000000
## [217,] 0.0000000
## [218,] 0.0000000
## [219,] 0.0000000
## [220,] 0.0000000
## [221,] 0.0000000
## [222,] 0.0000000
## [223,] 0.0000000
## [224,] 0.0000000
## [225,] 0.0000000
## [226,] 0.0000000
## [227,] 0.0000000
## [228,] 0.0000000
## [229,] 0.0000000
## [230,] 0.0000000
## [231,] 0.0000000
## [232,] 0.0000000
## [233,] 0.0000000
## [234,] 0.0000000
## [235,] 0.0000000
## [236,] 0.0000000
## [237,] 0.0000000
## [238,] 0.0000000
## [239,] 0.0000000
## [240,] 0.0000000
## [241,] 0.0000000
## [242,] 0.0000000
## [243,] 0.0000000
## [244,] 0.0000000
## [245,] 0.0000000
## [246,] 0.0000000
## [247,] 0.0000000
## [248,] 0.0000000
## [249,] 0.0000000
## [250,] 0.0000000
## [251,] 0.0000000
## [252,] 0.0000000
## [253,] 0.0000000
## [254,] 0.0000000
## [255,] 0.0000000
## [256,] 0.0000000
## [257,] 0.0000000
## [258,] 0.0000000
## [259,] 0.0000000
## [260,] 0.0000000
## [261,] 0.0000000
## [262,] 0.0000000
## [263,] 0.0000000
## [264,] 0.0000000
## [265,] 0.0000000
## [266,] 0.0000000
## [267,] 0.0000000
## [268,] 0.0000000
## [269,] 0.0000000
## [270,] 0.0000000
## [271,] 0.0000000
## [272,] 0.0000000
## [273,] 0.0000000
## [274,] 0.0000000
## [275,] 0.0000000
## [276,] 0.0000000
## [277,] 0.0000000
## [278,] 0.0000000
## [279,] 0.0000000
## [280,] 0.0000000
## [281,] 0.0000000
## [282,] 0.0000000
## [283,] 0.0000000
## [284,] 0.0000000
## [285,] 0.0000000
## [286,] -0.9541505
## [287,] 0.0000000
## [288,] 0.0000000
## [289,] 0.0000000
## [290,] 0.0000000
## [291,] 0.0000000
## [292,] 0.0000000
## [293,] 0.0000000
## [294,] 0.0000000
## [295,] 0.0000000
## [296,] 0.0000000
## [297,] 0.0000000
## attr(,"index")
## [1] 1704240000 1704326400 1704412800 1704672000 1704758400 1704844800
## [7] 1704931200 1705017600 1705276800 1705363200 1705449600 1705536000
## [13] 1705622400 1705881600 1705968000 1706054400 1706140800 1706227200
## [19] 1706486400 1706572800 1706659200 1706745600 1706832000 1707091200
## [25] 1707177600 1707264000 1707696000 1707782400 1707955200 1708041600
## [31] 1708300800 1708387200 1708473600 1708560000 1708646400 1708905600
## [37] 1708992000 1709078400 1709164800 1709251200 1709510400 1709596800
## [43] 1709683200 1709769600 1709856000 1710288000 1710374400 1710460800
## [49] 1710720000 1710806400 1710892800 1710979200 1711065600 1711324800
## [55] 1711411200 1711497600 1711584000 1711929600 1712016000 1712102400
## [61] 1712188800 1712275200 1713225600 1713312000 1713398400 1713484800
## [67] 1713744000 1713830400 1713916800 1714003200 1714089600 1714348800
## [73] 1714435200 1714521600 1714608000 1714694400 1714953600 1715040000
## [79] 1715126400 1715558400 1715644800 1715731200 1715817600 1715904000
## [85] 1716163200 1716249600 1716336000 1716768000 1716854400 1716940800
## [91] 1717027200 1717113600 1717372800 1717459200 1717545600 1717632000
## [97] 1717718400 1717977600 1718064000 1718150400 1718236800 1718323200
## [103] 1718755200 1718841600 1718928000 1719187200 1719273600 1719360000
## [109] 1719446400 1719532800 1719792000 1719878400 1719964800 1720051200
## [115] 1720137600 1720396800 1720483200 1720569600 1720656000 1720742400
## [121] 1721001600 1721088000 1721174400 1721260800 1721347200 1721606400
## [127] 1721692800 1721779200 1721865600 1721952000 1722211200 1722297600
## [133] 1722384000 1722470400 1722556800 1722816000 1722902400 1722988800
## [139] 1723075200 1723161600 1723420800 1723507200 1723593600 1723680000
## [145] 1723766400 1724025600 1724112000 1724198400 1724284800 1724371200
## [151] 1724630400 1724716800 1724803200 1724889600 1724976000 1725235200
## [157] 1725321600 1725408000 1725494400 1725580800 1725840000 1725926400
## [163] 1726012800 1726099200 1726185600 1726531200 1726617600 1726704000
## [169] 1726790400 1727049600 1727136000 1727222400 1727308800 1727395200
## [175] 1727654400 1727740800 1727827200 1727913600 1728000000 1728259200
## [181] 1728345600 1728432000 1728518400 1728604800 1728864000 1728950400
## [187] 1729036800 1729123200 1729209600 1729468800 1729555200 1729641600
## [193] 1729728000 1729814400 1730073600 1730160000 1730246400 1730332800
## [199] 1730419200 1730678400 1730764800 1730851200 1730937600 1731024000
## [205] 1731283200 1731369600 1731456000 1731542400 1731628800 1731888000
## [211] 1731974400 1732060800 1732147200 1732233600 1732492800 1732579200
## [217] 1732752000 1732838400 1733097600 1733184000 1733270400 1733356800
## [223] 1733443200 1733702400 1733788800 1733875200 1733961600 1734048000
## [229] 1734307200 1734393600 1734480000 1734566400 1734652800 1734912000
## [235] 1734998400 1735257600 1735516800 1735776000 1735862400 1736121600
## [241] 1736208000 1736294400 1736380800 1736467200 1736726400 1736812800
## [247] 1736899200 1736985600 1737072000 1737331200 1737417600 1737504000
## [253] 1737590400 1737676800 1738195200 1738281600 1738540800 1738627200
## [259] 1738713600 1738800000 1738886400 1739145600 1739232000 1739318400
## [265] 1739404800 1739491200 1739750400 1739836800 1739923200 1740009600
## [271] 1740096000 1740355200 1740441600 1740528000 1740614400 1740700800
## [277] 1740960000 1741046400 1741132800 1741219200 1741305600 1741564800
## [283] 1741651200 1741737600 1741824000 1741910400 1742169600 1742256000
## [289] 1742342400 1742428800 1742515200 1742774400 1742860800 1742947200
## [295] 1743033600 1744070400 1744156800
## attr(,"index")attr(,"tzone")
## [1] UTC
## attr(,"index")attr(,"tclass")
## [1] Date
## attr(,"lambda")
## [1] 1.980901
## attr(,"scaled:center")
## [1] -488045874287
## attr(,"scaled:scale")
## [1] 9.198323e+12
# Pemodelan ARIMA([7,10,19], 0, 0) dengan mempertimbangkan efek outlier AO
arima.outlier <- arima(data_stasioner, order=c(19, 0, 0),
fixed = c(rep(0, 6), NA, rep(0, 2), NA, rep(0,8), NA, NA),
transform.pars = FALSE,
xreg = xreg.outlier,
method = 'ML',
include.mean = FALSE)
coeftest(arima.outlier)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar7 -0.162982 0.059911 -2.7204 0.006520 **
## ar10 0.132954 0.064443 2.0631 0.039100 *
## ar19 -0.177143 0.060379 -2.9338 0.003348 **
## xreg -0.199221 1.083768 -0.1838 0.854153
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Uji signifikansi parameter model
coeftest(arima.outlier)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar7 -0.162982 0.059911 -2.7204 0.006520 **
## ar10 0.132954 0.064443 2.0631 0.039100 *
## ar19 -0.177143 0.060379 -2.9338 0.003348 **
## xreg -0.199221 1.083768 -0.1838 0.854153
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Berdasarkan hasil pemodelan ARIMA dengan mempertimbangkan efek outlier, dapat diperoleh informasi bahwa sebagian besar parameter model signifikan, yaitu koefisien AR ke-7, AR ke-10, dan AR ke-19 dengan nilai p-value masing-masing di bawah 0.05. Hal ini menunjukkan bahwa ketiga parameter tersebut berkontribusi signifikan dalam menjelaskan variasi data. Namun demikian, parameter untuk variabel eksternal (outlier effect) tidak signifikan secara statistik karena memiliki p-value sebesar 0.854. Meskipun demikian, model tetap dapat digunakan karena pemodelan ini mempertimbangkan keberadaan outlier yang secara visual atau struktural sudah teridentifikasi memengaruhi data, sehingga tetap dapat dipertimbangkan untuk dipakai untuk dibandingkan dengan model tanpa mempertimbangkan efek outlier.
Hipotesis untuk uji autokorelasi sisaan sebagai berikut.
\(H_0\) : \(\rho_1=\rho_2=...=\rho_k=0\) (tidak
terdapat autokorelasi pada sisaan) vs
\(H_1\) : minimal terdapat satu \(\rho_k \neq 0\) ( terdapat autokorelasi
pada sisaan)
Taraf nyata: 0,05
resid.arima.outlier <- residuals(arima.outlier)
Box.test(resid.arima.outlier, lag=2, type = c('Ljung-Box'))
##
## Box-Ljung test
##
## data: resid.arima.outlier
## X-squared = 1.4699, df = 2, p-value = 0.4795
Berdasarkan hasil uji autokorelasi sisaan pada model ARIMA Outlier AO
menggunakan uji Ljung-Box, diperoleh nilai-p yang lebih besar dari 0.05.
Hal ini menunjukkan bahwa hipotesis nol diterima, sehingga dapat
disimpulkan bahwa tidak terdapat autokorelasi pada sisaan model. Oleh
karena itu, analisis dapat dilanjutkan ke tahap berikutnya, yaitu uji
normalitas sisaan yang dilakukan menggunakan uji Jarque-Bera dengan
hipotesis sebagai berikut.
\(H_0\)
: \(\epsilon_i\sim N(0, \sigma_e^{2})\)
(sisaan menyebar normal) vs
\(H_1\) : \(\varepsilon\not\sim N(0, \sigma_e^2)\)
(sisaan tidak menyebar normal)
Taraf nyata: 0,05
jarque.bera.test(resid.arima.outlier)
##
## Jarque Bera Test
##
## data: resid.arima.outlier
## X-squared = 32.438, df = 2, p-value = 9.042e-08
Hasil uji normalitas sisaan menggunakan uji Jarque-Bera menunjukkan bahwa nilai p model ARIMA Outlier AO berada di bawah 0.05. Dengan demikian, hipotesis nol ditolak dan dapat disimpulkan bahwa sisaan dari model tersebut tidak mengikuti distribusi normal. Meskipun begitu, dalam pemodelan deret waktu, asumsi normalitas bukanlah syarat mutlak, sehingga model tetap dapat dianggap layak digunakan. Berdasarkan hasil uji asumsi terhadap sisaan, model ARIMA Outlier AO dapat dinyatakan sesuai untuk dianalisis lebih lanjut.
prediksi.arima1 <- as.numeric(prediksi.arima)
prediksi.arima.outlier <- as.numeric(data_stasioner) - as.numeric(resid.arima.outlier)
# Plot hasil
plot(as.numeric(data_stasioner), type = "l", col = "darkblue", lwd = 1,
ylab = "Nilai", xlab = "", main = "Perbandingan Prediksi Model")
lines(prediksi.arima1, type = "l", col = "darkred", lwd = 1)
legend("bottomleft",
legend = c("Data Asli", "Prediksi ARIMA"),
col = c("darkblue", "darkred"),
lty = 1, lwd = 2,
inset = 0)
plot(as.numeric(data_stasioner), type = "l", col = "darkblue", lwd = 1,
ylab = "Nilai", xlab = "", main = "Perbandingan Prediksi Model")
lines(prediksi.arima.outlier, type = "l", col = "darkgreen", lwd = 1)
legend("bottomleft",
legend = c("Data Asli", "Prediksi ARIMA Outlier"),
col = c("darkblue", "darkgreen"),
lty = 1, lwd = 2,
inset = 0)
Berdasarkan hasil evaluasi grafis, terlihat bahwa baik model ARIMA
maupun model ARIMA yang mempertimbangkan outlier belum mampu memprediksi
pola data asli dengan baik. Kedua model menghasilkan garis prediksi yang
relatif datar dan cenderung mengikuti rata-rata data, sementara data
asli menunjukkan fluktuasi yang sangat tinggi dan bersifat ekstrim. Hal
ini mengindikasikan bahwa baik ARIMA standar maupun ARIMA outlier belum
cukup representatif untuk menangkap dinamika dan variasi ekstrem yang
terjadi dalam data.
Topik permasalahan yang menyoroti RUU TNI sebagai penyebab turunnya IHSG menunjukkan bahwa pemodelan ARIMA intervensi merupakan metode yang sesuai, karena metode ini cocok digunakan ketika terdapat informasi mengenai waktu dan penyebab kejadian yang memengaruhi data. Sebagai pembanding, digunakan terlebih dahulu model ARIMA outlier.
Sesuai dengan fokus permasalahan yang menggarisbawahi pengaruh RUU TNI, pemodelan ARIMA intervensi dilakukan dengan menggunakan data sebelum intervensi, yaitu dari 2 Januari 2024 hingga 19 Maret 2025 karena RUU TNI disahkan pada 20 Maret 2025.
pra.intervensi <- data_stasioner[1:289]
pra.intervensi
## m.c.seq.row..seq.n...seq.col..drop...FALSE.
## 2024-01-03 -0.62527996
## 2024-01-04 1.29182361
## 2024-01-05 -0.08933211
## 2024-01-08 -0.97542805
## 2024-01-09 -1.18757200
## 2024-01-10 0.45165108
## 2024-01-11 -0.05533841
## 2024-01-12 0.36673153
## 2024-01-15 -0.20099322
## 2024-01-16 0.33166019
## ...
## 2025-03-06 1.01914623
## 2025-03-07 0.26069393
## 2025-03-10 -0.37736711
## 2025-03-11 -0.53137132
## 2025-03-12 1.40364648
## 2025-03-13 -0.15116585
## 2025-03-14 -1.42437332
## 2025-03-17 -0.41749507
## 2025-03-18 -2.45098083
## 2025-03-19 0.90918764
BoxCox.lambda(pra.intervensi)
## Warning in guerrero(x, lower, upper): Guerrero's method for selecting a Box-Cox
## parameter (lambda) is given for strictly positive data.
## [1] 1.182849
Hasil dari pemeriksaan stasioneritas terhadap ragam menggunakan Box-cox dapat diketahui bahwa nilai \(\lambda=1.18\) yang di mana nilai tersebut mendekati satu, sehingga dapat dinyatakan bahwa data IHSG stasioner terhadap ragam.
Pengujian hipotesis stasioneritas terhadap rata-rata dapat
menggunakan statistik uji Dickey Fuller dengan hipotesis 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\)
Daerah penolakan:
apabila nilai-p kurang dari 0,05 maka \(H_0\) ditolak yang artinya data stasioner
terhadap rata-rata
adf.test(pra.intervensi, k=1)
## Warning in adf.test(pra.intervensi, k = 1): p-value smaller than printed
## p-value
##
## Augmented Dickey-Fuller Test
##
## data: pra.intervensi
## Dickey-Fuller = -12.244, Lag order = 1, p-value = 0.01
## alternative hypothesis: stationary
Hasil uji Dickey Fuller pada data pra-intervensi didapatkan nilai-p sebesar \(0,01\) yang di mana kurang dari \(\alpha=0,05\) sehingga menghasilkan keputusan terima \(H_0\). Dengan demikian, dapat dinyatakan bahwa data pra intervensi telah stasioner terhadap rata-rata.
Identifikasi model ARIMA dapat menggunakan plot ACF dan PACF. Nilai ACF dan PACF bertujuan untuk memilih orde \(p\) dan \(q\) pada model ARIMA. Pemeriksaan ACF dan PACF dilakukan pada data yang telah stasioner.
acf(pra.intervensi)
pacf(pra.intervensi)
Berdasarkan plot di atas, nilai ACF dan PACF signifikan pada lag ke-19.
Berdasarkan informasi signifikansi lag data pra-intervensi, model
ARIMA(p,d,q) yang dapat dibentuk adalah ARIMA([19],0,0) dan
ARIMA(0,0,[19]).
# ARIMA([19],0,0) -> AR order = 19, hanya lag ke-19 yang tidak 0
arima.ar19 <- arima(pra.intervensi, order = c(19, 0, 0),
fixed = c(rep(0, 18), NA, NA),
method = "ML", include.mean = TRUE)
## Warning in stats::arima(x = x, order = order, seasonal = seasonal, xreg = xreg,
## : some AR parameters were fixed: setting transform.pars = FALSE
# ARIMA(0,0,[19]) -> MA order = 19, hanya lag ke-19 yang tidak 0
arima.ma19 <- arima(pra.intervensi, order = c(0, 0, 19),
fixed = c(rep(0, 18), NA, NA),
method = "ML", include.mean = TRUE)
ekstrak_koef2 <- function(model1, nama_model1) {
hasil2 <- coeftest(model1)
data.frame(
Model = nama_model1,
Parameter = rownames(hasil2),
Estimate = round(hasil2[, 1], 4),
p_value = round(hasil2[, 4], 4),
row.names = NULL
)
}
# Buat tabel ringkasan
tabel_m11 <- ekstrak_koef2(arima.ar19, "ARIMA([19], 0, 0)")
tabel_m21 <- ekstrak_koef2(arima.ma19, "ARIMA(0, 0, [19])")
# Gabungkan semua tabel
tabel_ringkas2 <- rbind(
tabel_m11, tabel_m21
)
# Tampilkan hasil ringkasan
print(tabel_ringkas2)
## Model Parameter Estimate p_value
## 1 ARIMA([19], 0, 0) ar19 -0.1290 0.0350
## 2 ARIMA([19], 0, 0) intercept 0.0117 0.8136
## 3 ARIMA(0, 0, [19]) ma19 -0.1290 0.0320
## 4 ARIMA(0, 0, [19]) intercept 0.0121 0.8052
Berdasarkan hasil pendugaan parameter dari kedua model ARIMA tersebut, dapat diketahui bahwa parameter ar19 dari ARIMA([19],0,0) signifikan dan pada model ARIMA(0,0,[19]) parameter ma19 signifikan. Dengan demikian, kedua model dapat digunakan.
Hipotesis untuk uji autokorelasi sisaan sebagai berikut.
\(H_0\) : \(\rho_1=\rho_2=...=\rho_k=0\) (tidak
terdapat autokorelasi pada sisaan) vs
\(H_1\) : minimal terdapat satu \(\rho_k \neq 0\) ( terdapat autokorelasi
pada sisaan)
Taraf nyata: 0,05
resid.arimaar <- residuals(arima.ar19)
resid.arimama <- residuals(arima.ma19)
Box.test(resid.arimaar, lag=2, type = c('Ljung-Box'))
##
## Box-Ljung test
##
## data: resid.arimaar
## X-squared = 0.23381, df = 2, p-value = 0.8897
Box.test(resid.arimama, lag=2, type = c('Ljung-Box'))
##
## Box-Ljung test
##
## data: resid.arimama
## X-squared = 0.24933, df = 2, p-value = 0.8828
Berasarkan hasil uji autokorelasi sisaan model tentatif ARIMA dengan
Ljung-Box dapat diperoleh informasi bahwa nilai-p yang didapatkan \(>0,05\) sehingga \(H_0\) diterima. Dengan demikian, dapat
dinyatakan bahwa tidak terdapat autokorelasi sisaan sehingga dapat
dilakukan ke tahap selanjutnya yaitu uji normalitas sisaan. Uji
normalitas sisaan menggunakan uji Jarque Bera dengan hipotesis sebagai
berikut.
\(H_0\) : \(\epsilon_i\sim N(0, \sigma_e^{2})\) (sisaan
menyebar normal) vs
\(H_1\) :
\(\varepsilon\not\sim\ N(0,
\sigma_e^2)\) (sisaan tidak menyebar normal)
Taraf nyata:
0,05
jarque.bera.test(resid.arimaar)
##
## Jarque Bera Test
##
## data: resid.arimaar
## X-squared = 10.305, df = 2, p-value = 0.005786
jarque.bera.test(resid.arimama)
##
## Jarque Bera Test
##
## data: resid.arimama
## X-squared = 10.001, df = 2, p-value = 0.006734
Hasil uji normalitas sisaan menggunakan uji Jarque-Bera menunjukkan bahwa nilai-p model ARIMA Pra-Intervensi berada di bawah 0.05. Dengan demikian, hipotesis nol ditolak dan dapat disimpulkan bahwa sisaan dari kedua model tidak mengikuti distribusi normal. Meskipun begitu, dalam pemodelan deret waktu, asumsi normalitas bukanlah syarat mutlak, sehingga model tetap dapat dianggap layak digunakan.
arima.ar19$aic
## [1] 791.8177
arima.ma19$aic
## [1] 791.7845
Berdasarhan nilai AIC dari kedua model tentatif, dapat diperoleh informasi bahwa model dengan nilai AIC terkecil adalah ARIMA(0,0,[19]).
Setelah mendapatkan model ARIMA terbaik pada data pra-intervensi, langkah selanjutnya adalah melakukan peramalan sepanjang sisa data yaitu data intervensi dan setelahnya. Peramalan dilakukan untuk 9 periode.
peramalan <- forecast(pra.intervensi, model = arima.ma19, h=9)
peramalan$mean
## Time Series:
## Start = 290
## End = 298
## Frequency = 1
## [1] -0.036669610 0.092498320 0.267837191 0.001049519 0.168630825
## [6] 0.305237134 -0.335575205 0.209097427 -0.167678954
Tahapan setelah melakukan peramalan sepanjang sisa periode yang ada pada data penelitian adalah menghitung sisaan dari model peramalan dengan persamaan berikut. \[e_t = ihsg_t - \hat {ihsg_t}\]
sisaan.peramalan <- data_stasioner[289:297]-peramalan$mean
## Warning: Incompatible methods ("Ops.xts", "Ops.ts") for "-"
sisaan.peramalan
## Time Series:
## Start = 290
## End = 298
## Frequency = 1
## [,1]
## [1,] 0.94585725
## [2,] 0.66528190
## [3,] -1.44246223
## [4,] -0.86295057
## [5,] 0.58271276
## [6,] 2.13973862
## [7,] 0.80036506
## [8,] -5.12057759
## [9,] 0.02131024
## attr(,"lambda")
## [1] 1.980901
## attr(,"scaled:center")
## [1] -488045874287
## attr(,"scaled:scale")
## [1] 9.198323e+12
## attr(,"index")
## [1] 1742342400 1742428800 1742515200 1742774400 1742860800 1742947200 1743033600
## [8] 1744070400 1744156800
## attr(,"index")attr(,"tzone")
## [1] UTC
## attr(,"index")attr(,"tclass")
## [1] Date
Identifikasi model intervensi bertujuan untuk menentukan seberapa lama periode yang dipengaruhi oleh intervensi serta memilih bentuk fungsi intervensi yang sesuai. Selain itu, proses ini juga digunakan untuk menetapkan nilai orde b, r, dan s dalam model intervensi. Teknik identifikasinya dilakukan dengan mengamati pola sisaan pada periode ke-t yang keluar dari batas signifikansi melalui plot. Batas signifikansi ini dihitung berdasarkan \(±3\) Standar Deviasi Sisaan. Standar deviasi sisaan yang digunakan berasal dari sisaan model ARIMA yang telah dibentuk menggunakan data sebelum terjadinya intervensi.
## Identifikasi orde intervensi
error_idintv <- rep(0, 297)
error_idintv[1:297] <- resid.arima1
error_idintv[289:297] <- sisaan.peramalan
plot(error_idintv, type="h", xlab="Waktu (T)", ylab = "Residual", xaxt = "n")
abline(h=c(-3*sd(resid.arimama), 3*sd(resid.arimama)), col="darkblue", lty=2)
abline(v = 290, col = "darkred", lty = 3, lwd = 1.5)
Berdasarkan plot sisaan setelah pemodelan ARIMA intervensi, terlihat bahwa terdapat dua titik waktu yang keluar dari batas signifikansi, yaitu satu sisaan negatif yang mencolok di sekitar pertengahan periode dan satu sisaan positif signifikan pada periode ke-295. Hal ini menunjukkan kemungkinan adanya dua kejadian intervensi yang berdampak pada nilai deret waktu. Namun, pola setelah kedua titik tersebut menunjukkan bahwa sisaan kembali ke dalam batas signifikansi dan tidak menunjukkan efek yang berkelanjutan. Oleh karena itu, fungsi intervensi yang digunakan adalah fungsi pulse, yaitu fungsi yang digunakan ketika dampak dari intervensi hanya terjadi pada satu titik waktu saja. Dengan demikian, untuk dua kejadian tersebut, dapat ditetapkan orde fungsi intervensi sebagai B = 0, s = 1, dan r = 0 untuk masing-masing titik intervensi. ### Pendugaan Parameter Model Intervensi
## Pemodelan Arima Intervensi
intervensi <- c(rep(0,297), 1, rep(0,9))
model.intervensi <- arimax(data_stasioner, order = c(0, 0, 19),
fixed = c(rep(0, 18), NA, NA),
method = "ML")
model.intervensi
##
## Call:
## arimax(x = data_stasioner, order = c(0, 0, 19), fixed = c(rep(0, 18), NA, NA),
## method = "ML")
##
## Coefficients:
## ma1 ma2 ma3 ma4 ma5 ma6 ma7 ma8 ma9 ma10 ma11 ma12 ma13 ma14
## 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## s.e. 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## ma15 ma16 ma17 ma18 ma19 intercept
## 0 0 0 0 -0.1708 0.0028
## s.e. 0 0 0 0 0.0589 0.0480
##
## sigma^2 estimated as 0.9687: log likelihood = -416.98, aic = 837.96
coeftest(model.intervensi)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ma19 -0.1708342 0.0588713 -2.9018 0.00371 **
## intercept 0.0028211 0.0480029 0.0588 0.95314
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Berdasarkan hasil pendugaan parameter dan uji signifikansi model ARIMA intervensi dapat diperoleh informasi bahwa hanya parameter intercept saja yang tidak signifikan, sehingga masih dapat dilakukan pemodelan.
Sama dengan model ARIMA, model intervensi juga perlu melakukan uji asumsi sisaan yaitu autokorelasi sisaan dan normalitas sisaan.
## UJi asumsi
resid.intervensi <- residuals(model.intervensi)
jarque.bera.test(resid.intervensi)
##
## Jarque Bera Test
##
## data: resid.intervensi
## X-squared = 40.452, df = 2, p-value = 1.644e-09
Box.test(resid.intervensi, lag = 4, type = "Ljung-Box")
##
## Box-Ljung test
##
## data: resid.intervensi
## X-squared = 3.959, df = 4, p-value = 0.4116
Berdasarkan hasil uji autokorelasi dapat diperoleh informasi bahwa sisaan model intervensi tidak terdapat autokorelasi. Sisaan tidak menyebar normal namun sekali lagi tidak menjadi masalah untuk kasus deret waktu.
Model ARIMA Intervensi yang telah memenuhi seluruh asumsi, dapat dilakukan evaluasi model dengan perbandingan secara grafis.
prediksi.arima.intervensi <- data_stasioner-resid.intervensi
## Warning: Incompatible methods ("Ops.xts", "Ops.ts") for "-"
prediksiintervensi <- as.numeric(prediksi.arima.intervensi)
plot(as.numeric(data_stasioner), type = "l", col = "darkblue", lwd = 1)
lines(prediksi.arima.intervensi, type = "l", col = "darkred", lwd = 1)
legend("bottomleft", legend = c("IHSG Aktual", "IHSG Hasil Prediksi ARIMAX(0,0,19) dengan intervensi (fungsi pulse)"), col = c("darkblue", "darkred"), lty = 1)
Berdasarkan plot di atas, garis biru menunjukkan data inflasi aktual yang telah distasionerkan, sementara garis merah merupakan hasil prediksi dari model intervensi. Secara umum, garis merah berhasil mengikuti pola pergerakan inflasi aktual, meskipun tidak sepenuhnya menangkap fluktuasi ekstrem. Hal ini menunjukkan bahwa model cukup baik untuk memodelkan pola dasar data, namun mungkin perlu penyesuaian tambahan untuk menangani efek kejutan atau outlier secara lebih akurat.