BAB I PENDAHULUAN

1.1 Latar Belakang

Pasar modal merupakan salah satu pilar sistem keuangan yang berfungsi mempertemukan pihak yang membutuhkan dana jangka panjang dengan pihak yang memiliki kelebihan dana. Di Indonesia, kinerja pasar saham secara keseluruhan lazim diukur dengan Indeks Harga Saham Gabungan (IHSG), yaitu indeks yang mencerminkan pergerakan harga seluruh saham biasa dan saham preferen yang tercatat di Bursa Efek Indonesia. Karena mencakup seluruh emiten, IHSG kerap dijadikan barometer kondisi ekonomi nasional sekaligus acuan bagi investor, regulator, dan pembuat kebijakan.

Pergerakan harga saham tidak berdiri sendiri. Teori penentuan harga aset, seperti Arbitrage Pricing Theory (Ross, 1976) dan model diskonto arus kas, menyatakan bahwa harga saham ditentukan oleh ekspektasi arus kas dan tingkat diskonto yang dipengaruhi oleh variabel makroekonomi. Chen, Roll, dan Ross (1986) menunjukkan bahwa variabel makroekonomi seperti inflasi, struktur suku bunga, dan harga energi merupakan faktor risiko sistematis yang memengaruhi imbal hasil saham. Bagi perekonomian terbuka kecil seperti Indonesia, faktor global (harga komoditas dan nilai tukar) serta faktor domestik (inflasi) sama-sama relevan.

Nilai tukar rupiah terhadap dolar Amerika Serikat (USD/IDR) memengaruhi biaya impor bahan baku, beban utang luar negeri korporasi, serta aliran modal portofolio asing. Pelemahan rupiah dapat menekan laba emiten yang bergantung pada bahan baku impor, tetapi dapat pula menguntungkan emiten berorientasi ekspor. Emas dunia dipandang sebagai aset lindung nilai (safe haven) sehingga kenaikan harganya sering mencerminkan meningkatnya ketidakpastian global dan dapat menjadi aset substitusi bagi saham. Minyak dunia merupakan input produksi utama dan komoditas yang dampaknya berbeda antara negara pengekspor dan pengimpor neto. Indonesia sejak lama berstatus pengimpor neto minyak mentah dan produk BBM, sementara sektor energi dan pertambangan memiliki bobot yang besar di bursa. Inflasi memengaruhi daya beli, biaya input, dan arah kebijakan moneter sehingga ikut memengaruhi valuasi saham.

Data penelitian ini memperlihatkan dinamika yang cukup lebar selama periode Januari 2017 hingga Agustus 2026 (116 observasi bulanan). IHSG bergerak dari 5.294,10 poin pada Januari 2017, mencapai titik terendah 4.538,93 poin pada Maret 2020 saat pandemi COVID-19, dan titik tertinggi 8.646,94 poin pada Desember 2025. Kurs JISDOR melemah dari kisaran Rp13.300 per dolar AS pada awal periode menjadi Rp18.058 pada Juli 2026. Harga emas futures meningkat tajam dari sekitar USD1.211 per troy ounce menjadi puncak USD5.247,9 pada Februari 2026. Harga minyak WTI futures berfluktuasi antara USD18,84 per barel (April 2020) dan USD114,67 per barel (Mei 2022), sedangkan inflasi bulanan (month-to-month) berkisar antara −0,76% dan 1,65%. Variasi tersebut menunjukkan bahwa periode pengamatan memuat beberapa guncangan besar, yakni pandemi, lonjakan harga energi, serta pengetatan kebijakan moneter global, sehingga cocok untuk menelaah hubungan jangka pendek maupun jangka panjang antarvariabel.

Secara metodologis, data keuangan dan ekonomi berbentuk deret waktu umumnya tidak stasioner pada level. Regresi langsung pada data non-stasioner berisiko menghasilkan regresi lancung (spurious regression) (Granger & Newbold, 1974). Oleh karena itu diperlukan uji stasioneritas dan uji kointegrasi. Apabila variabel memiliki orde integrasi campuran I(0) dan I(1), pendekatan Autoregressive Distributed Lag (ARDL) dengan uji batas (bounds test) dari Pesaran, Shin, dan Smith (2001) dapat digunakan. Apabila seluruh variabel terintegrasi pada orde yang sama dan terdapat kointegrasi, pendekatan Vector Error Correction Model (VECM) dari Johansen (1988) memungkinkan analisis hubungan jangka panjang dan jangka pendek secara simultan, dilengkapi uji kausalitas Granger, Impulse Response Function (IRF), dan Forecast Error Variance Decomposition (FEVD) untuk menelusuri arah, dinamika, dan kontribusi guncangan antarvariabel.

Berdasarkan uraian tersebut, penelitian ini menganalisis pengaruh nilai tukar USD/IDR, harga emas dunia, harga minyak dunia, dan inflasi terhadap IHSG dengan pendekatan ARDL dan VAR/VECM, serta memeriksa kelayakan model melalui uji diagnostik.

1.2 Rumusan Masalah

Berdasarkan latar belakang di atas, rumusan masalah penelitian ini adalah sebagai berikut.

  1. Bagaimana karakteristik dan stasioneritas data IHSG, nilai tukar USD/IDR, harga emas dunia, harga minyak dunia, dan inflasi pada periode Januari 2017 sampai Agustus 2026?

  2. Apakah terdapat hubungan jangka panjang (kointegrasi) antara IHSG dengan nilai tukar USD/IDR, harga emas dunia, harga minyak dunia, dan inflasi?

  3. Bagaimana pengaruh jangka pendek dan jangka panjang nilai tukar USD/IDR, harga emas dunia, harga minyak dunia, dan inflasi terhadap IHSG berdasarkan model ARDL dan VAR/VECM?

  4. Bagaimana hubungan kausalitas Granger antarvariabel penelitian?

  5. Bagaimana respons IHSG terhadap guncangan masing-masing variabel (IRF) dan seberapa besar kontribusi setiap variabel terhadap ragam galat peramalan IHSG (FEVD)?

1.3 Tujuan Penelitian

Tujuan penelitian ini adalah sebagai berikut.

  1. Mendeskripsikan karakteristik data dan menguji stasioneritas seluruh variabel penelitian.

  2. Menguji ada tidaknya kointegrasi antara IHSG dan variabel makroekonomi yang diteliti.

  3. Mengestimasi dan menginterpretasikan pengaruh jangka pendek dan jangka panjang variabel independen terhadap IHSG menggunakan ARDL dan VAR/VECM.

  4. Menganalisis arah hubungan sebab-akibat antarvariabel melalui uji kausalitas Granger.

  5. Menganalisis respons dinamis IHSG terhadap guncangan variabel lain melalui IRF dan mengukur kontribusi guncangan melalui FEVD.

1.4 Manfaat Penelitian

Manfaat teoretis. Penelitian ini memperkaya kajian empiris mengenai keterkaitan pasar saham dengan faktor ekonomi global dan domestik di Indonesia, khususnya melalui penerapan metode deret waktu multivariat (ARDL dan VAR/VECM) pada data periode terbaru yang memuat berbagai guncangan.

Manfaat praktis.

  1. Bagi investor dan manajer investasi, hasil penelitian dapat menjadi bahan pertimbangan dalam menyusun strategi alokasi aset dan manajemen risiko.

  2. Bagi regulator dan pembuat kebijakan (Bank Indonesia, Otoritas Jasa Keuangan, dan pemerintah), hasil penelitian dapat menjadi masukan dalam menjaga stabilitas pasar keuangan.

  3. Bagi akademisi dan peneliti selanjutnya, penelitian ini dapat menjadi rujukan metodologis dan pembanding.

1.5 Batasan Penelitian

  1. Variabel dependen adalah IHSG (poin), dan variabel independen adalah kurs JISDOR (Rp/USD), harga emas futures (USD/troy ounce), harga minyak mentah WTI futures (USD/barel), dan inflasi bulanan (month-to-month, %).

  2. Data berupa deret waktu bulanan periode Januari 2017 sampai Agustus 2026 (116 observasi) yang bersumber dari berkas data penelitian (DC.xlsx).

  3. Metode analisis dibatasi pada uji stasioneritas, uji kointegrasi, ARDL, VAR/VECM, uji kausalitas Granger, IRF, FEVD, dan evaluasi model.

  4. Variabel lain yang juga berpotensi memengaruhi IHSG (suku bunga acuan, aliran modal asing, indeks bursa global, dan faktor non-ekonomi) tidak dimasukkan ke dalam model.

  5. Hasil penelitian bersifat asosiatif dan tidak serta-merta menunjukkan hubungan kausal struktural.

BAB II TINJAUAN PUSTAKA

2.1 Indeks Harga Saham Gabungan (IHSG)

IHSG (Jakarta Composite Index) adalah indeks yang mengukur kinerja harga seluruh saham biasa dan preferen yang tercatat di papan utama dan papan pengembangan Bursa Efek Indonesia. IHSG pertama kali diperkenalkan pada 1 April 1983 dengan nilai dasar 100 yang merujuk pada 10 Agustus 1982. Perhitungannya menggunakan metode rata-rata tertimbang kapitalisasi pasar:

$$

_t =

$$

dengan \(p_{i,t}\) harga pasar saham ke-\(i\) pada waktu \(t\), \(q_{i,t}\) jumlah saham tercatat, dan \(d_t\) nilai dasar yang disesuaikan terhadap aksi korporasi. Karena dibobot kapitalisasi pasar, saham berkapitalisasi besar memiliki pengaruh dominan terhadap pergerakan indeks. Perubahan IHSG sering dinyatakan sebagai imbal hasil (return) logaritmik, \(r_t = \ln(\text{IHSG}_t) - \ln(\text{IHSG}_{t-1})\).

Pergerakan IHSG bulanan, Januari 2017 sampai Agustus 2026

Pergerakan IHSG bulanan, Januari 2017 sampai Agustus 2026

2.2 Nilai Tukar USD/IDR

Nilai tukar adalah harga satu mata uang dalam satuan mata uang lain. Kurs USD/IDR menyatakan jumlah rupiah yang diperlukan untuk memperoleh satu dolar AS. Kenaikan kurs berarti depresiasi rupiah. Dalam penelitian ini digunakan kurs JISDOR (Jakarta Interbank Spot Dollar Rate), yaitu kurs referensi yang dipublikasikan Bank Indonesia berdasarkan transaksi spot antarbank.

Terdapat dua pendekatan teoretis utama mengenai hubungan kurs dan harga saham. Pertama, pendekatan flow-oriented (Dornbusch & Fischer, 1980) menyatakan bahwa perubahan kurs memengaruhi daya saing ekspor dan impor sehingga memengaruhi laba perusahaan dan harga sahamnya. Kedua, pendekatan stock-oriented (portfolio balance) (Branson, 1983; Frankel, 1983) menyatakan bahwa harga saham memengaruhi kurs melalui aliran modal portofolio. Dengan demikian arah hubungan keduanya dapat bersifat dua arah, dan tanda pengaruhnya bergantung pada struktur ekonomi serta komposisi emiten.

Pergerakan kurs JISDOR (Rp/USD)

Pergerakan kurs JISDOR (Rp/USD)

2.3 Harga Emas Dunia

Emas adalah logam mulia yang secara tradisional berfungsi sebagai penyimpan nilai dan aset lindung nilai terhadap inflasi, depresiasi mata uang, serta ketidakpastian geopolitik. Harga acuan dunia umumnya dinyatakan dalam dolar AS per troy ounce dan dalam penelitian ini diwakili harga futures emas. Baur dan Lucey (2010) membedakan emas sebagai hedge (tidak berkorelasi atau berkorelasi negatif dengan aset lain secara rata-rata) dan safe haven (tidak berkorelasi atau berkorelasi negatif pada saat pasar mengalami tekanan ekstrem).

Hubungan emas dan saham dapat bersifat substitusi, yaitu ketika ketidakpastian meningkat, dana mengalir dari saham ke emas sehingga harga emas naik dan harga saham turun. Hubungan juga dapat bersifat positif ketika kenaikan emas mencerminkan melemahnya dolar AS atau likuiditas global yang longgar. Bagi Indonesia sebagai produsen emas, kenaikan harga emas juga dapat meningkatkan kinerja emiten pertambangan.

Pergerakan harga emas futures (USD/troy ounce)

Pergerakan harga emas futures (USD/troy ounce)

2.4 Harga Minyak Dunia

Minyak mentah merupakan komoditas energi strategis. Penelitian ini memakai harga minyak West Texas Intermediate (WTI) futures dalam USD per barel. Secara teoretis, kenaikan harga minyak meningkatkan biaya produksi dan menekan margin laba perusahaan pengguna energi, sementara laba perusahaan penghasil energi meningkat. Kilian dan Park (2009) menegaskan bahwa dampak harga minyak terhadap pasar saham bergantung pada sumber perubahannya (guncangan permintaan agregat, guncangan penawaran, atau permintaan spesifik minyak), sehingga tanda pengaruhnya tidak selalu sama sepanjang waktu.

Bagi Indonesia, dampak harga minyak bersifat ganda: sebagai pengimpor neto minyak, kenaikan harga memperbesar beban subsidi energi dan defisit transaksi berjalan, tetapi sebagai produsen batu bara dan gas, sektor energi turut diuntungkan. Bobot sektor energi dan pertambangan di IHSG membuat arah pengaruh akhirnya menjadi pertanyaan empiris.

Pergerakan harga minyak WTI futures (USD/barel)

Pergerakan harga minyak WTI futures (USD/barel)

2.5 Inflasi

Inflasi adalah kenaikan harga barang dan jasa secara umum dan terus-menerus dalam suatu periode. Di Indonesia inflasi diukur melalui perubahan Indeks Harga Konsumen (IHK) yang dipublikasikan Badan Pusat Statistik. Inflasi bulanan (month-to-month) dihitung sebagai:

$$

_t = %

$$

Fisher (1930) mengemukakan hipotesis bahwa imbal hasil saham nominal seharusnya mengimbangi inflasi sehingga imbal hasil riil tidak terpengaruh. Namun, banyak studi empiris menemukan hubungan negatif jangka pendek antara inflasi dan imbal hasil saham (Fama, 1981), antara lain karena inflasi tinggi mendorong pengetatan moneter, menaikkan tingkat diskonto, dan menekan daya beli. Karena inflasi bulanan sudah berupa laju perubahan (bukan tingkat indeks) dan dapat bernilai negatif (deflasi), variabel ini tidak ditransformasi logaritma.

Inflasi bulanan month-to-month (%)

Inflasi bulanan month-to-month (%)

Statistik deskriptif variabel penelitian
Variabel N Rata2 SimpBaku Min Maks
Emas 116 2095.83 954.61 1196.20 5247.90
IHSG 116 6496.47 802.63 4538.93 8646.94
Inflasi 116 0.23 0.33 -0.76 1.65
Kurs 116 14993.98 1165.39 13319.00 18058.00
WTI 116 66.86 17.03 18.84 114.67

2.6 Hubungan Faktor Ekonomi Global dan Domestik terhadap IHSG

Kerangka teoretis hubungan variabel makroekonomi dengan harga saham bertumpu pada model diskonto arus kas, yaitu harga saham sama dengan nilai kini seluruh dividen atau arus kas masa depan:

$$

P_t = _{k=1}^{}

$$

Variabel makroekonomi memengaruhi \(P_t\) melalui dua jalur, yaitu ekspektasi arus kas (\(D\)) dan tingkat diskonto (\(r\)). Arbitrage Pricing Theory (Ross, 1976) memperluas gagasan ini dengan menyatakan imbal hasil aset merupakan fungsi linear dari beberapa faktor risiko sistematis, dan Chen et al. (1986) mengidentifikasi variabel makroekonomi sebagai faktor tersebut.

2.7 Analisis Deret Waktu (Time Series)

Deret waktu adalah himpunan observasi \(\{y_t\}\) yang dicatat secara berurutan menurut waktu. Karakteristik utamanya adalah adanya ketergantungan antarobservasi (autokorelasi), sehingga asumsi observasi saling bebas pada regresi klasik tidak terpenuhi. Komponen deret waktu umumnya terdiri dari tren, musiman, siklus, dan komponen tak beraturan. Analisis deret waktu bertujuan memahami struktur dinamis data, menjelaskan hubungan antarvariabel, serta meramalkan nilai masa depan (Box, Jenkins, Reinsel, & Ljung, 2015; Hamilton, 1994).

Konsep penting adalah stasioneritas. Deret \(\{y_t\}\) dikatakan stasioner lemah (weakly stationary) apabila:

  1. \(E(y_t) = \mu\) konstan untuk semua \(t\),

  2. \(\text{Var}(y_t) = \sigma^2\) konstan, dan

  3. \(\text{Cov}(y_t, y_{t-k}) = \gamma_k\) hanya bergantung pada selisih waktu \(k\), bukan pada \(t\).

Proses acak murni (random walk) \(y_t = y_{t-1} + \varepsilon_t\) adalah contoh proses tidak stasioner karena variansnya bertambah menurut waktu (\(\text{Var}(y_t) = t\sigma^2\)). Alat bantu identifikasi awal adalah fungsi autokorelasi (ACF) dan autokorelasi parsial (PACF). Pada deret tidak stasioner, ACF turun sangat lambat.

ACF IHSG pada level dan pada selisih pertama log (ilustrasi)

ACF IHSG pada level dan pada selisih pertama log (ilustrasi)

2.8 Transformasi Data Deret Waktu

Transformasi dilakukan agar data memenuhi asumsi model, terutama kestabilan ragam dan stasioneritas rata-rata.

a. Transformasi logaritma natural. Digunakan untuk menstabilkan ragam yang meningkat seiring tingkat nilai, serta memudahkan interpretasi koefisien sebagai elastisitas:

$$

Y_t^{*} = (Y_t)

$$

Transformasi ini hanya berlaku untuk nilai positif. Oleh karena itu IHSG, kurs, emas, dan WTI ditransformasi logaritma, sedangkan inflasi (yang dapat negatif dan sudah berupa persentase) dipakai pada levelnya. Perlu dicatat bahwa harga WTI pernah turun ke USD18,84 pada April 2020 (masih positif), sehingga log dapat diterapkan pada data ini.

b. Diferensiasi (differencing). Digunakan untuk menghilangkan tren stokastik (akar unit):

$$

Y_t = Y_t - Y_{t-1}, ^{d} Y_t = (^{d-1} Y_t)

$$

Diferensiasi pertama pada logaritma, \(\Delta \ln Y_t \approx\) laju pertumbuhan (return) kontinu.

c. Diferensiasi musiman \(\Delta_s Y_t = Y_t - Y_{t-s}\), dipakai bila terdapat pola musiman. Pada data bulanan ini polanya tidak menjadi fokus.

Ilustrasi transformasi pada IHSG: level, log, dan selisih pertama log

Ilustrasi transformasi pada IHSG: level, log, dan selisih pertama log

2.9 Uji Stasioneritas

Regresi antara variabel yang tidak stasioner dapat menghasilkan hubungan lancung dengan \(R^2\) tinggi dan statistik \(t\) signifikan meskipun tidak ada hubungan sebenarnya (Granger & Newbold, 1974). Karena itu uji stasioneritas, khususnya uji akar unit, wajib dilakukan sebelum pemodelan.

a. Uji Augmented Dickey-Fuller (ADF) (Dickey & Fuller, 1979; Said & Dickey, 1984). Model regresi uji:

$$

y_t = + t + y_{t-1} + _{i=1}^{p} *i* y{t-i} + _t

$$

Hipotesis: \(H_0: \gamma = 0\) (terdapat akar unit, data tidak stasioner) melawan \(H_1: \gamma < 0\) (data stasioner). Statistik uji \(\tau = \hat{\gamma}/SE(\hat{\gamma})\) dibandingkan dengan nilai kritis Dickey-Fuller (bukan distribusi \(t\) biasa). Tolak \(H_0\) jika nilai \(p\) < \(\alpha\) (umumnya 0,05). Orde lag \(p\) dipilih dengan kriteria informasi (AIC/SIC).

b. Uji Phillips-Perron (PP) (Phillips & Perron, 1988) memakai koreksi nonparametrik atas autokorelasi dan heteroskedastisitas pada statistik uji sehingga tidak memerlukan penambahan lag selisih.

c. Uji KPSS (Kwiatkowski, Phillips, Schmidt, & Shin, 1992) memiliki hipotesis yang berlawanan: \(H_0\) data stasioner dan \(H_1\) terdapat akar unit. Penggunaan ADF/PP bersama KPSS memberikan konfirmasi yang lebih kuat.

Suatu deret dikatakan terintegrasi berorde \(d\), ditulis \(I(d)\), jika ia menjadi stasioner setelah didiferensiasi sebanyak \(d\) kali. Orde integrasi menentukan pendekatan pemodelan: ARDL dapat dipakai pada campuran I(0) dan I(1) (tetapi tidak untuk I(2)), sedangkan Johansen mensyaratkan variabel terintegrasi pada orde yang sama.

Berikut ilustrasi uji ADF dan KPSS pada data penelitian (hasil lengkap dibahas pada bab hasil).

Ilustrasi uji akar unit ADF dan KPSS (level dan selisih pertama)
ADF_stat ADF_p KPSS_stat KPSS_p
ln IHSG -3.253 0.083 1.326 0.01
ln Kurs -2.460 0.385 2.100 0.01
ln Emas -1.250 0.888 2.045 0.01
ln WTI -2.155 0.512 0.817 0.01
Inflasi -4.428 0.010 0.069 0.10
D(ln IHSG) -5.226 0.010 0.064 0.10
D(ln Kurs) -6.749 0.010 0.062 0.10
D(ln Emas) -4.639 0.010 0.267 0.10
D(ln WTI) -5.947 0.010 0.042 0.10

2.10 Uji Kointegrasi

Dua atau lebih deret I(1) dikatakan berkointegrasi jika terdapat kombinasi linear yang stasioner, I(0) (Engle & Granger, 1987). Secara ekonomi, kointegrasi menandakan adanya hubungan keseimbangan jangka panjang meskipun masing-masing variabel menyimpang dalam jangka pendek.

a. Uji Engle-Granger (dua tahap). Tahap pertama mengestimasi regresi kointegrasi \(y_t = \beta_0 + \beta' x_t + u_t\) dengan OLS. Tahap kedua menguji akar unit pada residual \(\hat{u}_t\) dengan uji ADF (nilai kritis khusus Engle-Granger/MacKinnon). Residual stasioner mengindikasikan kointegrasi. Kelemahannya, uji ini hanya mampu mendeteksi satu vektor kointegrasi dan hasilnya bergantung pada pemilihan variabel dependen.

b. Uji Johansen (Johansen, 1988; Johansen & Juselius, 1990) berbasis VAR dan dapat mendeteksi beberapa vektor kointegrasi. Dengan VAR(\(p\)) yang direparameterisasi menjadi bentuk VECM:

$$

t = + _{i=1}^{p-1}i + + _t, = ’

$$

Banyaknya vektor kointegrasi \(r\) sama dengan rank matriks \(\boldsymbol{\Pi}\). Statistik uji yang digunakan adalah:

$$

*{trace}(r) = -T*^{k}(1-_i),

*{max}(r, r+1) = -T*(1-)

$$

Pengujian dilakukan berurutan mulai dari \(H_0: r = 0\). Hipotesis nol ditolak bila statistik uji melebihi nilai kritis. Pemilihan lag VAR dan spesifikasi deterministik (konstanta/tren) memengaruhi hasil sehingga harus ditetapkan terlebih dahulu.

c. Uji batas (bounds test) ARDL (Pesaran et al., 2001) dibahas pada subbab berikutnya.

2.11 Model Autoregressive Distributed Lag (ARDL)

ARDL adalah model regresi dinamis yang memuat lag variabel dependen dan lag variabel independen. Model ARDL(\(p, q_1, \ldots, q_k\)) ditulis:

$$

y_t = c + *{i=1}^{p}*i y{t-i} + ^{k}*{l=0}^{q_j}*, x_{j,t-l} + _t

$$

Keunggulan pendekatan ARDL (Pesaran & Shin, 1999; Pesaran et al., 2001) adalah:

  1. dapat dipakai bila regresor berorde integrasi campuran I(0) dan I(1), selama tidak ada yang I(2),

  2. cocok untuk sampel relatif kecil, dan

  3. mengestimasi dinamika jangka pendek dan hubungan jangka panjang dalam satu persamaan, serta mengatasi masalah endogenitas lewat penambahan lag yang memadai.

Bentuk koreksi kesalahan (Unrestricted ECM) untuk uji batas:

$$

y_t = c + *0 y{t-1} + *{j=1}^{k}*j x{j,t-1} + ^{p-1}*i y{t-i} + *{j=1}^{k}^{q_j-1}*{j,l}\Delta x{j,t-l} + _t

$$

Uji batas menggunakan uji-\(F\) atas \(H_0: \delta_0 = \delta_1 = \cdots = \delta_k = 0\) (tidak ada hubungan jangka panjang) melawan \(H_1\): minimal satu \(\delta \neq 0\). Statistik \(F\) dibandingkan dengan dua batas kritis Pesaran et al. (2001): batas bawah (semua regresor I(0)) dan batas atas (semua regresor I(1)). Jika \(F\) > batas atas, terdapat kointegrasi; jika \(F\) < batas bawah, tidak ada; jika di antaranya, hasil tidak konklusif.

Jika kointegrasi terbukti, koefisien jangka panjang diperoleh dari:

$$

_j = -

$$

dan model koreksi kesalahan (ARDL-ECM) mengestimasi kecepatan penyesuaian:

$$

y_t = c + *i* y{t-i} + *{j,l}*x{j,t-l} + , ECT_{t-1} + _t

$$

dengan \(\lambda\) (koefisien error correction term) yang harus bernilai negatif dan signifikan, menunjukkan kecepatan kembali ke keseimbangan jangka panjang. Orde lag optimal dipilih dengan AIC atau SIC. Diagnostik residual meliputi uji autokorelasi Breusch-Godfrey, heteroskedastisitas Breusch-Pagan, normalitas Jarque-Bera, spesifikasi Ramsey RESET, serta kestabilan parameter CUSUM dan CUSUMSQ (Brown, Durbin, & Evans, 1975).

2.12 Model Vector Autoregression (VAR) dan Vector Error Correction Model (VECM)

VAR. Sims (1980) mengusulkan VAR sebagai alternatif model persamaan simultan yang menuntut pembatasan identifikasi a priori. Semua variabel diperlakukan sebagai endogen, dan masing-masing dimodelkan sebagai fungsi lag seluruh variabel. Untuk vektor \(\mathbf{y}_t = (y_{1t}, \ldots, y_{kt})'\):

$$

_t = + 1 + + p + _t, _t (, _u)

$$

VAR dipakai pada data stasioner (level bila I(0), atau selisih pertama bila I(1) tanpa kointegrasi). Lag optimal dipilih berdasarkan AIC, HQ, SC, atau FPE. Model dinyatakan stabil jika seluruh akar karakteristik berada di dalam lingkaran satuan. Diagnostik residual mencakup uji autokorelasi (Portmanteau/LM), normalitas (Jarque-Bera multivariat), dan heteroskedastisitas (ARCH multivariat).

VECM. Jika variabel I(1) dan berkointegrasi, VAR pada selisih saja akan menghilangkan informasi jangka panjang. VECM menambahkan istilah koreksi kesalahan:

$$

t = ’ + _{i=1}^{p-1}i + + _t

$$

dengan \(\boldsymbol{\beta}\) matriks vektor kointegrasi (hubungan jangka panjang), \(\boldsymbol{\alpha}\) matriks kecepatan penyesuaian, dan \(\boldsymbol{\Gamma}_i\) koefisien dinamika jangka pendek. Elemen \(\alpha\) yang negatif dan signifikan pada persamaan variabel tertentu menunjukkan variabel tersebut menyesuaikan diri terhadap deviasi dari keseimbangan jangka panjang. Orde VECM adalah \(p-1\) di mana \(p\) adalah lag VAR dalam level.

Alur pemilihan model:

Pemilihan model berdasarkan orde integrasi dan kointegrasi
Kondisi Model
Seluruh variabel I(0) VAR pada level
Variabel I(1), tidak berkointegrasi VAR pada selisih pertama
Variabel I(1), berkointegrasi VECM
Campuran I(0) dan I(1), tanpa I(2) ARDL (uji batas)

2.13 Uji Kausalitas Granger

Granger (1969) mendefinisikan kausalitas dalam arti prediktif: \(X\) dikatakan menyebabkan (\(Granger\text{-}cause\)) \(Y\) jika nilai lampau \(X\) membantu memprediksi \(Y\) secara signifikan setelah memperhitungkan nilai lampau \(Y\). Pengujiannya memakai regresi:

$$

y_t = c + *{i=1}^{m}*i y{t-i} + ^{m}*i x*{t-i} + _t

$$

dengan \(H_0: \beta_1 = \beta_2 = \cdots = \beta_m = 0\) (X tidak menyebabkan Y menurut Granger), diuji dengan uji-\(F\) atau uji Wald. Hubungan bisa searah, dua arah (umpan balik), atau tidak ada. Uji ini harus dilakukan pada data stasioner dan sensitif terhadap pemilihan lag. Bila terdapat kointegrasi, kausalitas dapat diuji melalui VECM (kausalitas jangka pendek lewat uji Wald pada koefisien \(\Delta\) lag dan jangka panjang lewat signifikansi koefisien ECT). Sebagai alternatif ketika orde integrasi tidak pasti, prosedur Toda dan Yamamoto (1995) dapat digunakan. Perlu diingat, kausalitas Granger menunjukkan keterdahuluan temporal, bukan kausalitas struktural.

2.14 Impulse Response Function (IRF)

IRF menelusuri respons dinamis suatu variabel terhadap guncangan satu simpangan baku pada variabel lain, dengan semua variabel lain dijaga konstan. Berdasarkan representasi rata-rata bergerak vektor (VMA(\(\infty\))):

$$

t = + ^{}s,

$$

elemen \(\Psi_{ij,s}\) adalah respons variabel \(i\) pada \(s\) periode setelah guncangan variabel \(j\). Karena galat \(\mathbf{u}_t\) umumnya berkorelasi antarpersamaan, guncangan perlu diortogonalisasi, lazimnya memakai dekomposisi Cholesky \(\boldsymbol{\Sigma}_u = \mathbf{P}\mathbf{P}'\) sehingga \(\boldsymbol{\Theta}_s = \boldsymbol{\Psi}_s\mathbf{P}\) (IRF ortogonal). Hasilnya sensitif terhadap urutan variabel, sehingga urutan harus didasarkan pada pertimbangan teoretis, misalnya dari variabel yang paling eksogen (harga minyak dan emas dunia) ke yang paling endogen (IHSG). Alternatif yang tidak bergantung urutan adalah Generalized IRF (Pesaran & Shin, 1998). Interval kepercayaan biasanya diperoleh dengan bootstrap.

2.15 Forecast Error Variance Decomposition (FEVD)

FEVD menguraikan ragam galat peramalan \(h\) periode ke depan suatu variabel menjadi proporsi yang disumbangkan oleh guncangan masing-masing variabel dalam sistem. Kontribusi guncangan variabel \(j\) terhadap ragam galat peramalan variabel \(i\) pada horizon \(h\):

$$

*{ij}(h) =* , ^{k}_{ij}(h) = 1

$$

Pada horizon pendek, hampir seluruh ragam galat biasanya berasal dari guncangan variabel itu sendiri, dan kontribusi variabel lain meningkat pada horizon lebih panjang. Hasil FEVD memberi gambaran kekuatan relatif tiap faktor dalam menjelaskan variasi IHSG dan, seperti IRF, bergantung pada urutan Cholesky.

2.16 Evaluasi Model

Evaluasi model mencakup (a) pemilihan model, (b) diagnostik residual, dan (c) akurasi peramalan.

a. Kriteria informasi untuk memilih lag dan spesifikasi (nilai terkecil lebih baik):

$$

AIC = -2L + 2m, BIC = -2L + mT, HQ = -2L + 2m(T)

$$

dengan \(m\) banyaknya parameter dan \(T\) banyaknya observasi.

b. Diagnostik residual. Model yang baik memiliki residual yang bebas autokorelasi (Breusch-Godfrey/Ljung-Box/Portmanteau), homoskedastis (Breusch-Pagan/ARCH), berdistribusi normal (Jarque-Bera), dan parameternya stabil (CUSUM, akar karakteristik VAR di dalam lingkaran satuan).

3.1 Desain Penelitian

Penelitian ini menggunakan pendekatan kuantitatif dengan metode analisis deret waktu (time series). Pendekatan kuantitatif digunakan karena data yang dianalisis berbentuk numerik dan diolah menggunakan metode statistik. Analisis deret waktu digunakan karena data memiliki urutan pengamatan berdasarkan periode waktu, yaitu bulanan.

Penelitian ini mengamati lima variabel, yaitu Indeks Harga Saham Gabungan (IHSG), harga emas futures, harga minyak mentah West Texas Intermediate (WTI) futures, kurs JISDOR, dan inflasi month-to-month (M-to-M). IHSG menjadi variabel yang pergerakannya diamati, sedangkan empat variabel lainnya digunakan untuk melihat keterkaitan faktor ekonomi global dan domestik dengan pergerakan IHSG.

Secara keseluruhan, penelitian diarahkan untuk memahami karakteristik data, mengidentifikasi pola pergerakan dan hubungan awal antarvariabel, menyiapkan data, kemudian melakukan pengujian dan pemodelan deret waktu (stasioneritas, kointegrasi, ARDL, VAR/VECM) beserta diagnostik dan analisis hubungan dinamisnya.

3.2 Jenis dan Sumber Data

Data yang digunakan merupakan data sekunder kuantitatif berbentuk deret waktu bulanan. Periode pengamatan dimulai Januari 2017 sampai Agustus 2026, terdiri atas 116 observasi dan lima variabel penelitian. Pada dokumen ini data dimasukkan secara manual (diketik langsung sebagai vektor) sehingga dokumen dapat dijalankan tanpa file eksternal.

Sintaks.

# Data telah dimasukkan secara manual pada bagian awal dokumen.

# Bagian ini menampilkan contoh data yang digunakan dalam penelitian.

head(data)
tail(data)

Interpretasi. Data penelitian terdiri atas satu variabel periode dan lima variabel numerik. Periode digunakan sebagai penanda waktu pengamatan, sedangkan lima variabel numerik digunakan dalam proses analisis. Setiap baris merepresentasikan kondisi kelima variabel pada bulan yang sama sehingga urutan waktu antarpengamatan harus dipertahankan. Hal ini penting karena analisis deret waktu tidak hanya memperhatikan besar nilai, tetapi juga keterkaitan nilai suatu periode dengan periode sebelumnya. Enam baris pertama menunjukkan data dimulai pada Januari 2017 (IHSG 5.294,10; emas USD 1.211,4; WTI USD 52,81; kurs Rp13.343; inflasi 0,97 persen), sedangkan baris terakhir menunjukkan data berakhir pada Agustus 2026.

3.3 Variabel Penelitian dan Definisi Operasional

Variabel yang digunakan dalam penelitian ini terdiri atas IHSG, emas futures, minyak WTI futures, kurs JISDOR, dan inflasi M-to-M. Definisi operasional setiap variabel disajikan pada tabel berikut.

Variabel | Definisi Operasional | Satuan |

|:–|:–|:–|

IHSG | Indeks yang menggambarkan pergerakan harga saham perusahaan tercatat di Bursa Efek Indonesia. | Poin |
Emas Futures | Harga kontrak berjangka emas di pasar komoditas. | USD/troy oz |
Minyak WTI Futures | Harga kontrak berjangka minyak mentah West Texas Intermediate. | USD/barel |
Kurs JISDOR | Nilai tukar rupiah terhadap dolar Amerika Serikat berdasarkan Jakarta Interbank Spot Dollar Rate. | Rp/USD |
Inflasi M-to-M | Persentase perubahan indeks harga konsumen dibandingkan bulan sebelumnya. | Persen (%) |

IHSG digunakan sebagai variabel utama yang diamati, sedangkan emas futures, minyak WTI futures, kurs JISDOR, dan inflasi merupakan variabel lain yang dianalisis bersama IHSG. Penggunaan istilah variabel utama dan variabel lainnya tidak secara otomatis menunjukkan hubungan sebab-akibat.

3.4 Tahapan Penelitian

Penelitian dilakukan secara bertahap dan saling berkaitan:

  1. Pengumpulan dan pemasukan data bulanan ke dalam R.

  2. Pemeriksaan struktur data, tipe variabel, jumlah observasi, dan kesesuaian periode.

  3. Exploratory Data Analysis (EDA): statistik deskriptif, visualisasi deret waktu, dan analisis korelasi.

  4. Pra-pemrosesan: pemeriksaan missing value, penyesuaian periode bulanan, transformasi logaritmik, dan diferensiasi.

  5. Analisis deret waktu: uji stasioneritas, penentuan orde integrasi, uji kointegrasi, dan penentuan model.

  6. Estimasi model (ARDL dan VAR/VECM).

  7. Pengujian dan diagnostik model.

  8. Analisis hubungan dinamis (Granger, IRF, FEVD) dan interpretasi hasil.

EDA dan pra-pemrosesan tidak dimaksudkan untuk menetapkan kesimpulan akhir mengenai pengaruh faktor ekonomi terhadap IHSG; keduanya merupakan fondasi bagi pengujian dan pemodelan pada tahap berikutnya.

3.5 Exploratory Data Analysis (EDA)

EDA dilakukan untuk memperoleh gambaran awal mengenai karakteristik, pola pergerakan, penyebaran, dan hubungan antarvariabel. Analisis ini mencakup pemeriksaan struktur data, statistik deskriptif, grafik deret waktu, dan matriks korelasi. Hasil EDA bersifat eksploratif sehingga belum digunakan untuk menyatakan adanya pengaruh atau hubungan sebab-akibat.

3.5.1 Pemeriksaan Struktur Data

Pemeriksaan struktur dilakukan untuk mengetahui jumlah observasi, jumlah variabel, tipe data, dan rentang periode pengamatan.

Sintaks.

# Struktur dan dimensi dataset

str(data)
## 'data.frame':    116 obs. of  6 variables:
##  $ Periode    : Date, format: "2017-01-01" "2017-02-01" ...
##  $ IHSG       : num  5294 5387 5568 5685 5738 ...
##  $ Emas       : num  1211 1254 1251 1268 1270 ...
##  $ Minyak_WTI : num  52.8 54 50.6 49.3 48.3 ...
##  $ Kurs_JISDOR: num  13343 13347 13321 13327 13321 ...
##  $ Inflasi    : num  0.97 0.23 -0.02 0.09 0.39 0.69 0.22 -0.07 0.13 0.01 ...
dim(data)
## [1] 116   6
# Nama variabel

names(data)
## [1] "Periode"     "IHSG"        "Emas"        "Minyak_WTI"  "Kurs_JISDOR"
## [6] "Inflasi"
# Ringkasan statistik awal

summary(data)
##     Periode                IHSG           Emas        Minyak_WTI    
##  Min.   :2017-01-01   Min.   :4539   Min.   :1196   Min.   : 18.84  
##  1st Qu.:2019-05-24   1st Qu.:5982   1st Qu.:1397   1st Qu.: 54.92  
##  Median :2021-10-16   Median :6490   Median :1818   Median : 67.03  
##  Mean   :2021-10-16   Mean   :6496   Mean   :2096   Mean   : 66.86  
##  3rd Qu.:2024-03-08   3rd Qu.:7052   3rd Qu.:2227   3rd Qu.: 77.00  
##  Max.   :2026-08-01   Max.   :8647   Max.   :5248   Max.   :114.67  
##   Kurs_JISDOR       Inflasi       
##  Min.   :13319   Min.   :-0.7600  
##  1st Qu.:14173   1st Qu.: 0.0375  
##  Median :14676   Median : 0.1950  
##  Mean   :14994   Mean   : 0.2347  
##  3rd Qu.:15816   3rd Qu.: 0.3900  
##  Max.   :18058   Max.   : 1.6500
# Periode awal dan akhir

min(data$Periode, na.rm = TRUE)
## [1] "2017-01-01"
max(data$Periode, na.rm = TRUE)
## [1] "2026-08-01"

Interpretasi. Fungsi str() menunjukkan kolom Periode bertipe tanggal (Date) dan kelima variabel lainnya bertipe numerik, sehingga perhitungan statistik dan pembentukan objek deret waktu dapat dilakukan. Fungsi dim() menghasilkan 116 baris dan 6 kolom: 116 observasi bulanan dan 6 kolom (1 penanda periode ditambah 5 variabel). Fungsi summary() memberikan nilai minimum, kuartil, median, rata-rata, dan maksimum setiap kolom. Nilai minimum dan maksimum kolom periode adalah 1 Januari 2017 dan 1 Agustus 2026, sesuai dengan periode penelitian. Apabila hasil pemeriksaan tidak sesuai dengan periode yang direncanakan, data perlu ditinjau kembali sebelum analisis dilanjutkan.

3.5.2 Statistik Deskriptif

Statistik deskriptif digunakan untuk menggambarkan karakteristik masing-masing variabel melalui nilai minimum, maksimum, rata-rata, median, dan standar deviasi.

Sintaks.

statistik_deskriptif <- data %>%

  summarise(

    across(

      c(IHSG, Emas, Minyak_WTI, Kurs_JISDOR, Inflasi),

      list(

        Minimum = ~ min(.x, na.rm = TRUE),

        Maksimum = ~ max(.x, na.rm = TRUE),

        Mean = ~ mean(.x, na.rm = TRUE),

        Median = ~ median(.x, na.rm = TRUE),

        Standar_Deviasi = ~ sd(.x, na.rm = TRUE)

      ),

      .names = "{.col}_{.fn}"

    )

  ) %>%

  pivot_longer(

    cols = everything(),

    names_to = c("Variabel", "Ukuran"),

    names_pattern = "(.+)_(Minimum|Maksimum|Mean|Median|Standar_Deviasi)",

    values_to = "Nilai"

  ) %>%

  pivot_wider(names_from = Ukuran, values_from = Nilai)

 

kable(

  statistik_deskriptif,

  digits = 3,

  caption = "Statistik Deskriptif Variabel Penelitian"

)
Statistik Deskriptif Variabel Penelitian
Variabel Minimum Maksimum Mean Median Standar_Deviasi
IHSG 4538.93 8646.94 6496.471 6489.685 802.625
Emas 1196.20 5247.90 2095.833 1817.650 954.614
Minyak_WTI 18.84 114.67 66.864 67.030 17.030
Kurs_JISDOR 13319.00 18058.00 14993.983 14675.500 1165.391
Inflasi -0.76 1.65 0.235 0.195 0.334

Interpretasi. Nilai minimum dan maksimum menunjukkan rentang setiap variabel, mean menunjukkan rata-rata, median menunjukkan nilai tengah, dan standar deviasi menunjukkan penyebaran data terhadap rata-ratanya.

  • IHSG berkisar dari 4.538,93 (Maret 2020, saat awal pandemi) sampai 8.646,94 (Desember 2025) dengan rata-rata 6.496,47 dan median 6.489,69. Rata-rata dan median yang hampir sama mengindikasikan distribusi yang relatif simetris.

  • Emas berkisar dari USD 1.196,2 (September 2018) sampai USD 5.247,9 (Februari 2026) dengan rata-rata 2.095,83 yang lebih besar daripada median 1.817,65. Selisih ini mengindikasikan kemencengan ke kanan karena sebagian nilai tinggi pada periode terakhir menarik rata-rata ke atas.

  • Minyak WTI berkisar dari USD 18,84 (April 2020) sampai USD 114,67 (Mei 2022) dengan rata-rata 66,86 dan median 67,03 yang hampir sama.

  • Kurs JISDOR berkisar dari Rp13.319 (Juni 2017) sampai Rp18.058 (Juli 2026) dengan rata-rata 14.993,98 dan median 14.675,50, yang menandakan tren pelemahan rupiah pada periode akhir.

  • Inflasi berkisar dari -0,76 persen (Januari 2025) sampai 1,65 persen (Maret 2025) dengan rata-rata 0,235 dan median 0,195. Nilai minimum yang negatif menunjukkan adanya deflasi bulanan.

Standar deviasi tidak dapat dibandingkan langsung antarvariabel karena satuannya berbeda. Secara relatif terhadap rata-ratanya, emas paling bervariasi (standar deviasi sekitar 46 persen dari rata-rata), diikuti WTI (sekitar 25 persen), IHSG (sekitar 12 persen), dan kurs (sekitar 8 persen). Standar deviasi yang besar menunjukkan fluktuasi yang lebih lebar, tetapi tidak dengan sendirinya menunjukkan bahwa variabel tersebut lebih berpengaruh terhadap IHSG. Bentuk distribusi dan keberadaan pencilan perlu diperiksa lebih lanjut.

3.5.3 Visualisasi Perkembangan Data

Visualisasi deret waktu digunakan untuk mengamati pola pergerakan masing-masing variabel dari waktu ke waktu, termasuk kecenderungan tren dan fluktuasi.

Sintaks.

data_long <- data %>%

  pivot_longer(

    cols = c(IHSG, Emas, Minyak_WTI, Kurs_JISDOR, Inflasi),

    names_to = "Variabel",

    values_to = "Nilai"

  )

 

ggplot(data_long, aes(x = Periode, y = Nilai)) +

  geom_line(color = "steelblue", linewidth = 0.7) +

  facet_wrap(~ Variabel, scales = "free_y", ncol = 2) +

  labs(

    title = "Perkembangan Variabel Penelitian",

    x = "Periode",

    y = "Nilai"

  ) +

  theme_minimal() +

  theme(

    plot.title = element_text(hjust = 0.5, face = "bold")

  )

Interpretasi. Grafik dibuat dengan geom_line(), dan facet_wrap() memisahkan panel setiap variabel dengan skala sumbu Y bebas karena satuan dan rentang nilainya berbeda.

  • IHSG naik dari sekitar 5.300 pada awal 2017, jatuh tajam ke titik terendah pada Maret 2020, pulih dan bergerak naik hingga puncak Desember 2025, kemudian turun tajam sepanjang paruh pertama 2026 (5.643,19 pada Juni 2026) dan mulai pulih pada Juli–Agustus 2026.

  • Emas bergerak naik secara umum, dengan percepatan yang tajam sejak 2024 hingga puncak Februari 2026, lalu terkoreksi.

  • Minyak WTI turun sangat tajam pada awal 2020, naik hingga puncak Mei 2022, kemudian bergerak mendatar dengan lonjakan kembali pada Maret–April 2026.

  • Kurs JISDOR cenderung melemah dari sekitar Rp13.300 menjadi sekitar Rp18.000, dengan lonjakan sesaat pada Maret 2020.

  • Inflasi berfluktuasi di sekitar nol tanpa tren jangka panjang yang jelas, dengan lonjakan dan penurunan tajam pada awal 2025.

Beberapa variabel (IHSG, WTI, dan kurs) mengalami perubahan tajam pada waktu yang berdekatan, yaitu sekitar Maret–April 2020 dan paruh pertama 2026, sebagai indikasi awal adanya dinamika ekonomi yang terjadi bersamaan. Kesamaan waktu pergerakan belum membuktikan hubungan sebab-akibat. Kecenderungan naik atau turun jangka panjang (misalnya pada emas dan kurs) mengindikasikan kemungkinan adanya tren, dan lebar fluktuasi yang berubah sepanjang waktu mengindikasikan varians yang belum konstan. Keduanya perlu diperiksa melalui pengujian formal.

3.5.4 Analisis Korelasi Antarvariabel

Analisis korelasi Pearson digunakan untuk melihat arah dan kekuatan hubungan linear antarvariabel. Nilai korelasi berada pada rentang -1 sampai 1.

Sintaks.

data_korelasi <- data %>%

  dplyr::select(IHSG, Emas, Minyak_WTI, Kurs_JISDOR, Inflasi)

 

matriks_korelasi <- cor(

  data_korelasi,

  method = "pearson",

  use = "pairwise.complete.obs"

)

 

kable(round(matriks_korelasi, 3), caption = "Matriks Korelasi Pearson")
Matriks Korelasi Pearson
IHSG Emas Minyak_WTI Kurs_JISDOR Inflasi
IHSG 1.000 0.561 0.579 0.506 0.071
Emas 0.561 1.000 0.266 0.861 -0.005
Minyak_WTI 0.579 0.266 1.000 0.351 0.111
Kurs_JISDOR 0.506 0.861 0.351 1.000 -0.060
Inflasi 0.071 -0.005 0.111 -0.060 1.000
corrplot(

  matriks_korelasi,

  method = "color",

  type = "upper",

  addCoef.col = "black",

  tl.col = "black",

  tl.srt = 45,

  number.cex = 0.7,

  title = "Matriks Korelasi Antarvariabel",

  mar = c(0, 0, 2, 0)

)

Interpretasi. Korelasi IHSG dengan WTI sebesar 0,579, dengan emas sebesar 0,561, dan dengan kurs sebesar 0,506; ketiganya positif dengan kekuatan sedang, artinya IHSG cenderung bergerak searah dengan ketiga variabel tersebut pada data level. Korelasi IHSG dengan inflasi hanya 0,071 sehingga hubungan liniernya sangat lemah. Antarvariabel penjelas, korelasi emas dengan kurs sangat tinggi (0,861), yang menunjukkan keduanya bergerak naik bersama dalam periode pengamatan. Korelasi lainnya lebih lemah: emas–WTI 0,266, WTI–kurs 0,351, dan inflasi dengan variabel lain berada di sekitar nol (-0,060 sampai 0,111).

Matriks korelasi ini bersifat deskriptif, tidak menguji signifikansi statistik, tidak menunjukkan arah pengaruh, dan tidak dapat digunakan untuk menyimpulkan sebab-akibat. Karena data berbentuk deret waktu, korelasi pada data level berpotensi tinggi akibat tren bersama (misalnya emas dan kurs), sehingga hasilnya perlu dibaca bersama hasil pemeriksaan stasioneritas dan analisis lanjutan.

3.6 Pra-pemrosesan Data

Pra-pemrosesan dilakukan untuk memeriksa dan menyiapkan data agar memiliki struktur yang sesuai untuk analisis lanjutan, mencakup penanganan missing value, penyesuaian frekuensi dan periode, transformasi logaritmik, serta diferensiasi. Hasil pra-pemrosesan tidak dengan sendirinya membuktikan bahwa seluruh variabel telah stasioner; sifat tersebut ditentukan melalui pengujian formal pada subbab 3.7.

3.6.1 Penanganan Missing Value

Missing value adalah kondisi ketika suatu nilai pengamatan tidak tersedia. Pemeriksaan dilakukan untuk mengetahui jumlah nilai kosong pada setiap variabel.

Sintaks.

# Jumlah dan persentase missing value setiap kolom

jumlah_missing <- colSums(is.na(data))

persentase_missing <- colMeans(is.na(data)) * 100

 

tabel_missing <- data.frame(

  Variabel = names(jumlah_missing),

  Jumlah_Missing = as.integer(jumlah_missing),

  Persentase_Missing = as.numeric(persentase_missing)

)

 

kable(

  tabel_missing,

  digits = 2,

  caption = "Pemeriksaan Missing Value"

)
Pemeriksaan Missing Value
Variabel Jumlah_Missing Persentase_Missing
Periode 0 0
IHSG 0 0
Emas 0 0
Minyak_WTI 0 0
Kurs_JISDOR 0 0
Inflasi 0 0
# Salinan data untuk pra-pemrosesan

data_bersih <- data

 

# Fungsi penanganan missing value (interpolasi linear + carry nearest)

isi_missing <- function(x) {

  if (all(is.na(x))) {

    return(x)

  }

  if (anyNA(x)) {

    x <- zoo::na.approx(x, na.rm = FALSE)

    x <- zoo::na.locf(x, na.rm = FALSE)

    x <- zoo::na.locf(x, fromLast = TRUE, na.rm = FALSE)

  }

  return(x)

}

 

data_bersih <- data_bersih %>%

  mutate(

    across(

      c(IHSG, Emas, Minyak_WTI, Kurs_JISDOR, Inflasi),

      isi_missing

    )

  )

 

# Pemeriksaan ulang missing value

colSums(is.na(data_bersih))
##     Periode        IHSG        Emas  Minyak_WTI Kurs_JISDOR     Inflasi 
##           0           0           0           0           0           0

Interpretasi. Tabel pemeriksaan menunjukkan jumlah dan persentase missing value sebesar nol pada seluruh variabel. Dengan demikian tidak ada nilai yang perlu diinterpolasi dan seluruh observasi dapat dipertahankan. Pemeriksaan ulang setelah penanganan tetap menghasilkan nol pada setiap kolom. Jika hasil pemeriksaan ulang berbeda dari nol, berarti masih ada nilai kosong yang belum dapat diisi dan harus diperiksa sebelum transformasi dan diferensiasi. Interpolasi hanya merupakan metode pengisian nilai yang tidak tersedia, bukan pengganti pengamatan aktual; karena tidak ditemukan missing value, mempertahankan data asli merupakan pilihan yang tepat.

3.6.2 Penyesuaian Frekuensi dan Periode Data

Data penelitian menggunakan frekuensi bulanan dengan periode Januari 2017 sampai Agustus 2026. Penyesuaian dilakukan untuk memastikan urutan bulan lengkap dan konsisten, kemudian data diubah menjadi objek deret waktu berfrekuensi 12.

Sintaks.

# Mengurutkan data berdasarkan periode

data_bersih <- data_bersih %>%

  arrange(Periode)

 

# Membentuk urutan periode bulanan yang lengkap

periode_lengkap <- seq(

  from = min(data_bersih$Periode),

  to = max(data_bersih$Periode),

  by = "month"

)

 

# Memastikan setiap bulan tercantum dalam dataset

data_bersih <- data_bersih %>%

  complete(Periode = periode_lengkap) %>%

  arrange(Periode)

 

# Memeriksa jumlah observasi, periode, dan nilai kosong

nrow(data_bersih)
## [1] 116
range(data_bersih$Periode)
## [1] "2017-01-01" "2026-08-01"
colSums(is.na(data_bersih))
##     Periode        IHSG        Emas  Minyak_WTI Kurs_JISDOR     Inflasi 
##           0           0           0           0           0           0
ts_data <- ts(

  data_bersih %>%

    dplyr::select(IHSG, Emas, Minyak_WTI, Kurs_JISDOR, Inflasi),

  start = c(2017, 1),

  frequency = 12

)

 

# Informasi objek time series

start(ts_data)
## [1] 2017    1
end(ts_data)
## [1] 2026    8
frequency(ts_data)
## [1] 12

Interpretasi. Jumlah baris setelah complete() tetap 116 dan rentang periode tetap 1 Januari 2017 sampai 1 Agustus 2026, serta tidak ada nilai kosong, sehingga tidak ada bulan yang hilang dan tidak dilakukan agregasi atau perubahan frekuensi. Keluaran start() yaitu 2017 bulan ke-1 dan end() yaitu 2026 bulan ke-8 menunjukkan objek deret waktu dimulai Januari 2017 dan berakhir Agustus 2026, sedangkan frequency() bernilai 12 yang menandakan satu siklus tahunan terdiri atas 12 pengamatan bulanan. Data dapat dilanjutkan ke tahap berikutnya karena urutan bulan lengkap dan seluruh nilai numeriknya tersedia.

3.6.3 Transformasi Logaritmik

Transformasi logaritmik dilakukan untuk mengurangi pengaruh perbedaan skala dan membantu menstabilkan varians data, menggunakan logaritma natural:

[

Z_t = (X_t)

]

dengan \(Z_t\) nilai setelah transformasi dan \(X_t\) nilai pengamatan awal. Transformasi diterapkan pada IHSG, emas, WTI, dan kurs karena bernilai positif. Inflasi tidak ditransformasi karena dapat bernilai nol atau negatif.

Sintaks.

data_log <- data_bersih %>%

  mutate(

    log_IHSG = log(IHSG),

    log_Emas = log(Emas),

    log_Minyak_WTI = log(Minyak_WTI),

    log_Kurs_JISDOR = log(Kurs_JISDOR)

  )

 

# Menampilkan hasil transformasi

head(

  data_log %>%

    dplyr::select(Periode, log_IHSG, log_Emas, log_Minyak_WTI, log_Kurs_JISDOR, Inflasi)

)
data_log_long <- data_log %>%

  dplyr::select(Periode, log_IHSG, log_Emas, log_Minyak_WTI, log_Kurs_JISDOR) %>%

  pivot_longer(

    cols = -Periode,

    names_to = "Variabel",

    values_to = "Nilai"

  )

 

ggplot(data_log_long, aes(x = Periode, y = Nilai)) +

  geom_line(color = "darkgreen", linewidth = 0.7) +

  facet_wrap(~ Variabel, scales = "free_y", ncol = 2) +

  labs(

    title = "Data Setelah Transformasi Logaritmik",

    x = "Periode",

    y = "Nilai Logaritmik"

  ) +

  theme_minimal() +

  theme(

    plot.title = element_text(hjust = 0.5, face = "bold")

  )

Interpretasi. Pada observasi pertama, nilai logaritmik IHSG sebesar 8,5743, emas 7,0995, WTI 3,9667, dan kurs 9,4987, sedangkan inflasi tetap pada skala aslinya (0,97). Selama periode pengamatan, rentang log IHSG adalah 8,420–9,065, log emas 7,087–8,566, log WTI 2,936–4,742, dan log kurs 9,497–9,801. Nilai hasil transformasi merupakan logaritma natural dari nilai asli sehingga tidak lagi dibaca sebagai poin, USD per troy ounce, USD per barel, atau rupiah per dolar.

Pada grafik, bentuk pola tidak berubah drastis (tren dan guncangan 2020 masih terlihat), tetapi skala fluktuasi pada level yang tinggi menjadi lebih terkendali. Pola tren yang masih tampak menunjukkan bahwa transformasi logaritmik saja belum menghilangkan tren. Inflasi tidak dilogaritmakan karena nilainya dapat nol atau negatif (terdapat 26 bulan inflasi negatif), sedangkan logaritma natural hanya terdefinisi untuk nilai positif. Oleh sebab itu, keempat variabel hasil transformasi tidak boleh dibandingkan langsung dengan inflasi dalam hal satuan maupun besarnya nilai.

3.6.4 Diferensiasi Data

Diferensiasi adalah proses menghitung selisih antara nilai periode sekarang dan periode sebelumnya. Diferensiasi pertama dirumuskan sebagai:

[

Z_t = Z_t - Z_{t-1}

]

Diferensiasi dilakukan untuk mengurangi tren dan membantu data mencapai kestasioneran pada rata-rata. Diferensiasi pertama diterapkan pada variabel hasil transformasi logaritmik (IHSG, emas, WTI, kurs), sedangkan inflasi didiferensiasi menggunakan nilai aslinya.

Sintaks.

data_diff <- data_log %>%

  mutate(

    d_IHSG = c(NA, diff(log_IHSG)),

    d_Emas = c(NA, diff(log_Emas)),

    d_Minyak_WTI = c(NA, diff(log_Minyak_WTI)),

    d_Kurs_JISDOR = c(NA, diff(log_Kurs_JISDOR)),

    d_Inflasi = c(NA, diff(Inflasi))

  )

 

# Menampilkan hasil diferensiasi

head(

  data_diff %>%

    dplyr::select(Periode, d_IHSG, d_Emas, d_Minyak_WTI, d_Kurs_JISDOR, d_Inflasi)

)
data_diff_long <- data_diff %>%

  dplyr::select(Periode, d_IHSG, d_Emas, d_Minyak_WTI, d_Kurs_JISDOR, d_Inflasi) %>%

  pivot_longer(

    cols = -Periode,

    names_to = "Variabel",

    values_to = "Nilai"

  ) %>%

  filter(!is.na(Nilai))

 

ggplot(data_diff_long, aes(x = Periode, y = Nilai)) +

  geom_line(color = "firebrick", linewidth = 0.7) +

  facet_wrap(~ Variabel, scales = "free_y", ncol = 2) +

  labs(

    title = "Data Setelah Diferensiasi Pertama",

    x = "Periode",

    y = "Nilai Diferensiasi"

  ) +

  theme_minimal() +

  theme(

    plot.title = element_text(hjust = 0.5, face = "bold")

  )

Interpretasi. Pengamatan pertama bernilai NA karena tidak memiliki periode sebelumnya, sehingga dari 116 observasi diperoleh 115 observasi diferensiasi. NA ini merupakan konsekuensi perhitungan, bukan data awal yang hilang. Untuk empat variabel logaritmik, hasil diferensiasi dibaca sebagai perubahan relatif bulanan yang mendekati persentase perubahan (misalnya 0,0173 pada IHSG bulan Februari 2017 berarti naik sekitar 1,7 persen), sedangkan d_Inflasi dibaca dalam poin persentase. Nilai positif berarti kenaikan dibandingkan bulan sebelumnya, nilai negatif berarti penurunan, dan nilai mendekati nol berarti perubahan kecil.

Pada grafik, seluruh variabel berfluktuasi di sekitar nol dan tren jangka panjang tidak lagi tampak. Perubahan terbesar terjadi pada Maret–Mei 2020: IHSG turun sekitar 18,3 persen (Maret 2020), WTI turun sekitar 78,2 persen (Maret 2020) lalu naik sekitar 63,3 persen (Mei 2020), dan kurs naik sekitar 14,0 persen (Maret 2020). Pada inflasi, perubahan terbesar terjadi pada Maret 2025 (+2,13 poin) dan Mei 2025 (-1,54 poin). Amplitudo yang masih besar pada periode-periode tersebut menunjukkan bahwa varians belum sepenuhnya konstan. Diferensiasi pertama belum dapat dijadikan bukti stasioneritas; kepastiannya ditentukan melalui uji ADF, PP, dan KPSS pada subbab 3.7.1.

3.6.5 Pemeriksaan Akhir Hasil Pra-pemrosesan

Tahap terakhir menampilkan data hasil transformasi dan diferensiasi serta memeriksa jumlah observasi dan nilai kosong.

Sintaks.

hasil_akhir <- data_diff %>%

  dplyr::select(Periode, d_IHSG, d_Emas, d_Minyak_WTI, d_Kurs_JISDOR, d_Inflasi)

 

# Data hasil pra-pemrosesan

head(hasil_akhir)
# Dimensi data

dim(hasil_akhir)
## [1] 116   6
# Ringkasan data

summary(hasil_akhir)
##     Periode               d_IHSG              d_Emas        
##  Min.   :2017-01-01   Min.   :-0.183420   Min.   :-0.12866  
##  1st Qu.:2019-05-24   1st Qu.:-0.012210   1st Qu.:-0.01609  
##  Median :2021-10-16   Median : 0.006104   Median : 0.01314  
##  Mean   :2021-10-16   Mean   : 0.001818   Mean   : 0.01138  
##  3rd Qu.:2024-03-08   3rd Qu.: 0.026803   3rd Qu.: 0.03833  
##  Max.   :2026-08-01   Max.   : 0.099910   Max.   : 0.10072  
##                       NA's   :1           NA's   :1         
##   d_Minyak_WTI       d_Kurs_JISDOR         d_Inflasi        
##  Min.   :-0.781866   Min.   :-0.076805   Min.   :-1.540000  
##  1st Qu.:-0.059401   1st Qu.:-0.005550   1st Qu.:-0.240000  
##  Median : 0.015012   Median : 0.001048   Median : 0.030000  
##  Mean   : 0.004216   Mean   : 0.002480   Mean   :-0.006609  
##  3rd Qu.: 0.064801   3rd Qu.: 0.012943   3rd Qu.: 0.200000  
##  Max.   : 0.633269   Max.   : 0.139634   Max.   : 2.130000  
##  NA's   :1           NA's   :1           NA's   :1
# Jumlah missing value setelah differencing

colSums(is.na(hasil_akhir))
##       Periode        d_IHSG        d_Emas  d_Minyak_WTI d_Kurs_JISDOR 
##             0             1             1             1             1 
##     d_Inflasi 
##             1
# Jumlah observasi valid setiap variabel hasil differencing

sapply(hasil_akhir[-1], function(x) sum(!is.na(x)))
##        d_IHSG        d_Emas  d_Minyak_WTI d_Kurs_JISDOR     d_Inflasi 
##           115           115           115           115           115

Interpretasi. Dimensi data akhir adalah 116 baris dan 6 kolom (periode dan lima variabel hasil diferensiasi). Setiap variabel memiliki tepat satu nilai kosong (pengamatan pertama) dan 115 observasi valid, sesuai harapan untuk 116 bulan berurutan tanpa nilai kosong pada data awal. Ringkasan statistik menggambarkan perubahan bulanan, bukan lagi level IHSG, harga komoditas, kurs, maupun inflasi: rata-rata perubahan log bulanan IHSG sekitar 0,0018 (standar deviasi 0,0444), emas 0,0114 (0,0420), WTI 0,0042 (0,1348), dan kurs 0,0025 (0,0226), sedangkan rata-rata perubahan inflasi sekitar -0,0066 poin (standar deviasi 0,4414). WTI memiliki fluktuasi perubahan terbesar. Data ini belum dapat dinyatakan stasioner hanya berdasarkan grafik atau jumlah observasi valid, sehingga pengujian formal dilakukan pada subbab berikutnya.

3.7 Analisis Deret Waktu

Analisis deret waktu disusun secara berurutan dan bersifat keputusan bertahap. Hasil uji stasioneritas menentukan orde integrasi, orde integrasi menentukan perlu tidaknya uji kointegrasi, dan keduanya menentukan jenis model akhir. Urutan ini penting karena meregresikan deret yang tidak stasioner secara langsung berisiko menghasilkan regresi lancung (spurious regression).

Persiapan Data untuk Pemodelan

Variabel IHSG, emas, WTI, dan kurs ditransformasi ke logaritma natural untuk menstabilkan varians serta agar koefisien dapat dibaca sebagai elastisitas. Inflasi tidak dilogaritmakan karena bernilai nol dan negatif pada beberapa bulan (deflasi). Data yang digunakan adalah data yang sama dengan yang telah dimasukkan secara manual pada subbab 3.2.

Sintaks.

options(digits = 4, scipen = 999)

 

# Fungsi pembantu: jalankan uji, bila gagal tampilkan pesan (dokumen tidak berhenti)

coba <- function(expr) {

  tryCatch(expr, error = function(e)

    cat("  (uji dilewati karena error:", conditionMessage(e), ")\n"))

}

 

# Data untuk pemodelan (diambil dari objek `data` yang sudah diinput manual)

df <- data.frame(

  Periode = data$Periode,

  IHSG = data$IHSG,

  EMAS = data$Emas,

  WTI  = data$Minyak_WTI,

  KURS = data$Kurs_JISDOR,

  INF  = data$Inflasi

)

 

cat("Jumlah observasi:", nrow(df), "| periode:",

    format(min(df$Periode), "%b %Y"), "-", format(max(df$Periode), "%b %Y"), "\n")
## Jumlah observasi: 116 | periode: Jan 2017 - Aug 2026
stopifnot(!anyNA(df))

 

# Transformasi logaritma natural

df$LIHSG <- log(df$IHSG)

df$LEMAS <- log(df$EMAS)

df$LWTI  <- log(df$WTI)

df$LKURS <- log(df$KURS)

 

vars_lvl <- c("LIHSG", "LEMAS", "LWTI", "LKURS", "INF")

ts_all <- ts(df[, vars_lvl], start = c(2017, 1), frequency = 12)

 

summary(df[, c("IHSG", "EMAS", "WTI", "KURS", "INF")])
##       IHSG           EMAS           WTI             KURS      
##  Min.   :4539   Min.   :1196   Min.   : 18.8   Min.   :13319  
##  1st Qu.:5982   1st Qu.:1397   1st Qu.: 54.9   1st Qu.:14173  
##  Median :6490   Median :1818   Median : 67.0   Median :14676  
##  Mean   :6496   Mean   :2096   Mean   : 66.9   Mean   :14994  
##  3rd Qu.:7052   3rd Qu.:2227   3rd Qu.: 77.0   3rd Qu.:15816  
##  Max.   :8647   Max.   :5248   Max.   :114.7   Max.   :18058  
##       INF         
##  Min.   :-0.7600  
##  1st Qu.: 0.0375  
##  Median : 0.1950  
##  Mean   : 0.2347  
##  3rd Qu.: 0.3900  
##  Max.   : 1.6500
plot(ts_all, main = "Plot Deret Waktu (level, log)", xlab = "Tahun")

Interpretasi. Data terdiri atas 116 observasi bulanan dari Januari 2017 sampai Agustus 2026. Ringkasan statistik menunjukkan rata-rata IHSG sebesar 6.496 poin dengan rentang 4.539 sampai 8.647, harga emas rata-rata USD 2.096 per troy ounce dengan rentang yang sangat lebar (1.196 sampai 5.248), harga minyak WTI rata-rata USD 66,9 per barel (minimum 18,8 pada masa pandemi), kurs rata-rata Rp14.994 per dolar AS, dan inflasi bulanan rata-rata 0,23 persen dengan nilai minimum negatif sebesar -0,76 persen. Nilai negatif pada inflasi inilah yang menjadi alasan variabel tersebut tidak dilogaritmakan.

Plot deret waktu memperlihatkan bahwa LEMAS dan LKURS cenderung bertren naik, LIHSG naik dalam jangka panjang dengan guncangan besar pada 2020 dan 2026, LWTI berfluktuasi tajam di sekitar tahun 2020 dan 2022, dan INF bergerak di sekitar nol tanpa tren yang jelas. Pola-pola ini memberi indikasi awal bahwa sebagian besar variabel tidak stasioner di level, yang selanjutnya dibuktikan secara formal.

3.7.1 Uji Stasioneritas (ADF, PP, dan KPSS)

Suatu deret dikatakan stasioner apabila rata-rata, varians, dan autokovariansnya konstan terhadap waktu. Pengujian memakai tiga uji yang saling melengkapi. Uji Augmented Dickey-Fuller (ADF) memiliki hipotesis H0: terdapat akar unit (tidak stasioner) melawan H1: stasioner, dengan jumlah lag dipilih otomatis berdasarkan AIC. Uji Phillips-Perron (PP) memiliki hipotesis yang sama tetapi mengoreksi autokorelasi dan heteroskedastisitas secara nonparametrik. Uji KPSS memiliki arah hipotesis yang berlawanan (H0: stasioner) sehingga dipakai sebagai konfirmasi. Pada level digunakan spesifikasi intercept dan tren karena data tampak bertren, sedangkan pada selisih pertama cukup intercept. Keputusan ADF dan PP: stasioner apabila statistik uji lebih negatif daripada nilai kritis 5 persen; pada KPSS stasioner apabila statistik uji tidak melebihi nilai kritis.

Sintaks.

uji_adf <- function(x, nama, tingkat, tipe) {

  m    <- ur.df(x, type = tipe, selectlags = "AIC", lags = 12)

  tn   <- c(none = "tau1", drift = "tau2", trend = "tau3")[[tipe]]

  stat <- m@teststat[1, tn]

  cv5  <- m@cval[tn, "5pct"]

  lagp <- length(grep("z.diff.lag", rownames(m@testreg$coefficients)))

  data.frame(Variabel = nama, Tingkat = tingkat, Spesifikasi = tipe, Lag = lagp,

             Statistik = round(stat, 4), CV_5persen = cv5,

             Keputusan = ifelse(stat < cv5, "Stasioner", "Tidak stasioner"))

}

 

uji_pp <- function(x, nama, tingkat, model) {

  m    <- ur.pp(x, type = "Z-tau", model = model, lags = "short")

  stat <- as.numeric(m@teststat)

  cv5  <- m@cval[1, "5pct"]

  data.frame(Variabel = nama, Tingkat = tingkat, Spesifikasi = model,

             Statistik = round(stat, 4), CV_5persen = cv5,

             Keputusan = ifelse(stat < cv5, "Stasioner", "Tidak stasioner"))

}

 

uji_kpss <- function(x, nama, tingkat, tipe) {

  m    <- ur.kpss(x, type = tipe, lags = "short")

  stat <- as.numeric(m@teststat)

  cv5  <- m@cval[1, "5pct"]

  data.frame(Variabel = nama, Tingkat = tingkat, Spesifikasi = tipe,

             Statistik = round(stat, 4), CV_5persen = cv5,

             Keputusan = ifelse(stat > cv5, "Tidak stasioner", "Stasioner"))

}

 

d1 <- diff(ts_all)  # selisih pertama

 

hasil_adf <- rbind(

  do.call(rbind, lapply(vars_lvl, function(v) uji_adf(ts_all[, v], v, "Level",  "trend"))),

  do.call(rbind, lapply(vars_lvl, function(v) uji_adf(d1[, v],     v, "Diff-1", "drift")))

)

hasil_pp <- rbind(

  do.call(rbind, lapply(vars_lvl, function(v) uji_pp(ts_all[, v], v, "Level",  "trend"))),

  do.call(rbind, lapply(vars_lvl, function(v) uji_pp(d1[, v],     v, "Diff-1", "constant")))

)

hasil_kpss <- rbind(

  do.call(rbind, lapply(vars_lvl, function(v) uji_kpss(ts_all[, v], v, "Level",  "tau"))),

  do.call(rbind, lapply(vars_lvl, function(v) uji_kpss(d1[, v],     v, "Diff-1", "mu")))

)

 

# Pelengkap: p-value ADF (tseries) pada level dan diff-1

p_adf <- data.frame(

  Variabel = vars_lvl,

  p_Level = sapply(vars_lvl, function(v) adf.test(ts_all[, v])$p.value),

  p_Diff1 = sapply(vars_lvl, function(v) adf.test(d1[, v])$p.value)

)

 

kable(hasil_adf,  row.names = FALSE, caption = "Uji ADF")
Uji ADF
Variabel Tingkat Spesifikasi Lag Statistik CV_5persen Keputusan
LIHSG Level trend 2 -3.408 -3.43 Tidak stasioner
LEMAS Level trend 1 -1.483 -3.43 Tidak stasioner
LWTI Level trend 2 -2.539 -3.43 Tidak stasioner
LKURS Level trend 1 -3.522 -3.43 Stasioner
INF Level trend 2 -5.741 -3.43 Stasioner
LIHSG Diff-1 drift 1 -6.075 -2.88 Stasioner
LEMAS Diff-1 drift 1 -6.910 -2.88 Stasioner
LWTI Diff-1 drift 3 -6.834 -2.88 Stasioner
LKURS Diff-1 drift 2 -7.689 -2.88 Stasioner
INF Diff-1 drift 10 -5.632 -2.88 Stasioner
kable(hasil_pp,   row.names = FALSE, caption = "Uji Phillips-Perron")
Uji Phillips-Perron
Variabel Tingkat Spesifikasi Statistik CV_5persen Keputusan
LIHSG Level trend -2.885 -3.449 Tidak stasioner
LEMAS Level trend -1.267 -3.449 Tidak stasioner
LWTI Level trend -2.897 -3.449 Tidak stasioner
LKURS Level trend -3.676 -3.449 Stasioner
INF Level trend -9.617 -3.449 Stasioner
LIHSG Diff-1 constant -9.189 -2.887 Stasioner
LEMAS Diff-1 constant -9.886 -2.887 Stasioner
LWTI Diff-1 constant -9.443 -2.887 Stasioner
LKURS Diff-1 constant -11.694 -2.887 Stasioner
INF Diff-1 constant -20.273 -2.887 Stasioner
kable(hasil_kpss, row.names = FALSE, caption = "Uji KPSS")
Uji KPSS
Variabel Tingkat Spesifikasi Statistik CV_5persen Keputusan
LIHSG Level tau 0.1263 0.146 Stasioner
LEMAS Level tau 0.3545 0.146 Tidak stasioner
LWTI Level tau 0.1460 0.146 Stasioner
LKURS Level tau 0.2817 0.146 Tidak stasioner
INF Level tau 0.0595 0.146 Stasioner
LIHSG Diff-1 mu 0.0637 0.463 Stasioner
LEMAS Diff-1 mu 0.2669 0.463 Stasioner
LWTI Diff-1 mu 0.0424 0.463 Stasioner
LKURS Diff-1 mu 0.0625 0.463 Stasioner
INF Diff-1 mu 0.0535 0.463 Stasioner
kable(p_adf, row.names = FALSE, digits = 4, caption = "p-value ADF (tseries::adf.test)")
p-value ADF (tseries::adf.test)
Variabel p_Level p_Diff1
LIHSG 0.0825 0.01
LEMAS 0.8881 0.01
LWTI 0.5124 0.01
LKURS 0.3855 0.01
INF 0.0100 0.01

Interpretasi. Pada uji ADF level, nilai kritis 5 persen sebesar -3,43. LIHSG (-3,408), LEMAS (-1,483), dan LWTI (-2,539) tidak lebih negatif daripada nilai kritis sehingga H0 tidak ditolak, artinya ketiganya tidak stasioner di level; LIHSG berada sangat dekat dengan batas penolakan. LKURS (-3,522) dan INF (-5,741) menolak H0 sehingga tampak stasioner pada spesifikasi dengan tren. Pada selisih pertama, seluruh variabel menolak H0 dengan statistik antara -5,63 sampai -7,69 (nilai kritis -2,88), sehingga semuanya stasioner setelah satu kali diferensiasi.

Uji PP memberi pola yang sama: LIHSG (-2,885), LEMAS (-1,267), dan LWTI (-2,897) tidak stasioner di level terhadap nilai kritis -3,449, sedangkan LKURS (-3,676) dan INF (-9,617) stasioner, dan semua variabel stasioner pada selisih pertama. Uji KPSS pada level menolak kestasioneran untuk LEMAS (0,3545) dan LKURS (0,2817) karena melebihi nilai kritis 0,146, sedangkan LIHSG (0,1263), LWTI (0,1460), dan INF (0,0595) tidak menolak; LWTI tepat berada di batas. Pada selisih pertama KPSS tidak menolak kestasioneran untuk semua variabel (statistik jauh di bawah 0,463).

p-value ADF dari paket tseries mendukung temuan ini: p-value level LIHSG (0,083), LEMAS (0,888), LWTI (0,512), dan LKURS (0,385) lebih besar daripada 0,05 sehingga H0 tidak ditolak, sedangkan INF (0,01) dan seluruh selisih pertama (0,01) menolak H0. Nilai 0,01 adalah batas bawah tabel (p-value sebenarnya lebih kecil). Secara ringkas, LEMAS jelas tidak stasioner di level, LIHSG dan LWTI tidak stasioner menurut ADF dan PP (KPSS berada di batas), LKURS menunjukkan hasil yang bertentangan antaruji yang diselesaikan pada subbab berikut, dan INF stasioner di level pada ketiga uji.

3.7.2 Penentuan Orde Integrasi

Orde integrasi adalah banyaknya selisih yang diperlukan agar suatu deret menjadi stasioner. Fungsi ndiffs menjalankan diferensiasi berulang otomatis untuk ADF, PP, dan KPSS dengan batas maksimum dua kali. Karena LKURS menunjukkan hasil yang tidak seragam, dilakukan pemeriksaan tambahan tanpa tren (spesifikasi drift dan constant), sebab pada spesifikasi bertren uji dapat menolak akar unit semata-mata akibat tren deterministik yang ikut dimodelkan.

Sintaks.

orde <- data.frame(

  Variabel = vars_lvl,

  ADF  = sapply(vars_lvl, function(v) ndiffs(ts_all[, v], alpha = 0.05, test = "adf",  type = "trend", max.d = 2)),

  PP   = sapply(vars_lvl, function(v) ndiffs(ts_all[, v], alpha = 0.05, test = "pp",   type = "trend", max.d = 2)),

  KPSS = sapply(vars_lvl, function(v) ndiffs(ts_all[, v], alpha = 0.05, test = "kpss", type = "trend", max.d = 2))

)

orde$Kesimpulan <- paste0("I(", orde$ADF, ")")

rownames(orde) <- NULL

kable(orde, caption = "Orde Integrasi")
Orde Integrasi
Variabel ADF PP KPSS Kesimpulan
LIHSG 1 1 1 I(1)
LEMAS 1 1 1 I(1)
LWTI 1 1 1 I(1)
LKURS 0 0 1 I(0)
INF 0 0 0 I(0)
# Pemeriksaan tambahan LKURS tanpa tren

kable(rbind(

  uji_adf(ts_all[, "LKURS"], "LKURS", "Level", "drift"),

  data.frame(uji_pp(ts_all[, "LKURS"], "LKURS", "Level", "constant"), Lag = NA)[, c(1:3, 7, 4:6)]

), row.names = FALSE, caption = "Pemeriksaan tambahan LKURS tanpa tren (ADF drift dan PP constant)")
Pemeriksaan tambahan LKURS tanpa tren (ADF drift dan PP constant)
Variabel Tingkat Spesifikasi Lag Statistik CV_5persen Keputusan
LKURS Level drift 3 -0.5813 -2.880 Tidak stasioner
LKURS Level constant NA -0.7652 -2.886 Tidak stasioner
# Penetapan himpunan variabel

VAR_I1 <- c("LIHSG", "LEMAS", "LWTI", "LKURS")  # terintegrasi orde 1

VAR_I0 <- c("INF")                               # stasioner di level

cat("\nVariabel I(1):", VAR_I1, "\nVariabel I(0):", VAR_I0, "\n")
## 
## Variabel I(1): LIHSG LEMAS LWTI LKURS 
## Variabel I(0): INF

Interpretasi. Angka pada kolom ADF, PP, dan KPSS menyatakan banyaknya diferensiasi yang dibutuhkan. LIHSG, LEMAS, dan LWTI bernilai 1 pada ketiga uji sehingga dikategorikan I(1), dan INF bernilai 0 pada ketiganya sehingga I(0). LKURS bernilai 0 pada ADF dan PP tetapi 1 pada KPSS, sehingga ketiga uji tidak sepakat. Pemeriksaan tanpa tren menyelesaikan keraguan ini: ADF level dengan drift menghasilkan statistik -0,5813 (nilai kritis -2,88) dan PP dengan constant menghasilkan -0,7652 (nilai kritis -2,887), keduanya tidak menolak akar unit. Dengan demikian kesan stasioner pada spesifikasi bertren hanya disebabkan oleh tren deterministik, KPSS tetap menolak kestasioneran, dan secara teori kurs lazim diperlakukan sebagai I(1). LKURS ditetapkan sebagai I(1).

Hasil akhirnya, himpunan variabel I(1) adalah LIHSG, LEMAS, LWTI, dan LKURS, sedangkan INF adalah I(0). Orde integrasi yang campuran ini menjadi dasar penggunaan ARDL, karena metode Johansen secara teori hanya sah untuk variabel yang seluruhnya I(1); inflasi karenanya dikeluarkan dari sistem VECM tetapi tetap diikutkan pada ARDL dan uji Toda-Yamamoto.

3.7.3 Uji Kointegrasi

Kointegrasi berarti beberapa deret yang masing-masing tidak stasioner memiliki kombinasi linear yang stasioner, sehingga terdapat hubungan keseimbangan jangka panjang. Dua pendekatan dipakai. Pertama, uji Johansen pada variabel I(1) (LIHSG, LEMAS, LWTI, LKURS) yang menguji rank matriks \(\Pi\) dengan statistik trace (H0: rank \(\le r\)) dan maximum eigenvalue (H0: rank \(= r\)), dimulai dari \(r = 0\) dan berhenti pada kegagalan menolak H0 yang pertama. Kedua, ARDL Bounds Test (Pesaran, Shin, dan Smith, 2001) yang boleh dipakai pada campuran I(0) dan I(1), dengan H0 tidak ada hubungan jangka panjang. Lag VAR level dipilih dengan kriteria SC (minimal 2 karena ca.jo mensyaratkan \(K \ge 2\)), dan lag ARDL dipilih otomatis dengan BIC.

(a) Uji Johansen

Sintaks.

Y4 <- ts_all[, VAR_I1]

 

pilih_lag <- VARselect(Y4, lag.max = 8, type = "const")

cat("===== Pemilihan lag VAR (level) =====\n"); print(pilih_lag$selection)
## ===== Pemilihan lag VAR (level) =====
## AIC(n)  HQ(n)  SC(n) FPE(n) 
##      2      1      1      2
K <- max(2L, as.integer(pilih_lag$selection["SC(n)"]))

cat("Lag K (VAR level) yang dipakai:", K, " -> lag selisih VECM =", K - 1, "\n")
## Lag K (VAR level) yang dipakai: 2  -> lag selisih VECM = 1
jo_tr <- ca.jo(Y4, type = "trace", ecdet = "const", K = K, spec = "transitory")

jo_ei <- ca.jo(Y4, type = "eigen", ecdet = "const", K = K, spec = "transitory")

 

summary(jo_tr)
## 
## ###################### 
## # Johansen-Procedure # 
## ###################### 
## 
## Test type: trace statistic , without linear trend and constant in cointegration 
## 
## Eigenvalues (lambda):
## [1]  0.3114262008533750792  0.1947969505129204526  0.0659098348371753434
## [4]  0.0402402355698875946 -0.0000000000000003763
## 
## Values of teststatistic and critical values of test:
## 
##           test 10pct  5pct  1pct
## r <= 3 |  4.68  7.52  9.24 12.97
## r <= 2 | 12.46 17.85 19.96 24.60
## r <= 1 | 37.15 32.00 34.91 41.07
## r = 0  | 79.69 49.65 53.12 60.16
## 
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
## 
##          LIHSG.l1 LEMAS.l1  LWTI.l1 LKURS.l1 constant
## LIHSG.l1   1.0000  1.00000  1.00000   1.0000   1.0000
## LEMAS.l1  -0.2784  1.00640  0.04994  -0.5680  -0.6123
## LWTI.l1   -0.5224  0.01438 -0.32979   0.2626  -0.3440
## LKURS.l1   1.7233 -6.10972 -0.67594   1.9557  -0.2776
## constant -20.9934 42.40024 -1.37992 -24.3584  -0.0220
## 
## Weights W:
## (This is the loading matrix)
## 
##         LIHSG.l1  LEMAS.l1   LWTI.l1 LKURS.l1              constant
## LIHSG.d  0.03402 -0.032235 -0.060825 -0.02642  0.000000000000022811
## LEMAS.d  0.16224 -0.017253 -0.032291  0.01952 -0.000000000000032059
## LWTI.d   0.29608  0.009218  0.059549 -0.12476 -0.000000000000054055
## LKURS.d -0.01578  0.034780 -0.004481  0.01027  0.000000000000004539
summary(jo_ei)
## 
## ###################### 
## # Johansen-Procedure # 
## ###################### 
## 
## Test type: maximal eigenvalue statistic (lambda max) , without linear trend and constant in cointegration 
## 
## Eigenvalues (lambda):
## [1]  0.3114262008533750792  0.1947969505129204526  0.0659098348371753434
## [4]  0.0402402355698875946 -0.0000000000000003763
## 
## Values of teststatistic and critical values of test:
## 
##           test 10pct  5pct  1pct
## r <= 3 |  4.68  7.52  9.24 12.97
## r <= 2 |  7.77 13.75 15.67 20.20
## r <= 1 | 24.70 19.77 22.00 26.81
## r = 0  | 42.54 25.56 28.14 33.24
## 
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
## 
##          LIHSG.l1 LEMAS.l1  LWTI.l1 LKURS.l1 constant
## LIHSG.l1   1.0000  1.00000  1.00000   1.0000   1.0000
## LEMAS.l1  -0.2784  1.00640  0.04994  -0.5680  -0.6123
## LWTI.l1   -0.5224  0.01438 -0.32979   0.2626  -0.3440
## LKURS.l1   1.7233 -6.10972 -0.67594   1.9557  -0.2776
## constant -20.9934 42.40024 -1.37992 -24.3584  -0.0220
## 
## Weights W:
## (This is the loading matrix)
## 
##         LIHSG.l1  LEMAS.l1   LWTI.l1 LKURS.l1              constant
## LIHSG.d  0.03402 -0.032235 -0.060825 -0.02642  0.000000000000022811
## LEMAS.d  0.16224 -0.017253 -0.032291  0.01952 -0.000000000000032059
## LWTI.d   0.29608  0.009218  0.059549 -0.12476 -0.000000000000054055
## LKURS.d -0.01578  0.034780 -0.004481  0.01027  0.000000000000004539
tabel_rank <- function(jo, nama_stat) {

  tb <- data.frame(H0 = rownames(jo@cval), Stat = jo@teststat,

                   CV5 = jo@cval[, "5pct"], row.names = NULL)

  tb <- tb[nrow(tb):1, ]  # urutan r = 0, r <= 1, ...

  tb$Keputusan <- ifelse(tb$Stat > tb$CV5, "Tolak H0", "Gagal tolak H0")

  names(tb)[2] <- nama_stat

  tb

}

 

tb_tr <- tabel_rank(jo_tr, "Trace")

tb_ei <- tabel_rank(jo_ei, "MaxEigen")

kable(tb_tr, row.names = FALSE, digits = 3, caption = "Ringkasan Rank Johansen (Trace)")
Ringkasan Rank Johansen (Trace)
H0 Trace CV5 Keputusan
r = 0 | 79.691 53.12 Tolak H0
r <= 1 | 37.154 34.91 Tolak H0
r <= 2 | 12.455 19.96 Gagal tolak H0
r <= 3 | 4.682 9.24 Gagal tolak H0
kable(tb_ei, row.names = FALSE, digits = 3, caption = "Ringkasan Rank Johansen (Maximum Eigenvalue)")
Ringkasan Rank Johansen (Maximum Eigenvalue)
H0 MaxEigen CV5 Keputusan
r = 0 | 42.537 28.14 Tolak H0
r <= 1 | 24.699 22.00 Tolak H0
r <= 2 | 7.773 15.67 Gagal tolak H0
r <= 3 | 4.682 9.24 Gagal tolak H0
# jumlah penolakan berturut-turut mulai dari r = 0 = rank kointegrasi

r_trace <- sum(cumsum(tb_tr$Keputusan != "Tolak H0") == 0)

r_eigen <- sum(cumsum(tb_ei$Keputusan != "Tolak H0") == 0)

cat("Rank kointegrasi: Trace =", r_trace, "| MaxEigen =", r_eigen, "\n")
## Rank kointegrasi: Trace = 2 | MaxEigen = 2
r <- r_trace

cat("Rank (r) yang dipakai:", r, "\n")
## Rank (r) yang dipakai: 2

Interpretasi Johansen. Kriteria pemilihan lag menghasilkan AIC = 2, HQ = 1, SC = 1, dan FPE = 2. Dipilih lag berdasarkan SC (satu) namun dinaikkan menjadi \(K = 2\) karena persyaratan minimum ca.jo, sehingga VECM memiliki satu lag selisih. Pada uji trace, statistik untuk \(r = 0\) sebesar 79,69 melebihi nilai kritis 5 persen (53,12) sehingga H0 ditolak; untuk \(r \le 1\) sebesar 37,15 juga melebihi 34,91 sehingga ditolak (dengan selisih yang tipis); untuk \(r \le 2\) sebesar 12,46 lebih kecil daripada 19,96 sehingga H0 tidak ditolak dan prosedur berhenti. Uji maximum eigenvalue memberi kesimpulan yang sama: 42,54 > 28,14 dan 24,70 > 22,00 ditolak, sedangkan 7,77 < 15,67 tidak ditolak. Kedua uji sepakat bahwa terdapat dua vektor kointegrasi (\(r = 2\)) pada sistem empat variabel I(1), artinya ada dua hubungan keseimbangan jangka panjang. Karena penolakan pada \(r \le 1\) relatif tipis, rank ini dikonfirmasi kembali melalui uji stabilitas pada subbab 3.9.4.

(b) ARDL Bounds Test

Sintaks.

formula_ardl <- LIHSG ~ LEMAS + LWTI + LKURS + INF

sel_ardl <- auto_ardl(formula_ardl, data = ts_all,

                      max_order = c(4, 4, 4, 4, 4), selection = "BIC")

 

kable(head(sel_ardl$top_orders, 5), digits = 1,

      caption = "Lima kandidat orde ARDL terbaik (BIC)")
Lima kandidat orde ARDL terbaik (BIC)
LIHSG LEMAS LWTI LKURS INF BIC
1 1 0 1 0 -407.1
1 1 0 1 1 -405.0
1 1 1 1 1 -402.9
1 2 0 1 0 -401.4
2 2 0 1 0 -400.1
orde_ardl <- sel_ardl$best_order

mod_ardl  <- sel_ardl$best_model

cat("Orde ARDL terpilih (LIHSG, LEMAS, LWTI, LKURS, INF):", orde_ardl, "\n")
## Orde ARDL terpilih (LIHSG, LEMAS, LWTI, LKURS, INF): 1 1 0 1 0
# Case 3 = intercept tak terbatas, tanpa tren

bt_f <- bounds_f_test(mod_ardl, case = 3)

bt_t <- bounds_t_test(mod_ardl, case = 3)

cat("\n===== Bounds F-test =====\n"); print(bt_f); print(bt_f$tab)
## 
## ===== Bounds F-test =====
## 
##  Bounds F-test (Wald) for no cointegration
## 
## data:  d(LIHSG) ~ L(LIHSG, 1) + L(LEMAS, 1) + LWTI + L(LKURS, 1) + INF +     d(LEMAS) + d(LKURS)
## F = 3.2, p-value = 0.2
## alternative hypothesis: Possible cointegration
## null values:
##    k    T 
##    4 1000
##   statistic p.value
## F     3.194  0.1547
cat("\n===== Bounds t-test =====\n"); print(bt_t)
## 
## ===== Bounds t-test =====
## 
##  Bounds t-test for no cointegration
## 
## data:  d(LIHSG) ~ L(LIHSG, 1) + L(LEMAS, 1) + LWTI + L(LKURS, 1) + INF +     d(LEMAS) + d(LKURS)
## t = -3.3, p-value = 0.2
## alternative hypothesis: Possible cointegration
## null values:
##    k    T 
##    4 1000

Interpretasi ARDL Bounds Test. Orde ARDL terbaik menurut BIC (-407,1) adalah ARDL(1,1,0,1,0), yang berarti LIHSG memakai satu lag, LEMAS satu lag, LWTI tanpa lag (hanya efek bersamaan), LKURS satu lag, dan INF tanpa lag. Statistik uji F bounds sebesar 3,194 dengan p-value 0,155, dan statistik uji t bounds sebesar -3,3 dengan p-value 0,2. Karena p-value jauh di atas 0,05, H0 tidak adanya hubungan jangka panjang tidak ditolak, sehingga ARDL tidak menemukan kointegrasi. Hasil ini bertentangan dengan Johansen. Perbedaannya dapat dijelaskan oleh asumsi masing-masing metode: ARDL satu persamaan mengasumsikan variabel bebas weakly exogenous terhadap parameter jangka panjang, sedangkan hasil VECM pada subbab 3.8.2 menunjukkan bahwa penyesuaian terhadap vektor kointegrasi pertama justru terjadi pada LEMAS dan LWTI, bukan pada LIHSG. Penjelasan ini masih berupa dugaan yang dapat dibuktikan lebih lanjut dengan uji weak exogeneity. Akibat konflik ini, VECM diposisikan sebagai model utama hubungan jangka panjang, sedangkan ARDL dipakai untuk dinamika jangka pendek.

3.7.4 Penentuan Model Deret Waktu

Pemilihan model mengikuti kaidah berikut: semua variabel I(0) memakai VAR level; semua I(1) dan tidak terkointegrasi memakai VAR pada selisih pertama; semua I(1) dan terkointegrasi memakai VECM; dan campuran I(0) dan I(1) memakai ARDL.

Sintaks.

cat("Variabel I(0):", ifelse(length(VAR_I0) > 0, paste(VAR_I0, collapse = ", "), "-"), "\n")
## Variabel I(0): INF
cat("Variabel I(1):", ifelse(length(VAR_I1) > 0, paste(VAR_I1, collapse = ", "), "-"), "\n")
## Variabel I(1): LIHSG, LEMAS, LWTI, LKURS
if (length(VAR_I0) > 0 && length(VAR_I1) > 0) {

  cat("-> Orde integrasi CAMPURAN: ARDL (bounds test) layak sebagai model utama.\n")

}
## -> Orde integrasi CAMPURAN: ARDL (bounds test) layak sebagai model utama.
if (length(VAR_I1) >= 2) {

  if (r == 0) {

    cat("-> Johansen: TIDAK ada kointegrasi -> gunakan VAR pada selisih pertama.\n")

  } else if (r < length(VAR_I1)) {

    cat("-> Johansen: ada", r, "vektor kointegrasi -> gunakan VECM (rank =", r, ").\n")

  } else {

    cat("-> Rank penuh: seluruh variabel stasioner -> gunakan VAR pada level.\n")

  }

}
## -> Johansen: ada 2 vektor kointegrasi -> gunakan VECM (rank = 2 ).
stopifnot(r >= 1)

Interpretasi. Keluaran menegaskan bahwa orde integrasi bersifat campuran (INF I(0), empat variabel lain I(1)) sehingga ARDL secara metodologis layak dipakai, dan bahwa Johansen menemukan dua vektor kointegrasi sehingga VECM dengan rank dua diterapkan pada empat variabel I(1). Pernyataan “ARDL layak sebagai model utama” pada keluaran hanya berdasarkan orde integrasi; karena bounds test pada subbab 3.7.3 tidak signifikan, ARDL ditempatkan sebagai model pelengkap jangka pendek dan VECM sebagai model hubungan jangka panjang.

3.8 Estimasi Model

3.8.1 Estimasi Model ARDL

Model ARDL(1,1,0,1,0) diestimasi dengan OLS pada bentuk level (UECM). Dari model ini diturunkan koefisien jangka panjang (long-run multipliers) dan model koreksi kesalahan terbatas (ECM) yang memuat koefisien error correction term (ECT).

Sintaks.

summary(mod_ardl)
## 
## Time series regression with "ts" data:
## Start = 2017(2), End = 2026(8)
## 
## Call:
## dynlm::dynlm(formula = full_formula, data = data, start = start, 
##     end = end)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.10593 -0.01949 -0.00039  0.02137  0.08985 
## 
## Coefficients:
##             Estimate Std. Error t value             Pr(>|t|)    
## (Intercept)  1.93306    0.87479    2.21              0.02925 *  
## L(LIHSG, 1)  0.85965    0.04237   20.29 < 0.0000000000000002 ***
## LEMAS        0.30548    0.08647    3.53              0.00061 ***
## L(LEMAS, 1) -0.28454    0.08497   -3.35              0.00112 ** 
## LWTI         0.05359    0.01623    3.30              0.00130 ** 
## LKURS       -0.91333    0.15893   -5.75          0.000000087 ***
## L(LKURS, 1)  0.80057    0.16369    4.89          0.000003560 ***
## INF          0.00293    0.01028    0.29              0.77594    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.0355 on 107 degrees of freedom
## Multiple R-squared:  0.924,  Adjusted R-squared:  0.919 
## F-statistic:  185 on 7 and 107 DF,  p-value: <0.0000000000000002
# Koefisien jangka panjang (long-run multipliers)

lr_ardl <- multipliers(mod_ardl, type = "lr")

kable(lr_ardl, digits = 4, caption = "Koefisien Jangka Panjang ARDL")
Koefisien Jangka Panjang ARDL
Term Estimate Std. Error t value Pr(>|t|)
(Intercept) 13.7729 6.1367 2.2444 0.0269
LEMAS 0.1492 0.1363 1.0945 0.2762
LWTI 0.3818 0.0989 3.8611 0.0002
LKURS -0.8034 0.7360 -1.0915 0.2775
INF 0.0209 0.0732 0.2854 0.7759
# Model koreksi kesalahan (ECM) terbatas

mod_recm <- recm(mod_ardl, case = 3)

summary(mod_recm)
## 
## Time series regression with "zooreg" data:
## Start = Feb 2017, End = Aug 2026
## 
## Call:
## dynlm::dynlm(formula = full_formula, data = data, start = start, 
##     end = end)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.10593 -0.01949 -0.00039  0.02137  0.08985 
## 
## Coefficients:
##             Estimate Std. Error t value    Pr(>|t|)    
## (Intercept)   1.9331     0.4744    4.07 0.000086741 ***
## d(LEMAS)      0.3055     0.0839    3.64     0.00041 ***
## d(LKURS)     -0.9133     0.1479   -6.18 0.000000011 ***
## ect          -0.1404     0.0345   -4.07 0.000088150 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.0348 on 111 degrees of freedom
##   (0 observations deleted due to missingness)
## Multiple R-squared:  0.402,  Adjusted R-squared:  0.385 
## F-statistic: 24.8 on 3 and 111 DF,  p-value: 0.00000000000229

Interpretasi. Model memiliki \(R^2\) sebesar 0,924 dan \(R^2\) terkoreksi 0,919 dengan uji F yang sangat signifikan, artinya model secara keseluruhan menjelaskan sebagian besar variasi LIHSG; namun \(R^2\) yang tinggi pada bentuk level sebagian besar berasal dari lag LIHSG sendiri (koefisien 0,860). Koefisien LEMAS bersamaan (0,305) positif dan signifikan sedangkan lag LEMAS (-0,285) negatif dan signifikan, sehingga efek bersih emas pada level hampir saling meniadakan. Koefisien LKURS bersamaan (-0,913) negatif sedangkan lag-nya (0,801) positif, keduanya signifikan, sehingga pelemahan rupiah menekan IHSG pada bulan yang sama. LWTI (0,054) signifikan positif, dan INF (0,003; p = 0,776) tidak signifikan.

Koefisien jangka panjang menunjukkan hanya LWTI yang signifikan (0,382; p = 0,0002): kenaikan harga minyak 1 persen berasosiasi dengan kenaikan IHSG sekitar 0,38 persen. LEMAS (0,149; p = 0,276), LKURS (-0,803; p = 0,278), dan INF (0,021; p = 0,776) tidak signifikan, terutama karena galat baku jangka panjang yang besar. Model ECM menunjukkan bentuk jangka pendek yang lebih ringkas: kenaikan emas 1 persen menaikkan IHSG sekitar 0,31 persen pada bulan yang sama (p = 0,0004), depresiasi rupiah 1 persen menurunkan IHSG sekitar 0,91 persen (p < 0,001), dan koefisien ECT sebesar -0,1404 bertanda negatif serta signifikan. Namun, karena bounds test tidak menolak H0 (subbab 3.7.3), koefisien ECT ini tidak boleh ditafsirkan sebagai kecepatan koreksi menuju keseimbangan jangka panjang; keabsahan ECT mensyaratkan adanya kointegrasi.

3.8.2 Estimasi Model VAR/VECM

Karena ditemukan dua vektor kointegrasi, VECM diestimasi dengan prosedur Johansen (cajorls). Matriks \(\beta\) memuat vektor kointegrasi, dan koefisien error correction pada setiap persamaan menunjukkan kecepatan penyesuaian. Dengan \(r = 2\), vektor pertama dinormalisasi pada LIHSG dan vektor kedua pada LEMAS.

Sintaks.

vecm_ls <- cajorls(jo_tr, r = r)

 

cat("===== VECM: vektor kointegrasi (beta) =====\n")
## ===== VECM: vektor kointegrasi (beta) =====
print(vecm_ls$beta)
##                             ect1    ect2
## LIHSG.l1  1.00000000000000000000  0.0000
## LEMAS.l1  0.00000000000000002776  1.0000
## LWTI.l1  -0.40603854416083501322  0.4177
## LKURS.l1  0.02585947382167508302 -6.0966
## constant -7.25558914242352948065 49.3400
cat("\n----- Koefisien jangka pendek & ECT per persamaan -----\n")
## 
## ----- Koefisien jangka pendek & ECT per persamaan -----
ringkas_vecm <- summary(vecm_ls$rlm)

for (i in seq_along(ringkas_vecm)) {

  cat("\n>>", names(ringkas_vecm)[i], "\n")

  print(round(ringkas_vecm[[i]]$coefficients, 4))

}
## 
## >> Response LIHSG.d 
##           Estimate Std. Error t value Pr(>|t|)
## ect1        0.0018     0.0380  0.0471   0.9625
## ect2       -0.0419     0.0189 -2.2166   0.0287
## LIHSG.dl1   0.2183     0.1139  1.9174   0.0578
## LEMAS.dl1  -0.1923     0.1108 -1.7354   0.0855
## LWTI.dl1   -0.0211     0.0359 -0.5860   0.5591
## LKURS.dl1  -0.1838     0.2163 -0.8499   0.3973
## 
## >> Response LEMAS.d 
##           Estimate Std. Error t value Pr(>|t|)
## ect1        0.1450     0.0342  4.2335   0.0000
## ect2       -0.0625     0.0171 -3.6665   0.0004
## LIHSG.dl1   0.1224     0.1027  1.1915   0.2361
## LEMAS.dl1  -0.0850     0.1000 -0.8498   0.3973
## LWTI.dl1    0.0656     0.0324  2.0238   0.0455
## LKURS.dl1   0.1240     0.1951  0.6358   0.5262
## 
## >> Response LWTI.d 
##           Estimate Std. Error t value Pr(>|t|)
## ect1        0.3053     0.1124  2.7151   0.0077
## ect2       -0.0732     0.0560 -1.3065   0.1942
## LIHSG.dl1  -0.0699     0.3372 -0.2074   0.8361
## LEMAS.dl1  -0.4240     0.3282 -1.2918   0.1992
## LWTI.dl1    0.0913     0.1064  0.8577   0.3930
## LKURS.dl1  -1.8394     0.6404 -2.8721   0.0049
## 
## >> Response LKURS.d 
##           Estimate Std. Error t value Pr(>|t|)
## ect1        0.0190     0.0182  1.0459   0.2979
## ect2        0.0394     0.0090  4.3539   0.0000
## LIHSG.dl1  -0.0835     0.0545 -1.5329   0.1282
## LEMAS.dl1  -0.0911     0.0530 -1.7171   0.0888
## LWTI.dl1    0.0074     0.0172  0.4285   0.6692
## LKURS.dl1  -0.0220     0.1035 -0.2123   0.8323
# Representasi VAR level dari VECM (dipakai untuk diagnostik, Granger, IRF, FEVD)

vec_est <- vec2var(jo_tr, r = r)

Interpretasi vektor kointegrasi. Vektor pertama dapat ditulis sebagai ECT1 = LIHSG - 0,406 LWTI + 0,026 LKURS - 7,256, yang berarti dalam keseimbangan jangka panjang LIHSG = 0,406 LWTI - 0,026 LKURS + 7,256. Dengan kata lain, hubungan jangka panjang IHSG terutama dikaitkan dengan harga minyak (elastisitas positif sekitar 0,41), sedangkan pengaruh kurs hampir nol. Nilai tersebut searah dengan koefisien jangka panjang ARDL untuk LWTI (0,38). Koefisien LEMAS pada vektor ini bernilai nol karena normalisasi by construction ketika \(r = 2\) (matriks identitas pada dua variabel pertama), sehingga nol tersebut bukan bukti bahwa emas tidak berpengaruh. Vektor kedua, ECT2 = LEMAS + 0,418 LWTI - 6,097 LKURS + 49,34, tidak memuat LIHSG dan merupakan hubungan keseimbangan antarvariabel penjelas (emas, minyak, dan kurs).

Interpretasi koefisien penyesuaian. Pada persamaan LIHSG, ECT1 tidak signifikan (0,0018; p = 0,9625) sedangkan ECT2 negatif dan signifikan (-0,0419; p = 0,0287). Artinya IHSG tidak menyesuaikan diri terhadap hubungan jangka panjang pertama, tetapi merespons penyimpangan dari hubungan kedua. Pada persamaan LEMAS kedua ECT signifikan (ECT1 = 0,1450 dengan p < 0,001; ECT2 = -0,0625 dengan p = 0,0004), pada persamaan LWTI hanya ECT1 yang signifikan (0,3053; p = 0,0077), dan pada persamaan LKURS hanya ECT2 yang signifikan (0,0394; p < 0,001). Dengan demikian penyesuaian terhadap hubungan pertama dilakukan oleh LEMAS dan LWTI, bukan oleh LIHSG. Pada koefisien jangka pendek, LIHSG dipengaruhi lag-nya sendiri secara marginal (0,2183; p = 0,058) dan lag LEMAS secara marginal negatif (-0,1923; p = 0,086), sementara pengaruh lag LWTI dan LKURS tidak signifikan; pada persamaan LWTI, lag LKURS berpengaruh negatif signifikan (-1,8394; p = 0,0049).

3.9 Pengujian dan Diagnostik Model

3.9.1 Uji Signifikansi Parameter

Pada ARDL, signifikansi diuji dengan uji t (H0: koefisien = 0; tolak bila p-value < 0,05). Karena data deret waktu rentan terhadap autokorelasi dan heteroskedastisitas sisa, ditambahkan galat baku robust Newey-West (HAC) sebagai pembanding. Pada VECM, signifikansi dibaca dari t-value dan p-value setiap koefisien, dengan perhatian khusus pada ECT persamaan LIHSG.

Sintaks.

cat("===== Signifikansi parameter ARDL (OLS) =====\n")
## ===== Signifikansi parameter ARDL (OLS) =====
print(coeftest(mod_ardl))
## 
## t test of coefficients:
## 
##             Estimate Std. Error t value             Pr(>|t|)    
## (Intercept)  1.93306    0.87479    2.21              0.02925 *  
## L(LIHSG, 1)  0.85965    0.04237   20.29 < 0.0000000000000002 ***
## LEMAS        0.30548    0.08647    3.53              0.00061 ***
## L(LEMAS, 1) -0.28454    0.08497   -3.35              0.00112 ** 
## LWTI         0.05359    0.01623    3.30              0.00130 ** 
## LKURS       -0.91333    0.15893   -5.75          0.000000087 ***
## L(LKURS, 1)  0.80057    0.16369    4.89          0.000003560 ***
## INF          0.00293    0.01028    0.29              0.77594    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
cat("\n----- ARDL dengan galat baku HAC Newey-West -----\n")
## 
## ----- ARDL dengan galat baku HAC Newey-West -----
coba(print(coeftest(mod_ardl, vcov. = NeweyWest(mod_ardl, lag = 4, prewhite = FALSE))))
## 
## t test of coefficients:
## 
##             Estimate Std. Error t value             Pr(>|t|)    
## (Intercept)  1.93306    0.60385    3.20               0.0018 ** 
## L(LIHSG, 1)  0.85965    0.04199   20.48 < 0.0000000000000002 ***
## LEMAS        0.30548    0.12180    2.51               0.0136 *  
## L(LEMAS, 1) -0.28454    0.13356   -2.13               0.0354 *  
## LWTI         0.05359    0.01784    3.00               0.0033 ** 
## LKURS       -0.91333    0.11447   -7.98      0.0000000000018 ***
## L(LKURS, 1)  0.80057    0.12133    6.60      0.0000000016378 ***
## INF          0.00293    0.00975    0.30               0.7641    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# VECM: ECT pada persamaan LIHSG

idx_ihsg <- grep("LIHSG", names(ringkas_vecm))[1]

cat("\nECT pada persamaan LIHSG:\n")
## 
## ECT pada persamaan LIHSG:
print(round(ringkas_vecm[[idx_ihsg]]$coefficients[grep("^ect",

      rownames(ringkas_vecm[[idx_ihsg]]$coefficients)), , drop = FALSE], 4))
##      Estimate Std. Error t value Pr(>|t|)
## ect1   0.0018     0.0380  0.0471   0.9625
## ect2  -0.0419     0.0189 -2.2166   0.0287

Interpretasi. Pada uji t biasa, kecuali INF (p = 0,776), seluruh koefisien ARDL signifikan pada taraf 5 persen, bahkan L(LIHSG), LKURS, dan L(LKURS) signifikan pada taraf 0,1 persen. Dengan galat baku HAC Newey-West kesimpulan tidak berubah: LEMAS (p = 0,0136), L(LEMAS) (p = 0,0354), LWTI (p = 0,0033), LKURS, dan L(LKURS) tetap signifikan, sedangkan INF tetap tidak signifikan (p = 0,764). Konsistensi kedua versi menunjukkan bahwa signifikansi koefisien tidak bergantung pada asumsi homoskedastisitas dan bebas autokorelasi, sehingga kesimpulan tentang parameter cukup kokoh. Pada VECM, ECT persamaan LIHSG hanya ECT2 yang signifikan (-0,0419; p = 0,0287), sedangkan ECT1 tidak signifikan (p = 0,9625).

3.9.2 Uji Autokorelasi

Residual yang baik tidak berautokorelasi. Pada ARDL digunakan uji Breusch-Godfrey (orde 12) dan Ljung-Box (lag 12); pada VECM digunakan uji Portmanteau yang disesuaikan dan Breusch-Godfrey multivariat. Hipotesisnya H0: tidak ada autokorelasi, dan model dianggap baik bila p-value > 0,05.

Sintaks.

res_a <- as.numeric(residuals(mod_ardl))

 

cat("[ARDL] Breusch-Godfrey LM (orde 12):\n"); coba(print(bgtest(mod_ardl, order = 12)))
## [ARDL] Breusch-Godfrey LM (orde 12):
## 
##  Breusch-Godfrey test for serial correlation of order up to 12
## 
## data:  mod_ardl
## LM test = 23, df = 12, p-value = 0.03
cat("\n[ARDL] Ljung-Box (lag 12):\n");          print(Box.test(res_a, lag = 12, type = "Ljung-Box"))
## 
## [ARDL] Ljung-Box (lag 12):
## 
##  Box-Ljung test
## 
## data:  res_a
## X-squared = 22, df = 12, p-value = 0.03
cat("\n[VECM] Portmanteau (adjusted, lag 12):\n")
## 
## [VECM] Portmanteau (adjusted, lag 12):
coba(print(serial.test(vec_est, lags.pt = 12, type = "PT.adjusted")))
## 
##  Portmanteau Test (adjusted)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 167, df = 164, p-value = 0.4
## $serial
## 
##  Portmanteau Test (adjusted)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 167, df = 164, p-value = 0.4
cat("\n[VECM] Breusch-Godfrey LM (lag 6):\n")
## 
## [VECM] Breusch-Godfrey LM (lag 6):
coba(print(serial.test(vec_est, lags.bg = 6, type = "BG")))
## 
##  Breusch-Godfrey LM test
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 94, df = 96, p-value = 0.5
## $serial
## 
##  Breusch-Godfrey LM test
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 94, df = 96, p-value = 0.5

Interpretasi. Pada ARDL, uji Breusch-Godfrey (LM = 23; p = 0,03) dan Ljung-Box (p = 0,03) sama-sama menolak H0, sehingga terdapat autokorelasi pada residual. Dampaknya, galat baku OLS dapat bias, yang telah dikompensasi dengan galat baku HAC pada subbab 3.9.1. Sebaliknya, VECM lolos uji: Portmanteau (statistik 167 dengan derajat bebas 164; p = 0,4) dan Breusch-Godfrey (statistik 94 dengan derajat bebas 96; p = 0,5) tidak menolak H0, sehingga residual VECM bebas autokorelasi. Hasil ini menjadi salah satu alasan VECM lebih layak sebagai model utama.

3.9.3 Uji Heteroskedastisitas, Normalitas, dan Spesifikasi

Pada ARDL digunakan uji Breusch-Pagan, uji White (regresi kuadrat residual pada nilai fitted dan kuadratnya), dan ARCH-LM yang dilihat melalui uji Ljung-Box residual kuadrat; pada VECM digunakan ARCH-LM multivariat. Hipotesisnya H0: varians galat konstan (homoskedastis). Sebagai pelengkap dijalankan uji normalitas Jarque-Bera, normalitas multivariat pada VECM, dan Ramsey RESET.

Sintaks.

cat("[ARDL] Breusch-Pagan:\n"); coba(print(bptest(mod_ardl)))
## [ARDL] Breusch-Pagan:
## 
##  studentized Breusch-Pagan test
## 
## data:  mod_ardl
## BP = 26, df = 7, p-value = 0.0006
cat("\n[ARDL] White (fitted & fitted^2):\n")
## 
## [ARDL] White (fitted & fitted^2):
e2  <- res_a^2

f   <- as.numeric(fitted(mod_ardl))

aux <- lm(e2 ~ f + I(f^2))

LM  <- length(e2) * summary(aux)$r.squared

cat("White LM =", round(LM, 3), "| p =", round(pchisq(LM, df = 2, lower.tail = FALSE), 4), "\n")
## White LM = 2.394 | p = 0.3021
cat("\n[ARDL] ARCH-LM (lag 12, via Ljung-Box residual kuadrat):\n")
## 
## [ARDL] ARCH-LM (lag 12, via Ljung-Box residual kuadrat):
print(Box.test(res_a^2, lag = 12, type = "Ljung-Box"))
## 
##  Box-Ljung test
## 
## data:  res_a^2
## X-squared = 28, df = 12, p-value = 0.006
cat("\n[VECM] ARCH-LM multivariat (lag 12):\n")
## 
## [VECM] ARCH-LM multivariat (lag 12):
coba(print(arch.test(vec_est, lags.multi = 12, multivariate.only = TRUE)))
## 
##  ARCH (multivariate)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 1020, df = 1200, p-value = 1
## $arch.mul
## 
##  ARCH (multivariate)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 1020, df = 1200, p-value = 1
# Uji normalitas residual & spesifikasi (pelengkap)

cat("\n[ARDL] Jarque-Bera:\n"); print(jarque.bera.test(res_a))
## 
## [ARDL] Jarque-Bera:
## 
##  Jarque Bera Test
## 
## data:  res_a
## X-squared = 12, df = 2, p-value = 0.003
cat("\n[ARDL] Ramsey RESET:\n"); coba(print(resettest(mod_ardl, power = 2:3, type = "fitted")))
## 
## [ARDL] Ramsey RESET:
## 
##  RESET test
## 
## data:  mod_ardl
## RESET = 0.45, df1 = 1, df2 = 106, p-value = 0.5
cat("\n[VECM] Normalitas residual multivariat:\n")
## 
## [VECM] Normalitas residual multivariat:
coba(print(normality.test(vec_est, multivariate.only = TRUE)))
## $JB
## 
##  JB-Test (multivariate)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 139, df = 8, p-value <0.0000000000000002
## 
## 
## $Skewness
## 
##  Skewness only (multivariate)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 25, df = 4, p-value = 0.00005
## 
## 
## $Kurtosis
## 
##  Kurtosis only (multivariate)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 113, df = 4, p-value <0.0000000000000002
## $jb.mul
## $jb.mul$JB
## 
##  JB-Test (multivariate)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 139, df = 8, p-value <0.0000000000000002
## 
## 
## $jb.mul$Skewness
## 
##  Skewness only (multivariate)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 25, df = 4, p-value = 0.00005
## 
## 
## $jb.mul$Kurtosis
## 
##  Kurtosis only (multivariate)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 113, df = 4, p-value <0.0000000000000002

Interpretasi. Hasil uji heteroskedastisitas pada ARDL bersifat campuran. Breusch-Pagan (BP = 26; p = 0,0006) dan ARCH-LM (p = 0,006) menolak H0 sehingga terdapat indikasi heteroskedastisitas dan efek ARCH, sedangkan uji White (LM = 2,394; p = 0,302) tidak menolak H0. Perbedaan ini wajar karena uji White versi ini hanya memakai nilai fitted sebagai regresor sehingga dayanya lebih rendah daripada Breusch-Pagan yang memakai seluruh regresor. Kesimpulan yang aman adalah heteroskedastisitas terdeteksi pada dua dari tiga uji dan telah ditangani dengan galat baku HAC. Pada VECM, ARCH-LM multivariat (statistik 1.020 dengan derajat bebas 1.200; p = 1) tidak menolak H0 sehingga tidak ada masalah heteroskedastisitas.

Normalitas dan spesifikasi. Uji Jarque-Bera pada ARDL (p = 0,003) menolak normalitas, dan pada VECM uji normalitas multivariat menolak H0 (JB p < 0,001) dengan penyumbang terbesar kurtosis (p < 0,001; skewness p = 0,00005), yang menandakan ekor distribusi residual lebih tebal daripada normal, wajar pada data keuangan. Ketidaknormalan ini tidak merusak konsistensi estimasi tetapi membatasi ketepatan inferensi sampel kecil dan sebaiknya dituliskan sebagai keterbatasan. Uji RESET (p = 0,5) tidak menolak kebenaran bentuk fungsional, namun dapat muncul peringatan panjang objek akibat objek dynlm, sehingga hasil ini tidak dijadikan dasar utama kesimpulan.

3.9.4 Uji Stabilitas Model

Pada ARDL stabilitas dilihat dari CUSUM dan CUSUMSQ residual rekursif: model stabil bila kurva berada di dalam pita kepercayaan 5 persen. Pada VECM dihitung modulus akar karakteristik matriks pendamping: dari \(n\) variabel dan rank \(r\) harus ada tepat \((n - r)\) akar bernilai satu, dan akar lainnya harus berada di dalam lingkaran satuan.

Sintaks.

# (a) ARDL: CUSUM dan CUSUMSQ

coba({

  Xm  <- model.matrix(mod_ardl)

  yv  <- as.numeric(model.response(model.frame(mod_ardl)))

  dfc <- data.frame(y = yv, Xm[, -1, drop = FALSE])

  colnames(dfc) <- c("y", make.names(colnames(Xm)[-1]))

 

  cus <- efp(y ~ ., data = dfc, type = "Rec-CUSUM")

  cat("[ARDL] Uji CUSUM:\n"); print(sctest(cus))

 

  # CUSUMSQ (pita 5% pendekatan Durbin, 1969)

  w   <- recresid(y ~ ., data = dfc)

  m   <- length(w)

  csq <- cumsum(w^2) / sum(w^2)

  c0  <- 1.358 / sqrt(m / 2 - 1)

  tt  <- (1:m) / m

  keluar <- any(csq > tt + c0 | csq < tt - c0)

  cat("[ARDL] CUSUMSQ keluar dari pita 5%? ", ifelse(keluar, "YA (tidak stabil)", "TIDAK (stabil)"), "\n")

 

  par(mfrow = c(1, 2))

  plot(cus, main = "CUSUM ARDL")

  plot(tt, csq, type = "l", lwd = 2, ylim = c(-0.2, 1.2), xlab = "Proporsi sampel",

       ylab = "CUSUMSQ", main = "CUSUMSQ ARDL")

  lines(tt, tt + c0, col = "red", lty = 2); lines(tt, tt - c0, col = "red", lty = 2)

  par(mfrow = c(1, 1))

})
## [ARDL] Uji CUSUM:
## 
##  Recursive CUSUM test
## 
## data:  cus
## S = 0.81, p-value = 0.1
## 
## [ARDL] CUSUMSQ keluar dari pita 5%?  YA (tidak stabil)

# (b) VECM: akar karakteristik matriks pendamping

akar_modulus <- function(Alist) {

  n <- nrow(Alist[[1]]); p <- length(Alist)

  top <- do.call(cbind, Alist)

  M <- if (p > 1) rbind(top, cbind(diag(n * (p - 1)), matrix(0, n * (p - 1), n))) else top

  sort(Mod(eigen(M)$values), decreasing = TRUE)

}

 

akar <- akar_modulus(vec_est$A)

cat("[VECM] Modulus akar karakteristik (terbesar -> terkecil):\n"); print(round(akar, 4))
## [VECM] Modulus akar karakteristik (terbesar -> terkecil):
## [1] 1.0000 1.0000 0.8630 0.4600 0.3827 0.3827 0.2986 0.2986
cat("Jumlah akar ~ 1 (|z| > 0.999):", sum(akar > 0.999),

    "| diharapkan n - r =", length(VAR_I1) - r, "\n")
## Jumlah akar ~ 1 (|z| > 0.999): 2 | diharapkan n - r = 2
cat("Akar terbesar di luar unit root:", round(akar[akar < 0.999][1], 4), "(harus < 1)\n")
## Akar terbesar di luar unit root: 0.863 (harus < 1)
# CUSUM pada VAR level (spesifikasi tak terbatas dari sistem yang sama)

var_lvl <- VAR(Y4, p = K, type = "const")

# Mengatur margin grafik agar tidak terlalu besar dibanding area plot

par(mar = c(3.5, 3.5, 2.5, 1), oma = c(0, 0, 1, 0))

stab_var <- stability(var_lvl, type = "OLS-CUSUM")

plot(stab_var)

Interpretasi. Uji CUSUM pada ARDL menghasilkan S = 0,81 dengan p = 0,1 sehingga H0 kestabilan parameter tidak ditolak pada taraf 5 persen, tetapi kurva CUSUMSQ keluar dari pita kepercayaan sehingga model dinyatakan tidak stabil menurut CUSUMSQ. CUSUMSQ lebih sensitif terhadap perubahan varians residual (misalnya guncangan pandemi), sehingga hasil ini sejalan dengan temuan heteroskedastisitas dan perlu dilaporkan sebagai keterbatasan ARDL. Pada VECM, modulus akar karakteristik adalah 1,000; 1,000; 0,863; 0,460; 0,383; 0,383; 0,299; dan 0,299. Terdapat dua akar bernilai satu, sama dengan \(n - r = 4 - 2 = 2\), dan akar terbesar berikutnya (0,863) berada di dalam lingkaran satuan. Kondisi ini sesuai teori untuk sistem dengan dua vektor kointegrasi, sehingga VECM stabil dan sekaligus mendukung pemilihan rank dua. Pada grafik CUSUM VAR level, proses empiris yang berada di dalam pita 5 persen menandakan parameter konstan.

3.10 Analisis Hubungan Dinamis

3.10.1 Uji Kausalitas Granger

Variabel X dikatakan menyebabkan Y secara Granger apabila nilai lampau X memperbaiki prediksi Y setelah nilai lampau Y dimasukkan (H0: X tidak menyebabkan Y; tolak bila p-value < 0,05). Karena data berorde integrasi campuran dan terkointegrasi, uji utama yang dipakai adalah Toda-Yamamoto: VAR level diestimasi dengan lag \((K + d_{max})\) dan uji Wald chi-kuadrat hanya dikenakan pada \(K\) lag pertama, sehingga valid tanpa memedulikan orde integrasi dan memungkinkan inflasi ikut diuji. Sebagai pembanding dijalankan uji Granger klasik berpasangan pada seri stasioner (selisih log dan inflasi level).

Sintaks.

# (a) Toda-Yamamoto

Y5   <- ts_all[, vars_lvl]

pil5 <- VARselect(Y5, lag.max = 8, type = "const")

K5   <- max(1L, as.integer(pil5$selection["SC(n)"]))

dmax <- 1

var_ty <- VAR(Y5, p = K5 + dmax, type = "const")

cat("Granger (Toda-Yamamoto) | K =", K5, "dmax =", dmax, "\n")
## Granger (Toda-Yamamoto) | K = 1 dmax = 1
hasil_ty <- NULL

for (akibat in vars_lvl) {

  for (sebab in setdiff(vars_lvl, akibat)) {

    hip <- paste0(sebab, ".l", 1:K5, " = 0")

    w <- linearHypothesis(var_ty$varresult[[akibat]], hip, test = "Chisq")

    hasil_ty <- rbind(hasil_ty, data.frame(

      Penyebab = sebab, Akibat = akibat,

      Chisq = round(w$Chisq[2], 4), df = w$Df[2], p_value = round(w[["Pr(>Chisq)"]][2], 4),

      Keputusan = ifelse(w[["Pr(>Chisq)"]][2] < 0.05, "Ada kausalitas", "Tidak ada")))

  }

}

kable(hasil_ty, row.names = FALSE, caption = "Uji Kausalitas Granger Toda-Yamamoto")
Uji Kausalitas Granger Toda-Yamamoto
Penyebab Akibat Chisq df p_value Keputusan
LEMAS LIHSG 4.5366 1 0.0332 Ada kausalitas
LWTI LIHSG 0.8414 1 0.3590 Tidak ada
LKURS LIHSG 0.0519 1 0.8199 Tidak ada
INF LIHSG 2.0815 1 0.1491 Tidak ada
LIHSG LEMAS 5.4987 1 0.0190 Ada kausalitas
LWTI LEMAS 0.1133 1 0.7364 Tidak ada
LKURS LEMAS 5.1032 1 0.0239 Ada kausalitas
INF LEMAS 0.1550 1 0.6938 Tidak ada
LIHSG LWTI 0.4032 1 0.5254 Tidak ada
LEMAS LWTI 1.7759 1 0.1827 Tidak ada
LKURS LWTI 3.6203 1 0.0571 Tidak ada
INF LWTI 0.4292 1 0.5124 Tidak ada
LIHSG LKURS 1.4239 1 0.2328 Tidak ada
LEMAS LKURS 0.9375 1 0.3329 Tidak ada
LWTI LKURS 1.1828 1 0.2768 Tidak ada
INF LKURS 0.0019 1 0.9648 Tidak ada
LIHSG INF 1.3830 1 0.2396 Tidak ada
LEMAS INF 1.5155 1 0.2183 Tidak ada
LWTI INF 0.3941 1 0.5302 Tidak ada
LKURS INF 1.2382 1 0.2658 Tidak ada
# (b) Granger klasik pasangan (seri stasioner)

st <- ts.intersect(diff(ts_all[, "LIHSG"]), diff(ts_all[, "LEMAS"]),

                   diff(ts_all[, "LWTI"]),  diff(ts_all[, "LKURS"]), ts_all[, "INF"])

colnames(st) <- c("dLIHSG", "dLEMAS", "dLWTI", "dLKURS", "INF")

nm <- colnames(st)

 

hasil_gc <- NULL

for (akibat in nm) for (sebab in setdiff(nm, akibat)) {

  g <- grangertest(st[, akibat], st[, sebab], order = K5)

  hasil_gc <- rbind(hasil_gc, data.frame(

    Penyebab = sebab, Akibat = akibat, F = round(g$F[2], 4),

    p_value = round(g[["Pr(>F)"]][2], 4),

    Keputusan = ifelse(g[["Pr(>F)"]][2] < 0.05, "Ada kausalitas", "Tidak ada")))

}

kable(hasil_gc, row.names = FALSE, caption = "Uji Granger Klasik Berpasangan (seri stasioner)")
Uji Granger Klasik Berpasangan (seri stasioner)
Penyebab Akibat F p_value Keputusan
dLEMAS dLIHSG 1.1005 0.2964 Tidak ada
dLWTI dLIHSG 1.3825 0.2422 Tidak ada
dLKURS dLIHSG 1.3821 0.2423 Tidak ada
INF dLIHSG 0.7574 0.3860 Tidak ada
dLIHSG dLEMAS 3.4682 0.0652 Tidak ada
dLWTI dLEMAS 0.0674 0.7957 Tidak ada
dLKURS dLEMAS 4.6355 0.0335 Ada kausalitas
INF dLEMAS 0.5852 0.4459 Tidak ada
dLIHSG dLWTI 1.0799 0.3010 Tidak ada
dLEMAS dLWTI 0.0837 0.7729 Tidak ada
dLKURS dLWTI 2.7620 0.0993 Tidak ada
INF dLWTI 0.0012 0.9720 Tidak ada
dLIHSG dLKURS 0.1247 0.7247 Tidak ada
dLEMAS dLKURS 0.0085 0.9267 Tidak ada
dLWTI dLKURS 8.3264 0.0047 Ada kausalitas
INF dLKURS 0.1153 0.7348 Tidak ada
dLIHSG INF 0.7749 0.3806 Tidak ada
dLEMAS INF 0.8278 0.3649 Tidak ada
dLWTI INF 0.0642 0.8005 Tidak ada
dLKURS INF 0.2088 0.6486 Tidak ada

Interpretasi Toda-Yamamoto. Kriteria SC memilih \(K = 1\) dan \(d_{max} = 1\), sehingga VAR diestimasi dengan dua lag. Dari 20 pasangan, hanya tiga yang signifikan. LEMAS menyebabkan LIHSG secara Granger (\(\chi^2\) = 4,54; p = 0,033), dan sebaliknya LIHSG menyebabkan LEMAS (\(\chi^2\) = 5,50; p = 0,019), sehingga hubungan emas dan IHSG bersifat dua arah. LKURS menyebabkan LEMAS (\(\chi^2\) = 5,10; p = 0,024). Variabel LWTI (p = 0,359), LKURS (p = 0,820), dan INF (p = 0,149) tidak memiliki daya prediksi terhadap LIHSG. Pasangan lain tidak signifikan; LKURS terhadap LWTI mendekati signifikan (p = 0,057).

Interpretasi Granger klasik. Pada seri stasioner (selisih), tidak ada variabel yang menyebabkan IHSG secara Granger (seluruh p > 0,24). Hanya dua hubungan yang signifikan: dLKURS menyebabkan dLEMAS (p = 0,0335) dan dLWTI menyebabkan dLKURS (p = 0,0047). Perbedaan dengan Toda-Yamamoto (yang menemukan emas menyebabkan IHSG) timbul karena uji pada selisih membuang informasi hubungan jangka panjang, sedangkan Toda-Yamamoto bekerja pada level. Kedua hasil dilaporkan apa adanya, dan kausalitas Granger adalah kausalitas prediktif, bukan kausalitas struktural.

3.10.2 Impulse Response Function (IRF)

IRF menggambarkan respons IHSG pada periode-periode berikutnya terhadap kejutan satu simpangan baku pada variabel lain. Digunakan dekomposisi Cholesky sehingga urutan variabel berpengaruh. Urutan dari yang paling eksogen ke yang paling endogen dipilih: LWTI, LEMAS, LKURS, lalu LIHSG, dengan asumsi harga komoditas global ditentukan di luar pasar saham domestik dan IHSG merespons semuanya dalam periode yang sama. Horizon 24 bulan dengan selang kepercayaan 95 persen hasil bootstrap 500 replikasi.

Sintaks.

Y4_ord  <- Y4[, c("LWTI", "LEMAS", "LKURS", "LIHSG")]

jo_ord  <- ca.jo(Y4_ord, type = "trace", ecdet = "const", K = K, spec = "transitory")

vec_irf <- vec2var(jo_ord, r = r)

 

set.seed(123)

shock <- c("LWTI", "LEMAS", "LKURS")

irf_list <- lapply(shock, function(s)

  irf(vec_irf, impulse = s, response = "LIHSG", n.ahead = 24,

      ortho = TRUE, cumulative = FALSE, boot = TRUE, ci = 0.95, runs = 500))

names(irf_list) <- shock

 

# Tabel respons IHSG pada horizon 1, 3, 6, 12, 24 bulan

irf_tab <- sapply(shock, function(s) irf_list[[s]]$irf[[1]][c(2, 4, 7, 13, 25), 1])

rownames(irf_tab) <- paste("Bulan", c(1, 3, 6, 12, 24))

kable(irf_tab, digits = 5, caption = "Respons LIHSG terhadap kejutan satu simpangan baku")
Respons LIHSG terhadap kejutan satu simpangan baku
LWTI LEMAS LKURS
Bulan 1 0.01423 0.00817 -0.01735
Bulan 3 0.00923 0.00347 -0.00995
Bulan 6 0.01260 0.00020 -0.00607
Bulan 12 0.01805 -0.00213 -0.00390
Bulan 24 0.02123 -0.00348 -0.00267
# Grafik IRF

for (s in shock) plot(irf_list[[s]], main = paste("Respon IHSG terhadap shock", s))

Interpretasi. Respons IHSG terhadap kejutan LWTI bernilai positif sepanjang horizon dan cenderung membesar: 0,0142 pada bulan pertama, turun ke 0,0092 pada bulan ketiga, lalu naik kembali menjadi 0,0126 (bulan ke-6), 0,0181 (bulan ke-12), dan 0,0212 (bulan ke-24). Artinya kejutan kenaikan harga minyak sebesar satu simpangan baku meningkatkan IHSG sekitar 1,4 sampai 2,1 persen dan efeknya bersifat persisten (tidak meluruh), sesuai dengan sifat VECM di mana kejutan dapat berdampak permanen. Respons terhadap kejutan LEMAS positif di awal (0,0082) tetapi cepat meluruh ke nol pada bulan ke-6 (0,0002) dan berbalik tipis negatif (-0,0021 pada bulan ke-12 dan -0,0035 pada bulan ke-24). Respons terhadap kejutan LKURS negatif sejak awal (-0,0174) dan makin kecil secara absolut (-0,0100; -0,0061; -0,0039; -0,0027), yang berarti pelemahan rupiah menekan IHSG terutama dalam jangka pendek, dan efeknya mereda seiring waktu. Pada grafik, respons dianggap signifikan hanya jika selang kepercayaan 95 persen (garis putus-putus) tidak memuat nol. Karena urutan Cholesky merupakan asumsi, sebaiknya dilakukan uji kepekaan dengan mengubah urutan variabel dan melaporkan apakah arah respons berubah.

3.10.3 Forecast Error Variance Decomposition (FEVD)

FEVD menguraikan proporsi varians galat peramalan LIHSG pada tiap horizon ke dalam kontribusi kejutan masing-masing variabel, termasuk kejutan LIHSG sendiri.

Sintaks.

fevd_out <- fevd(vec_irf, n.ahead = 24)

 

fevd_tab <- round(100 * fevd_out$LIHSG[c(1, 3, 6, 12, 24), ], 2)

rownames(fevd_tab) <- paste("Bulan", c(1, 3, 6, 12, 24))

kable(fevd_tab, caption = "FEVD LIHSG (dalam persen)")
FEVD LIHSG (dalam persen)
LWTI LEMAS LKURS LIHSG
Bulan 1 12.36 11.09 13.16 63.39
Bulan 3 8.84 4.97 12.12 74.07
Bulan 6 8.24 3.07 9.15 79.55
Bulan 12 13.76 1.96 6.61 77.67
Bulan 24 25.73 1.55 4.40 68.32
plot(fevd_out)

Interpretasi. Pada bulan pertama, kejutan LIHSG sendiri menjelaskan 63,39 persen varians galat peramalan IHSG, sedangkan LWTI, LEMAS, dan LKURS masing-masing menyumbang 12,36; 11,09; dan 13,16 persen. Kontribusi LIHSG sendiri naik hingga 79,55 persen pada bulan ke-6, kemudian turun menjadi 77,67 persen (bulan ke-12) dan 68,32 persen (bulan ke-24). Kontribusi LWTI turun di awal (8,84 persen pada bulan ke-3 dan 8,24 persen pada bulan ke-6) lalu naik tajam menjadi 13,76 persen (bulan ke-12) dan 25,73 persen (bulan ke-24), sehingga minyak menjadi sumber ketidakpastian eksternal yang paling penting dalam jangka panjang. Sebaliknya, kontribusi LEMAS menyusut dari 11,09 persen menjadi 1,55 persen, dan LKURS dari 13,16 persen menjadi 4,40 persen, yang berarti emas dan kurs lebih berperan pada jangka pendek. Temuan ini konsisten dengan IRF dan dengan elastisitas jangka panjang LWTI pada vektor kointegrasi.

3.11 Interpretasi Hasil Penelitian

Subbab ini merangkum angka-angka utama yang menjadi dasar pembahasan: elastisitas jangka panjang dari vektor kointegrasi pertama (negatif dari koefisien \(\beta\) karena persamaannya dinormalisasi pada LIHSG), kecepatan penyesuaian terhadap keseimbangan, serta ringkasan ARDL.

Sintaks.

# (1) Hubungan jangka panjang (VECM)

beta1 <- vecm_ls$beta[, 1]

elast_jp <- -beta1[!grepl("^LIHSG|constant", names(beta1))]

if (r >= 2) elast_jp <- elast_jp[!grepl("^LEMAS", names(elast_jp))]  # LEMAS dipaksa 0 oleh normalisasi

cat("Elastisitas jangka panjang terhadap LIHSG (VECM, vektor 1):\n"); print(round(elast_jp, 4))
## Elastisitas jangka panjang terhadap LIHSG (VECM, vektor 1):
##  LWTI.l1 LKURS.l1 
##   0.4060  -0.0259
cat("Pembacaan: kenaikan 1% variabel X -> IHSG berubah sebesar koefisien (%), ceteris paribus.\n")
## Pembacaan: kenaikan 1% variabel X -> IHSG berubah sebesar koefisien (%), ceteris paribus.
# (2) Kecepatan penyesuaian ke keseimbangan (ECT)

koef_ihsg  <- coef(vecm_ls$rlm)[, grep("LIHSG", colnames(coef(vecm_ls$rlm)))[1]]

alpha_ihsg <- koef_ihsg[grep("^ect", names(koef_ihsg))]

cat("\nKoefisien ECT persamaan LIHSG:", round(alpha_ihsg, 4), "\n")
## 
## Koefisien ECT persamaan LIHSG: 0.0018 -0.0419
alpha_ok <- alpha_ihsg[alpha_ihsg < 0 & alpha_ihsg > -1]

if (length(alpha_ok)) {

  cat("Waktu paruh (bulan) untuk", names(alpha_ok), ":",

      round(log(0.5) / log(1 + alpha_ok), 2), "\n")

}
## Waktu paruh (bulan) untuk ect2 : 16.19
# (3) ARDL: koefisien jangka panjang & ECT

cat("\nKoefisien jangka panjang ARDL:\n"); print(lr_ardl)
## 
## Koefisien jangka panjang ARDL:
##          Term Estimate Std. Error t value  Pr(>|t|)
## 1 (Intercept)  13.7729    6.13667  2.2444 0.0268674
## 2       LEMAS   0.1492    0.13629  1.0945 0.2762001
## 3        LWTI   0.3818    0.09889  3.8611 0.0001936
## 4       LKURS  -0.8034    0.73604 -1.0915 0.2775230
## 5         INF   0.0209    0.07324  0.2854 0.7759155
ect_ardl <- coef(mod_recm)[grep("ect", names(coef(mod_recm)))]

cat("Koefisien ECT ARDL:", round(ect_ardl, 4),

    "| waktu paruh (bulan):", round(log(0.5) / log(1 + ect_ardl), 2), "\n")
## Koefisien ECT ARDL: -0.1404 | waktu paruh (bulan): 4.58

Interpretasi. Elastisitas jangka panjang pada vektor kointegrasi pertama adalah +0,4060 untuk LWTI dan -0,0259 untuk LKURS: kenaikan harga minyak 1 persen berasosiasi dengan kenaikan IHSG sekitar 0,41 persen dalam jangka panjang, sedangkan pengaruh kurs praktis nol. Elastisitas LEMAS sengaja tidak ditampilkan karena pada \(r = 2\) koefisiennya dipaksa nol oleh normalisasi, bukan karena emas tidak berpengaruh. Koefisien ECT pada persamaan LIHSG adalah 0,0018 dan -0,0419; hanya yang kedua bernilai negatif dan berada di antara -1 dan 0 sehingga waktu paruh dihitung untuk ECT2 saja, yaitu 16,19 bulan. Artinya penyimpangan IHSG dari hubungan keseimbangan kedua terkoreksi setengahnya dalam sekitar 16 bulan, atau penyesuaian berlangsung lambat (sekitar 4,2 persen per bulan). Koefisien jangka panjang ARDL memberi gambaran yang searah untuk LWTI (0,38) tetapi lainnya tidak signifikan, dan waktu paruh ECT ARDL (4,58 bulan) tidak digunakan dalam kesimpulan karena bounds test tidak menolak H0 sehingga ECT tersebut tidak valid.

Kesimpulan interpretasi.

  1. Seluruh variabel I(1) kecuali inflasi yang I(0).

  2. Johansen menemukan dua vektor kointegrasi sedangkan ARDL bounds test tidak menemukan kointegrasi, sehingga VECM dijadikan model hubungan jangka panjang.

  3. Harga minyak WTI merupakan penentu jangka panjang IHSG yang paling konsisten (elastisitas sekitar 0,4; kontribusi FEVD 25,7 persen pada bulan ke-24), sementara emas dan kurs berperan terutama dalam jangka pendek.

  4. Inflasi tidak signifikan pada seluruh spesifikasi.

  5. VECM lolos diagnostik autokorelasi, heteroskedastisitas, dan stabilitas, sedangkan ARDL memiliki masalah autokorelasi, heteroskedastisitas, normalitas, dan CUSUMSQ sehingga hanya dijadikan pelengkap jangka pendek.

  6. Keterbatasan yang perlu dicatat meliputi ketidaknormalan residual, urutan Cholesky yang bersifat asumsi, serta konflik antara Johansen dan bounds test.

BAB IV HASIL DAN PEMBAHASAN

Bab ini menyajikan hasil analisis dan pembahasannya sesuai tahapan yang dirancang pada Bab III. Data yang dianalisis adalah 116 observasi bulanan (Januari 2017 sampai Agustus 2026) untuk lima variabel: IHSG, emas futures, minyak WTI futures, kurs JISDOR, dan inflasi M-to-M. Urutan penyajian mengikuti logika keputusan bertahap: karakteristik data, eksplorasi, pra-pemrosesan, uji stasioneritas, uji kointegrasi, estimasi model, diagnostik, analisis hubungan dinamis, dan interpretasi akhir. Setiap subbab terdiri atas sintaks R, keluaran, dan interpretasi.

4.1 Karakteristik Data Penelitian

Karakteristik data diperiksa melalui struktur data, rentang periode, dan statistik deskriptif untuk mengetahui skala, pusat, dan penyebaran setiap variabel sebelum dianalisis lebih lanjut.

Sintaks.

# Struktur dan dimensi dataset

str(data)
## 'data.frame':    116 obs. of  6 variables:
##  $ Periode    : Date, format: "2017-01-01" "2017-02-01" ...
##  $ IHSG       : num  5294 5387 5568 5685 5738 ...
##  $ Emas       : num  1211 1254 1251 1268 1270 ...
##  $ Minyak_WTI : num  52.8 54 50.6 49.3 48.3 ...
##  $ Kurs_JISDOR: num  13343 13347 13321 13327 13321 ...
##  $ Inflasi    : num  0.97 0.23 -0.02 0.09 0.39 0.69 0.22 -0.07 0.13 0.01 ...
dim(data)
## [1] 116   6
names(data)
## [1] "Periode"     "IHSG"        "Emas"        "Minyak_WTI"  "Kurs_JISDOR"
## [6] "Inflasi"
# Periode awal dan akhir

range(data$Periode)
## [1] "2017-01-01" "2026-08-01"
# Ringkasan statistik awal

summary(data)
##     Periode                IHSG           Emas        Minyak_WTI   
##  Min.   :2017-01-01   Min.   :4539   Min.   :1196   Min.   : 18.8  
##  1st Qu.:2019-05-24   1st Qu.:5982   1st Qu.:1397   1st Qu.: 54.9  
##  Median :2021-10-16   Median :6490   Median :1818   Median : 67.0  
##  Mean   :2021-10-16   Mean   :6496   Mean   :2096   Mean   : 66.9  
##  3rd Qu.:2024-03-08   3rd Qu.:7052   3rd Qu.:2227   3rd Qu.: 77.0  
##  Max.   :2026-08-01   Max.   :8647   Max.   :5248   Max.   :114.7  
##   Kurs_JISDOR       Inflasi       
##  Min.   :13319   Min.   :-0.7600  
##  1st Qu.:14173   1st Qu.: 0.0375  
##  Median :14676   Median : 0.1950  
##  Mean   :14994   Mean   : 0.2347  
##  3rd Qu.:15816   3rd Qu.: 0.3900  
##  Max.   :18058   Max.   : 1.6500
statistik_deskriptif <- data %>%

  summarise(

    across(

      c(IHSG, Emas, Minyak_WTI, Kurs_JISDOR, Inflasi),

      list(

        Minimum = ~ min(.x, na.rm = TRUE),

        Maksimum = ~ max(.x, na.rm = TRUE),

        Mean = ~ mean(.x, na.rm = TRUE),

        Median = ~ median(.x, na.rm = TRUE),

        Standar_Deviasi = ~ sd(.x, na.rm = TRUE)

      ),

      .names = "{.col}_{.fn}"

    )

  ) %>%

  pivot_longer(

    cols = everything(),

    names_to = c("Variabel", "Ukuran"),

    names_pattern = "(.+)_(Minimum|Maksimum|Mean|Median|Standar_Deviasi)",

    values_to = "Nilai"

  ) %>%

  pivot_wider(names_from = Ukuran, values_from = Nilai)

 

kable(statistik_deskriptif, digits = 3,

      caption = "Statistik Deskriptif Variabel Penelitian")
Statistik Deskriptif Variabel Penelitian
Variabel Minimum Maksimum Mean Median Standar_Deviasi
IHSG 4538.93 8646.94 6496.471 6489.685 802.625
Emas 1196.20 5247.90 2095.833 1817.650 954.614
Minyak_WTI 18.84 114.67 66.864 67.030 17.030
Kurs_JISDOR 13319.00 18058.00 14993.983 14675.500 1165.391
Inflasi -0.76 1.65 0.235 0.195 0.334
# Koefisien variasi (sd / mean x 100). Inflasi dikecualikan karena rata-ratanya

# mendekati nol sehingga rasio tidak bermakna.

cv_tab <- statistik_deskriptif %>%

  filter(Variabel != "Inflasi") %>%

  transmute(Variabel, CV_persen = Standar_Deviasi / Mean * 100)

kable(cv_tab, digits = 1, caption = "Koefisien Variasi (persen)")
Koefisien Variasi (persen)
Variabel CV_persen
IHSG 12.4
Emas 45.5
Minyak_WTI 25.5
Kurs_JISDOR 7.8

Interpretasi. Data terdiri atas 116 baris dan 6 kolom: satu kolom periode bertipe tanggal dan lima kolom numerik. Rentang periode adalah 1 Januari 2017 sampai 1 Agustus 2026, sesuai dengan periode penelitian, sehingga data layak dianalisis sebagai deret waktu bulanan.

IHSG berkisar dari 4.538,93 (Maret 2020, saat awal pandemi) sampai 8.646,94 (Desember 2025) dengan rata-rata 6.496,47 dan median 6.489,69. Kedua ukuran pusat yang hampir sama menunjukkan distribusi yang relatif simetris. Emas berkisar dari USD 1.196,2 (September 2018) sampai USD 5.247,9 (Februari 2026); rata-rata (2.095,83) yang lebih besar daripada median (1.817,65) menunjukkan kemencengan ke kanan akibat harga yang tinggi pada periode akhir. Minyak WTI berkisar dari USD 18,84 (April 2020) sampai USD 114,67 (Mei 2022) dengan rata-rata 66,86 dan median 67,03. Kurs JISDOR berkisar dari Rp13.319 (Juni 2017) sampai Rp18.058 (Juli 2026) dengan rata-rata 14.993,98 dan median 14.675,50, yang mengindikasikan pelemahan rupiah pada periode akhir. Inflasi bulanan berkisar dari -0,76 persen (Januari 2025) sampai 1,65 persen (Maret 2025) dengan rata-rata 0,235 persen; nilai minimum negatif menunjukkan adanya deflasi bulanan.

Berdasarkan koefisien variasi, emas paling bervariasi relatif terhadap rata-ratanya (sekitar 46 persen), diikuti WTI (sekitar 25 persen), IHSG (sekitar 12 persen), dan kurs (sekitar 8 persen). Standar deviasi yang besar hanya menunjukkan fluktuasi yang lebar dan tidak berarti variabel tersebut lebih berpengaruh terhadap IHSG.

4.2 Exploratory Data Analysis (EDA)

EDA dilakukan untuk melihat pola pergerakan dan hubungan awal antarvariabel. Hasilnya bersifat eksploratif dan belum digunakan untuk menyimpulkan pengaruh atau sebab-akibat.

Sintaks.

data_long <- data %>%

  pivot_longer(

    cols = c(IHSG, Emas, Minyak_WTI, Kurs_JISDOR, Inflasi),

    names_to = "Variabel",

    values_to = "Nilai"

  )

 

ggplot(data_long, aes(x = Periode, y = Nilai)) +

  geom_line(color = "steelblue", linewidth = 0.7) +

  facet_wrap(~ Variabel, scales = "free_y", ncol = 2) +

  labs(title = "Perkembangan Variabel Penelitian", x = "Periode", y = "Nilai") +

  theme_minimal() +

  theme(plot.title = element_text(hjust = 0.5, face = "bold"))
Perkembangan Variabel Penelitian

Perkembangan Variabel Penelitian

data_korelasi <- data %>%

  dplyr::select(IHSG, Emas, Minyak_WTI, Kurs_JISDOR, Inflasi)

 

matriks_korelasi <- cor(data_korelasi, method = "pearson",

                        use = "pairwise.complete.obs")

 

kable(round(matriks_korelasi, 3), caption = "Matriks Korelasi Pearson")
Matriks Korelasi Pearson
IHSG Emas Minyak_WTI Kurs_JISDOR Inflasi
IHSG 1.000 0.561 0.579 0.506 0.071
Emas 0.561 1.000 0.266 0.861 -0.005
Minyak_WTI 0.579 0.266 1.000 0.351 0.111
Kurs_JISDOR 0.506 0.861 0.351 1.000 -0.060
Inflasi 0.071 -0.005 0.111 -0.060 1.000
corrplot(

  matriks_korelasi,

  method = "color", type = "upper",

  addCoef.col = "black", tl.col = "black", tl.srt = 45,

  number.cex = 0.7, title = "Matriks Korelasi Antarvariabel",

  mar = c(0, 0, 2, 0)

)
Matriks Korelasi Antarvariabel

Matriks Korelasi Antarvariabel

Interpretasi. Pada grafik deret waktu, IHSG naik dari sekitar 5.300 pada awal 2017, jatuh tajam ke titik terendah pada Maret 2020, pulih hingga puncak Desember 2025, lalu turun tajam pada paruh pertama 2026 (5.643,19 pada Juni 2026) dan mulai pulih pada Juli sampai Agustus 2026. Emas bergerak naik secara umum dengan percepatan sejak 2024 hingga puncak Februari 2026, kemudian terkoreksi. WTI turun sangat tajam pada awal 2020, naik hingga puncak Mei 2022, bergerak mendatar, lalu melonjak kembali pada Maret sampai April 2026. Kurs cenderung melemah dari sekitar Rp13.300 menjadi sekitar Rp18.000 dengan lonjakan sesaat pada Maret 2020. Inflasi berfluktuasi di sekitar nol tanpa tren jangka panjang yang jelas, dengan lonjakan dan penurunan tajam pada awal 2025.

IHSG, WTI, dan kurs sama-sama mengalami perubahan tajam pada waktu yang berdekatan, yaitu sekitar Maret sampai April 2020 dan paruh pertama 2026. Hal ini menjadi indikasi awal adanya guncangan ekonomi yang terjadi bersamaan, tetapi kesamaan waktu belum membuktikan hubungan sebab-akibat. Tren pada emas dan kurs serta lebar fluktuasi yang berubah sepanjang waktu mengindikasikan data level kemungkinan tidak stasioner dan varians tidak konstan, yang perlu dibuktikan melalui uji formal.

Pada matriks korelasi, IHSG berkorelasi positif dengan kekuatan sedang terhadap WTI (0,579), emas (0,561), dan kurs (0,506), sedangkan korelasi dengan inflasi sangat lemah (0,071). Korelasi emas dan kurs sangat tinggi (0,861), yang mencerminkan kedua variabel sama-sama bertren naik. Korelasi lainnya lemah: emas–WTI 0,266, WTI–kurs 0,351, dan inflasi dengan variabel lain berkisar antara -0,060 dan 0,111. Karena data berbentuk deret waktu, korelasi pada level dapat tinggi semata-mata akibat tren bersama sehingga tidak boleh ditafsirkan sebagai pengaruh. Korelasi positif IHSG dengan kurs, misalnya, tidak dapat dibaca bahwa pelemahan rupiah menaikkan IHSG; keduanya sama-sama bertren naik pada periode pengamatan.

4.3 Pengolahan dan Pra-pemrosesan Data

Pra-pemrosesan menyiapkan data agar sesuai untuk pengujian deret waktu. Hasil tahap ini tidak dengan sendirinya membuktikan kestasioneran; hal tersebut ditentukan pada subbab 4.4.

4.3.1 Penanganan Missing Value

Sintaks.

jumlah_missing <- colSums(is.na(data))

persentase_missing <- colMeans(is.na(data)) * 100

 

tabel_missing <- data.frame(

  Variabel = names(jumlah_missing),

  Jumlah_Missing = as.integer(jumlah_missing),

  Persentase_Missing = as.numeric(persentase_missing)

)

kable(tabel_missing, digits = 2, caption = "Pemeriksaan Missing Value")
Pemeriksaan Missing Value
Variabel Jumlah_Missing Persentase_Missing
Periode 0 0
IHSG 0 0
Emas 0 0
Minyak_WTI 0 0
Kurs_JISDOR 0 0
Inflasi 0 0
# Fungsi penanganan missing value (interpolasi linear + carry nearest)

isi_missing <- function(x) {

  if (all(is.na(x))) return(x)

  if (anyNA(x)) {

    x <- zoo::na.approx(x, na.rm = FALSE)

    x <- zoo::na.locf(x, na.rm = FALSE)

    x <- zoo::na.locf(x, fromLast = TRUE, na.rm = FALSE)

  }

  x

}

 

data_bersih <- data %>%

  mutate(across(c(IHSG, Emas, Minyak_WTI, Kurs_JISDOR, Inflasi), isi_missing))

 

# Pemeriksaan ulang

colSums(is.na(data_bersih))
##     Periode        IHSG        Emas  Minyak_WTI Kurs_JISDOR     Inflasi 
##           0           0           0           0           0           0

Interpretasi. Jumlah dan persentase missing value adalah nol pada seluruh variabel, dan pemeriksaan ulang setelah penanganan tetap nol. Tidak ada nilai yang perlu diinterpolasi sehingga seluruh 116 observasi dipertahankan sebagaimana data aslinya. Hal ini menguntungkan karena interpolasi hanya pengganti nilai yang tidak tersedia dan dapat menambah keteraturan semu pada data.

4.3.2 Penyesuaian Frekuensi Data

Sintaks.

data_bersih <- data_bersih %>% arrange(Periode)

 

periode_lengkap <- seq(from = min(data_bersih$Periode),

                       to = max(data_bersih$Periode), by = "month")

 

data_bersih <- data_bersih %>%

  complete(Periode = periode_lengkap) %>%

  arrange(Periode)

 

nrow(data_bersih)
## [1] 116
range(data_bersih$Periode)
## [1] "2017-01-01" "2026-08-01"
colSums(is.na(data_bersih))
##     Periode        IHSG        Emas  Minyak_WTI Kurs_JISDOR     Inflasi 
##           0           0           0           0           0           0
ts_data <- ts(

  data_bersih %>% dplyr::select(IHSG, Emas, Minyak_WTI, Kurs_JISDOR, Inflasi),

  start = c(2017, 1), frequency = 12

)

 

start(ts_data)
## [1] 2017    1
end(ts_data)
## [1] 2026    8
frequency(ts_data)
## [1] 12

Interpretasi. Setelah pengurutan dan pelengkapan periode, jumlah baris tetap 116, rentang tetap Januari 2017 sampai Agustus 2026, dan tidak ada nilai kosong. Artinya tidak ada bulan yang hilang dan tidak diperlukan agregasi atau perubahan frekuensi. Objek deret waktu dimulai pada 2017 bulan ke-1, berakhir pada 2026 bulan ke-8, dan berfrekuensi 12 (satu siklus tahunan terdiri atas 12 pengamatan bulanan). Data siap ditransformasi.

4.3.3 Transformasi Logaritmik

Transformasi logaritma natural \(Z_t = \ln X_t\) diterapkan pada IHSG, emas, WTI, dan kurs yang bernilai positif. Inflasi tidak ditransformasi karena dapat bernilai nol atau negatif.

Sintaks.

data_log <- data_bersih %>%

  mutate(

    log_IHSG = log(IHSG),

    log_Emas = log(Emas),

    log_Minyak_WTI = log(Minyak_WTI),

    log_Kurs_JISDOR = log(Kurs_JISDOR)

  )

 

head(data_log %>%

       dplyr::select(Periode, log_IHSG, log_Emas, log_Minyak_WTI, log_Kurs_JISDOR, Inflasi))
data_log_long <- data_log %>%

  dplyr::select(Periode, log_IHSG, log_Emas, log_Minyak_WTI, log_Kurs_JISDOR) %>%

  pivot_longer(cols = -Periode, names_to = "Variabel", values_to = "Nilai")

 

ggplot(data_log_long, aes(x = Periode, y = Nilai)) +

  geom_line(color = "darkgreen", linewidth = 0.7) +

  facet_wrap(~ Variabel, scales = "free_y", ncol = 2) +

  labs(title = "Data Setelah Transformasi Logaritmik",

       x = "Periode", y = "Nilai Logaritmik") +

  theme_minimal() +

  theme(plot.title = element_text(hjust = 0.5, face = "bold"))
Data Setelah Transformasi Logaritmik

Data Setelah Transformasi Logaritmik

# Jumlah bulan inflasi negatif (alasan inflasi tidak dilogaritmakan)

sum(data_bersih$Inflasi < 0)
## [1] 26

Interpretasi. Pada observasi pertama, nilai logaritmik IHSG sebesar 8,5743, emas 7,0995, WTI 3,9667, dan kurs 9,4987, sedangkan inflasi tetap pada skala aslinya (0,97). Nilai tersebut bukan lagi poin, USD per troy ounce, USD per barel, atau rupiah per dolar. Grafik memperlihatkan bahwa bentuk pola tidak berubah drastis: tren dan guncangan 2020 masih tampak, tetapi skala fluktuasi pada level yang tinggi menjadi lebih terkendali. Dengan demikian transformasi logaritmik membantu menstabilkan varians tetapi belum menghilangkan tren. Inflasi tidak dilogaritmakan karena terdapat 26 bulan dengan inflasi negatif, sedangkan logaritma natural hanya terdefinisi untuk nilai positif. Keempat variabel logaritmik tidak boleh dibandingkan langsung dengan inflasi dalam satuan maupun besarnya.

4.3.4 Diferensiasi Data

Diferensiasi pertama \(\Delta Z_t = Z_t - Z_{t-1}\) dihitung untuk mengurangi tren.

Sintaks.

data_diff <- data_log %>%

  mutate(

    d_IHSG = c(NA, diff(log_IHSG)),

    d_Emas = c(NA, diff(log_Emas)),

    d_Minyak_WTI = c(NA, diff(log_Minyak_WTI)),

    d_Kurs_JISDOR = c(NA, diff(log_Kurs_JISDOR)),

    d_Inflasi = c(NA, diff(Inflasi))

  )

 

head(data_diff %>%

       dplyr::select(Periode, d_IHSG, d_Emas, d_Minyak_WTI, d_Kurs_JISDOR, d_Inflasi))
data_diff_long <- data_diff %>%

  dplyr::select(Periode, d_IHSG, d_Emas, d_Minyak_WTI, d_Kurs_JISDOR, d_Inflasi) %>%

  pivot_longer(cols = -Periode, names_to = "Variabel", values_to = "Nilai") %>%

  filter(!is.na(Nilai))

 

ggplot(data_diff_long, aes(x = Periode, y = Nilai)) +

  geom_line(color = "firebrick", linewidth = 0.7) +

  facet_wrap(~ Variabel, scales = "free_y", ncol = 2) +

  labs(title = "Data Setelah Diferensiasi Pertama",

       x = "Periode", y = "Nilai Diferensiasi") +

  theme_minimal() +

  theme(plot.title = element_text(hjust = 0.5, face = "bold"))
Data Setelah Diferensiasi Pertama

Data Setelah Diferensiasi Pertama

# Pemeriksaan akhir hasil pra-pemrosesan

hasil_akhir <- data_diff %>%

  dplyr::select(Periode, d_IHSG, d_Emas, d_Minyak_WTI, d_Kurs_JISDOR, d_Inflasi)

 

dim(hasil_akhir)
## [1] 116   6
summary(hasil_akhir)
##     Periode               d_IHSG            d_Emas         d_Minyak_WTI    
##  Min.   :2017-01-01   Min.   :-0.1834   Min.   :-0.1287   Min.   :-0.7819  
##  1st Qu.:2019-05-24   1st Qu.:-0.0122   1st Qu.:-0.0161   1st Qu.:-0.0594  
##  Median :2021-10-16   Median : 0.0061   Median : 0.0131   Median : 0.0150  
##  Mean   :2021-10-16   Mean   : 0.0018   Mean   : 0.0114   Mean   : 0.0042  
##  3rd Qu.:2024-03-08   3rd Qu.: 0.0268   3rd Qu.: 0.0383   3rd Qu.: 0.0648  
##  Max.   :2026-08-01   Max.   : 0.0999   Max.   : 0.1007   Max.   : 0.6333  
##                       NA's   :1         NA's   :1         NA's   :1        
##  d_Kurs_JISDOR       d_Inflasi      
##  Min.   :-0.0768   Min.   :-1.5400  
##  1st Qu.:-0.0056   1st Qu.:-0.2400  
##  Median : 0.0010   Median : 0.0300  
##  Mean   : 0.0025   Mean   :-0.0066  
##  3rd Qu.: 0.0129   3rd Qu.: 0.2000  
##  Max.   : 0.1396   Max.   : 2.1300  
##  NA's   :1         NA's   :1
colSums(is.na(hasil_akhir))
##       Periode        d_IHSG        d_Emas  d_Minyak_WTI d_Kurs_JISDOR 
##             0             1             1             1             1 
##     d_Inflasi 
##             1
sapply(hasil_akhir[-1], function(x) sum(!is.na(x)))
##        d_IHSG        d_Emas  d_Minyak_WTI d_Kurs_JISDOR     d_Inflasi 
##           115           115           115           115           115

Interpretasi. Pengamatan pertama bernilai NA karena tidak memiliki periode sebelumnya sehingga diperoleh 115 observasi valid per variabel; NA ini konsekuensi perhitungan, bukan data yang hilang. Untuk empat variabel logaritmik, hasil diferensiasi dibaca sebagai perubahan relatif bulanan (misalnya 0,0173 pada IHSG Februari 2017 berarti naik sekitar 1,7 persen), sedangkan d_Inflasi dibaca dalam poin persentase. Rata-rata perubahan bulanan adalah sekitar 0,0018 untuk IHSG (simpangan baku 0,0444), 0,0114 untuk emas (0,0420), 0,0042 untuk WTI (0,1348), 0,0025 untuk kurs (0,0226), dan -0,0066 poin untuk inflasi (0,4414). WTI memiliki fluktuasi perubahan terbesar.

Setelah diferensiasi, seluruh variabel berfluktuasi di sekitar nol dan tren jangka panjang tidak lagi tampak. Perubahan terbesar terjadi pada Maret sampai Mei 2020: IHSG turun sekitar 18,3 persen (Maret 2020), WTI turun sekitar 78,2 persen (Maret 2020) lalu naik sekitar 63,3 persen (Mei 2020), dan kurs naik sekitar 14,0 persen (Maret 2020). Pada inflasi, perubahan terbesar terjadi pada Maret 2025 (+2,13 poin) dan Mei 2025 (-1,54 poin). Amplitudo yang besar pada periode tersebut menunjukkan varians belum sepenuhnya konstan. Grafik saja belum cukup menyatakan stasioneritas sehingga pengujian formal dilakukan pada subbab berikut.

4.4 Analisis Stasioneritas Data

Pengujian memakai ADF dan PP (H0: terdapat akar unit) serta KPSS (H0: stasioner). Seri dinyatakan stasioner pada ADF/PP bila statistik uji lebih negatif daripada nilai kritis 5 persen, dan pada KPSS bila statistik tidak melebihi nilai kritis. Spesifikasi pada level memakai intercept dan tren, sedangkan pada selisih pertama cukup intercept.

Sintaks.

# Data untuk pemodelan (diambil dari objek `data` yang sudah diinput manual)

df <- data.frame(

  Periode = data$Periode,

  IHSG = data$IHSG,

  EMAS = data$Emas,

  WTI  = data$Minyak_WTI,

  KURS = data$Kurs_JISDOR,

  INF  = data$Inflasi

)

stopifnot(!anyNA(df))

 

df$LIHSG <- log(df$IHSG)

df$LEMAS <- log(df$EMAS)

df$LWTI  <- log(df$WTI)

df$LKURS <- log(df$KURS)

 

vars_lvl <- c("LIHSG", "LEMAS", "LWTI", "LKURS", "INF")

ts_all <- ts(df[, vars_lvl], start = c(2017, 1), frequency = 12)
uji_adf <- function(x, nama, tingkat, tipe) {

  m    <- ur.df(x, type = tipe, selectlags = "AIC", lags = 12)

  tn   <- c(none = "tau1", drift = "tau2", trend = "tau3")[[tipe]]

  stat <- m@teststat[1, tn]

  cv5  <- m@cval[tn, "5pct"]

  lagp <- length(grep("z.diff.lag", rownames(m@testreg$coefficients)))

  data.frame(Variabel = nama, Tingkat = tingkat, Spesifikasi = tipe, Lag = lagp,

             Statistik = round(stat, 4), CV_5persen = cv5,

             Keputusan = ifelse(stat < cv5, "Stasioner", "Tidak stasioner"))

}

 

uji_pp <- function(x, nama, tingkat, model) {

  m    <- ur.pp(x, type = "Z-tau", model = model, lags = "short")

  stat <- as.numeric(m@teststat)

  cv5  <- m@cval[1, "5pct"]

  data.frame(Variabel = nama, Tingkat = tingkat, Spesifikasi = model,

             Statistik = round(stat, 4), CV_5persen = cv5,

             Keputusan = ifelse(stat < cv5, "Stasioner", "Tidak stasioner"))

}

 

uji_kpss <- function(x, nama, tingkat, tipe) {

  m    <- ur.kpss(x, type = tipe, lags = "short")

  stat <- as.numeric(m@teststat)

  cv5  <- m@cval[1, "5pct"]

  data.frame(Variabel = nama, Tingkat = tingkat, Spesifikasi = tipe,

             Statistik = round(stat, 4), CV_5persen = cv5,

             Keputusan = ifelse(stat > cv5, "Tidak stasioner", "Stasioner"))

}

 

d1 <- diff(ts_all)  # selisih pertama

 

hasil_adf <- rbind(

  do.call(rbind, lapply(vars_lvl, function(v) uji_adf(ts_all[, v], v, "Level",  "trend"))),

  do.call(rbind, lapply(vars_lvl, function(v) uji_adf(d1[, v],     v, "Diff-1", "drift")))

)

hasil_pp <- rbind(

  do.call(rbind, lapply(vars_lvl, function(v) uji_pp(ts_all[, v], v, "Level",  "trend"))),

  do.call(rbind, lapply(vars_lvl, function(v) uji_pp(d1[, v],     v, "Diff-1", "constant")))

)

hasil_kpss <- rbind(

  do.call(rbind, lapply(vars_lvl, function(v) uji_kpss(ts_all[, v], v, "Level",  "tau"))),

  do.call(rbind, lapply(vars_lvl, function(v) uji_kpss(d1[, v],     v, "Diff-1", "mu")))

)

 

p_adf <- data.frame(

  Variabel = vars_lvl,

  p_Level = sapply(vars_lvl, function(v) adf.test(ts_all[, v])$p.value),

  p_Diff1 = sapply(vars_lvl, function(v) adf.test(d1[, v])$p.value)

)

 

kable(hasil_adf,  row.names = FALSE, caption = "Uji ADF")
Uji ADF
Variabel Tingkat Spesifikasi Lag Statistik CV_5persen Keputusan
LIHSG Level trend 2 -3.408 -3.43 Tidak stasioner
LEMAS Level trend 1 -1.483 -3.43 Tidak stasioner
LWTI Level trend 2 -2.539 -3.43 Tidak stasioner
LKURS Level trend 1 -3.522 -3.43 Stasioner
INF Level trend 2 -5.741 -3.43 Stasioner
LIHSG Diff-1 drift 1 -6.075 -2.88 Stasioner
LEMAS Diff-1 drift 1 -6.910 -2.88 Stasioner
LWTI Diff-1 drift 3 -6.834 -2.88 Stasioner
LKURS Diff-1 drift 2 -7.689 -2.88 Stasioner
INF Diff-1 drift 10 -5.632 -2.88 Stasioner
kable(hasil_pp,   row.names = FALSE, caption = "Uji Phillips-Perron")
Uji Phillips-Perron
Variabel Tingkat Spesifikasi Statistik CV_5persen Keputusan
LIHSG Level trend -2.885 -3.449 Tidak stasioner
LEMAS Level trend -1.267 -3.449 Tidak stasioner
LWTI Level trend -2.897 -3.449 Tidak stasioner
LKURS Level trend -3.676 -3.449 Stasioner
INF Level trend -9.617 -3.449 Stasioner
LIHSG Diff-1 constant -9.189 -2.887 Stasioner
LEMAS Diff-1 constant -9.886 -2.887 Stasioner
LWTI Diff-1 constant -9.443 -2.887 Stasioner
LKURS Diff-1 constant -11.694 -2.887 Stasioner
INF Diff-1 constant -20.273 -2.887 Stasioner
kable(hasil_kpss, row.names = FALSE, caption = "Uji KPSS")
Uji KPSS
Variabel Tingkat Spesifikasi Statistik CV_5persen Keputusan
LIHSG Level tau 0.1263 0.146 Stasioner
LEMAS Level tau 0.3545 0.146 Tidak stasioner
LWTI Level tau 0.1460 0.146 Stasioner
LKURS Level tau 0.2817 0.146 Tidak stasioner
INF Level tau 0.0595 0.146 Stasioner
LIHSG Diff-1 mu 0.0637 0.463 Stasioner
LEMAS Diff-1 mu 0.2669 0.463 Stasioner
LWTI Diff-1 mu 0.0424 0.463 Stasioner
LKURS Diff-1 mu 0.0625 0.463 Stasioner
INF Diff-1 mu 0.0535 0.463 Stasioner
kable(p_adf, row.names = FALSE, digits = 4, caption = "p-value ADF (tseries::adf.test)")
p-value ADF (tseries::adf.test)
Variabel p_Level p_Diff1
LIHSG 0.0825 0.01
LEMAS 0.8881 0.01
LWTI 0.5124 0.01
LKURS 0.3855 0.01
INF 0.0100 0.01
orde <- data.frame(

  Variabel = vars_lvl,

  ADF  = sapply(vars_lvl, function(v) ndiffs(ts_all[, v], alpha = 0.05, test = "adf",  type = "trend", max.d = 2)),

  PP   = sapply(vars_lvl, function(v) ndiffs(ts_all[, v], alpha = 0.05, test = "pp",   type = "trend", max.d = 2)),

  KPSS = sapply(vars_lvl, function(v) ndiffs(ts_all[, v], alpha = 0.05, test = "kpss", type = "trend", max.d = 2))

)

orde$Kesimpulan <- paste0("I(", orde$ADF, ")")

rownames(orde) <- NULL

kable(orde, caption = "Orde Integrasi")
Orde Integrasi
Variabel ADF PP KPSS Kesimpulan
LIHSG 1 1 1 I(1)
LEMAS 1 1 1 I(1)
LWTI 1 1 1 I(1)
LKURS 0 0 1 I(0)
INF 0 0 0 I(0)
# Pemeriksaan tambahan LKURS tanpa tren

kable(rbind(

  uji_adf(ts_all[, "LKURS"], "LKURS", "Level", "drift"),

  data.frame(uji_pp(ts_all[, "LKURS"], "LKURS", "Level", "constant"), Lag = NA)[, c(1:3, 7, 4:6)]

), row.names = FALSE, caption = "Pemeriksaan tambahan LKURS tanpa tren (ADF drift dan PP constant)")
Pemeriksaan tambahan LKURS tanpa tren (ADF drift dan PP constant)
Variabel Tingkat Spesifikasi Lag Statistik CV_5persen Keputusan
LKURS Level drift 3 -0.5813 -2.880 Tidak stasioner
LKURS Level constant NA -0.7652 -2.886 Tidak stasioner
# Penetapan himpunan variabel

VAR_I1 <- c("LIHSG", "LEMAS", "LWTI", "LKURS")  # terintegrasi orde 1

VAR_I0 <- c("INF")                               # stasioner di level

cat("Variabel I(1):", VAR_I1, "\nVariabel I(0):", VAR_I0, "\n")
## Variabel I(1): LIHSG LEMAS LWTI LKURS 
## Variabel I(0): INF

Interpretasi. Pada ADF level (nilai kritis 5 persen -3,43), LIHSG (-3,408), LEMAS (-1,483), dan LWTI (-2,539) tidak menolak H0 sehingga tidak stasioner; LIHSG berada sangat dekat dengan batas penolakan. LKURS (-3,522) dan INF (-5,741) menolak H0 pada spesifikasi bertren. Pada selisih pertama, seluruh variabel menolak H0 (statistik -5,63 sampai -7,69 terhadap nilai kritis -2,88) sehingga semuanya stasioner setelah satu kali diferensiasi. Uji PP memberi pola yang sama (LIHSG -2,885, LEMAS -1,267, LWTI -2,897 tidak stasioner terhadap nilai kritis -3,449; LKURS -3,676 dan INF -9,617 stasioner; semua stasioner pada selisih pertama). KPSS pada level menolak kestasioneran untuk LEMAS (0,3545) dan LKURS (0,2817) karena melebihi nilai kritis 0,146, sedangkan LIHSG (0,1263), LWTI (0,1460), dan INF (0,0595) tidak menolak, dengan LWTI tepat berada di batas. Pada selisih pertama KPSS tidak menolak kestasioneran untuk semua variabel. P-value ADF dari paket tseries mendukung temuan tersebut: pada level LIHSG (0,083), LEMAS (0,888), dan LWTI (0,512) tidak signifikan, sedangkan INF dan seluruh selisih pertama bernilai 0,01 (batas bawah tabel).

Hasil terhadap LKURS bertentangan antaruji pada spesifikasi bertren (ADF dan PP menolak akar unit, KPSS menolak kestasioneran). Pemeriksaan tanpa tren menyelesaikan keraguan ini: ADF dengan drift (-0,5813 terhadap nilai kritis -2,88) dan PP dengan constant (-0,7652 terhadap nilai kritis -2,887) tidak menolak akar unit. Kesan stasioner pada spesifikasi bertren dengan demikian hanya berasal dari tren deterministik, sehingga LKURS ditetapkan I(1). Fungsi ndiffs memperkuat hasil ini untuk variabel lain: LIHSG, LEMAS, dan LWTI bernilai 1 pada ketiga uji (I(1)) dan INF bernilai 0 (I(0)).

Orde integrasi yang campuran, yaitu empat variabel I(1) dan satu variabel I(0), memiliki dua konsekuensi. Pertama, metode Johansen hanya sah untuk variabel yang seluruhnya I(1), sehingga inflasi dikeluarkan dari sistem VECM. Kedua, ARDL dengan bounds test dapat memuat campuran I(0) dan I(1) sehingga inflasi tetap diikutsertakan pada ARDL dan uji Toda-Yamamoto.

4.5 Analisis Kointegrasi

Kointegrasi diuji dengan dua pendekatan: uji Johansen pada variabel I(1) dan ARDL bounds test pada seluruh variabel.

Uji Johansen

Sintaks.

Y4 <- ts_all[, VAR_I1]

 

pilih_lag <- VARselect(Y4, lag.max = 8, type = "const")

pilih_lag$selection
## AIC(n)  HQ(n)  SC(n) FPE(n) 
##      2      1      1      2
K <- max(2L, as.integer(pilih_lag$selection["SC(n)"]))

cat("Lag K (VAR level) yang dipakai:", K, " -> lag selisih VECM =", K - 1, "\n")
## Lag K (VAR level) yang dipakai: 2  -> lag selisih VECM = 1
jo_tr <- ca.jo(Y4, type = "trace", ecdet = "const", K = K, spec = "transitory")

jo_ei <- ca.jo(Y4, type = "eigen", ecdet = "const", K = K, spec = "transitory")

 

tabel_rank <- function(jo, nama_stat) {

  tb <- data.frame(H0 = rownames(jo@cval), Stat = jo@teststat,

                   CV5 = jo@cval[, "5pct"], row.names = NULL)

  tb <- tb[nrow(tb):1, ]  # urutan r = 0, r <= 1, ...

  tb$Keputusan <- ifelse(tb$Stat > tb$CV5, "Tolak H0", "Gagal tolak H0")

  names(tb)[2] <- nama_stat

  tb

}

 

tb_tr <- tabel_rank(jo_tr, "Trace")

tb_ei <- tabel_rank(jo_ei, "MaxEigen")

kable(tb_tr, row.names = FALSE, digits = 3, caption = "Ringkasan Rank Johansen (Trace)")
Ringkasan Rank Johansen (Trace)
H0 Trace CV5 Keputusan
r = 0 | 79.691 53.12 Tolak H0
r <= 1 | 37.154 34.91 Tolak H0
r <= 2 | 12.455 19.96 Gagal tolak H0
r <= 3 | 4.682 9.24 Gagal tolak H0
kable(tb_ei, row.names = FALSE, digits = 3, caption = "Ringkasan Rank Johansen (Maximum Eigenvalue)")
Ringkasan Rank Johansen (Maximum Eigenvalue)
H0 MaxEigen CV5 Keputusan
r = 0 | 42.537 28.14 Tolak H0
r <= 1 | 24.699 22.00 Tolak H0
r <= 2 | 7.773 15.67 Gagal tolak H0
r <= 3 | 4.682 9.24 Gagal tolak H0
# jumlah penolakan berturut-turut mulai dari r = 0 = rank kointegrasi

r_trace <- sum(cumsum(tb_tr$Keputusan != "Tolak H0") == 0)

r_eigen <- sum(cumsum(tb_ei$Keputusan != "Tolak H0") == 0)

cat("Rank kointegrasi: Trace =", r_trace, "| MaxEigen =", r_eigen, "\n")
## Rank kointegrasi: Trace = 2 | MaxEigen = 2
r <- r_trace

cat("Rank (r) yang dipakai:", r, "\n")
## Rank (r) yang dipakai: 2

Interpretasi. Kriteria pemilihan lag menghasilkan AIC = 2, HQ = 1, SC = 1, dan FPE = 2. Lag dipilih berdasarkan SC (satu) tetapi dinaikkan menjadi K = 2 karena persyaratan minimum ca.jo, sehingga VECM memiliki satu lag selisih. Pada uji trace, statistik untuk r = 0 (79,69) melebihi nilai kritis 5 persen (53,12) sehingga H0 ditolak; untuk r ≤ 1 (37,15) juga melebihi 34,91 sehingga ditolak dengan selisih yang tipis; untuk r ≤ 2 (12,46) lebih kecil daripada 19,96 sehingga H0 tidak ditolak dan prosedur berhenti. Uji maximum eigenvalue memberi kesimpulan yang sama (42,54 > 28,14 dan 24,70 > 22,00 ditolak; 7,77 < 15,67 tidak ditolak). Kedua uji sepakat bahwa terdapat dua vektor kointegrasi (r = 2), artinya ada dua hubungan keseimbangan jangka panjang antara LIHSG, LEMAS, LWTI, dan LKURS. Karena penolakan pada r ≤ 1 relatif tipis, hasil ini perlu dibaca bersama uji stabilitas pada subbab 4.7.4 dan dilaporkan sebagai kesimpulan yang sensitif terhadap spesifikasi.

ARDL Bounds Test

Sintaks.

formula_ardl <- LIHSG ~ LEMAS + LWTI + LKURS + INF

sel_ardl <- auto_ardl(formula_ardl, data = ts_all,

                      max_order = c(4, 4, 4, 4, 4), selection = "BIC")

 

kable(head(sel_ardl$top_orders, 5), digits = 1,

      caption = "Lima kandidat orde ARDL terbaik (BIC)")
Lima kandidat orde ARDL terbaik (BIC)
LIHSG LEMAS LWTI LKURS INF BIC
1 1 0 1 0 -407.1
1 1 0 1 1 -405.0
1 1 1 1 1 -402.9
1 2 0 1 0 -401.4
2 2 0 1 0 -400.1
orde_ardl <- sel_ardl$best_order

mod_ardl  <- sel_ardl$best_model

cat("Orde ARDL terpilih (LIHSG, LEMAS, LWTI, LKURS, INF):", orde_ardl, "\n")
## Orde ARDL terpilih (LIHSG, LEMAS, LWTI, LKURS, INF): 1 1 0 1 0
# Case 3 = intercept tak terbatas, tanpa tren

bt_f <- bounds_f_test(mod_ardl, case = 3)

bt_t <- bounds_t_test(mod_ardl, case = 3)

print(bt_f)
## 
##  Bounds F-test (Wald) for no cointegration
## 
## data:  d(LIHSG) ~ L(LIHSG, 1) + L(LEMAS, 1) + LWTI + L(LKURS, 1) + INF +     d(LEMAS) + d(LKURS)
## F = 3.2, p-value = 0.2
## alternative hypothesis: Possible cointegration
## null values:
##    k    T 
##    4 1000
print(bt_f$tab)
##   statistic p.value
## F     3.194  0.1547
print(bt_t)
## 
##  Bounds t-test for no cointegration
## 
## data:  d(LIHSG) ~ L(LIHSG, 1) + L(LEMAS, 1) + LWTI + L(LKURS, 1) + INF +     d(LEMAS) + d(LKURS)
## t = -3.3, p-value = 0.2
## alternative hypothesis: Possible cointegration
## null values:
##    k    T 
##    4 1000

Interpretasi. Orde ARDL terbaik menurut BIC (-407,1) adalah ARDL(1,1,0,1,0): LIHSG memakai satu lag, LEMAS satu lag, LWTI tanpa lag (hanya efek bersamaan), LKURS satu lag, dan INF tanpa lag. Statistik F bounds sebesar 3,194 (p-value 0,155) dan statistik t bounds sebesar -3,3 (p-value 0,2) berada jauh di atas 0,05, sehingga H0 tidak adanya hubungan jangka panjang tidak ditolak. ARDL dengan demikian tidak menemukan kointegrasi, berbeda dengan Johansen.

Perbedaan ini dapat dijelaskan oleh asumsi masing-masing metode. ARDL satu persamaan mengasumsikan variabel bebas weakly exogenous terhadap parameter jangka panjang, sedangkan VECM pada subbab 4.6.2 menunjukkan bahwa penyesuaian terhadap vektor kointegrasi pertama justru terjadi pada LEMAS dan LWTI, bukan pada LIHSG. Penjelasan ini masih merupakan dugaan karena uji weak exogeneity belum dilakukan. Karena konflik tersebut, VECM diposisikan sebagai model utama hubungan jangka panjang, sedangkan ARDL dipakai untuk dinamika jangka pendek.

4.6 Pemodelan Deret Waktu

Pemilihan model mengikuti kaidah: seluruh variabel I(0) memakai VAR level; seluruh I(1) dan tidak terkointegrasi memakai VAR pada selisih; seluruh I(1) dan terkointegrasi memakai VECM; campuran I(0) dan I(1) memakai ARDL.

Sintaks.

cat("Variabel I(0):", ifelse(length(VAR_I0) > 0, paste(VAR_I0, collapse = ", "), "-"), "\n")
## Variabel I(0): INF
cat("Variabel I(1):", ifelse(length(VAR_I1) > 0, paste(VAR_I1, collapse = ", "), "-"), "\n")
## Variabel I(1): LIHSG, LEMAS, LWTI, LKURS
if (length(VAR_I0) > 0 && length(VAR_I1) > 0) {

  cat("-> Orde integrasi CAMPURAN: ARDL (bounds test) layak sebagai model utama.\n")

}
## -> Orde integrasi CAMPURAN: ARDL (bounds test) layak sebagai model utama.
if (length(VAR_I1) >= 2) {

  if (r == 0) {

    cat("-> Johansen: TIDAK ada kointegrasi -> gunakan VAR pada selisih pertama.\n")

  } else if (r < length(VAR_I1)) {

    cat("-> Johansen: ada", r, "vektor kointegrasi -> gunakan VECM (rank =", r, ").\n")

  } else {

    cat("-> Rank penuh: seluruh variabel stasioner -> gunakan VAR pada level.\n")

  }

}
## -> Johansen: ada 2 vektor kointegrasi -> gunakan VECM (rank = 2 ).
stopifnot(r >= 1)

Interpretasi. Orde integrasi bersifat campuran sehingga ARDL secara metodologis layak dipakai, dan Johansen menemukan dua vektor kointegrasi sehingga VECM dengan rank dua diterapkan pada empat variabel I(1). Pernyataan bahwa ARDL layak sebagai model utama pada keluaran hanya didasarkan pada orde integrasi. Karena bounds test tidak signifikan, ARDL ditempatkan sebagai model pelengkap jangka pendek dan VECM sebagai model hubungan jangka panjang.

4.6.1 Estimasi Model ARDL

Model ARDL(1,1,0,1,0) diestimasi dengan OLS pada bentuk level (UECM), kemudian diturunkan koefisien jangka panjang dan model koreksi kesalahan terbatas (ECM).

Sintaks.

summary(mod_ardl)
## 
## Time series regression with "ts" data:
## Start = 2017(2), End = 2026(8)
## 
## Call:
## dynlm::dynlm(formula = full_formula, data = data, start = start, 
##     end = end)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.10593 -0.01949 -0.00039  0.02137  0.08985 
## 
## Coefficients:
##             Estimate Std. Error t value             Pr(>|t|)    
## (Intercept)  1.93306    0.87479    2.21              0.02925 *  
## L(LIHSG, 1)  0.85965    0.04237   20.29 < 0.0000000000000002 ***
## LEMAS        0.30548    0.08647    3.53              0.00061 ***
## L(LEMAS, 1) -0.28454    0.08497   -3.35              0.00112 ** 
## LWTI         0.05359    0.01623    3.30              0.00130 ** 
## LKURS       -0.91333    0.15893   -5.75          0.000000087 ***
## L(LKURS, 1)  0.80057    0.16369    4.89          0.000003560 ***
## INF          0.00293    0.01028    0.29              0.77594    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.0355 on 107 degrees of freedom
## Multiple R-squared:  0.924,  Adjusted R-squared:  0.919 
## F-statistic:  185 on 7 and 107 DF,  p-value: <0.0000000000000002
# Koefisien jangka panjang (long-run multipliers)

lr_ardl <- multipliers(mod_ardl, type = "lr")

kable(lr_ardl, digits = 4, caption = "Koefisien Jangka Panjang ARDL")
Koefisien Jangka Panjang ARDL
Term Estimate Std. Error t value Pr(>|t|)
(Intercept) 13.7729 6.1367 2.2444 0.0269
LEMAS 0.1492 0.1363 1.0945 0.2762
LWTI 0.3818 0.0989 3.8611 0.0002
LKURS -0.8034 0.7360 -1.0915 0.2775
INF 0.0209 0.0732 0.2854 0.7759
# Model koreksi kesalahan (ECM) terbatas

mod_recm <- recm(mod_ardl, case = 3)

summary(mod_recm)
## 
## Time series regression with "zooreg" data:
## Start = Feb 2017, End = Aug 2026
## 
## Call:
## dynlm::dynlm(formula = full_formula, data = data, start = start, 
##     end = end)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.10593 -0.01949 -0.00039  0.02137  0.08985 
## 
## Coefficients:
##             Estimate Std. Error t value    Pr(>|t|)    
## (Intercept)   1.9331     0.4744    4.07 0.000086741 ***
## d(LEMAS)      0.3055     0.0839    3.64     0.00041 ***
## d(LKURS)     -0.9133     0.1479   -6.18 0.000000011 ***
## ect          -0.1404     0.0345   -4.07 0.000088150 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.0348 on 111 degrees of freedom
##   (0 observations deleted due to missingness)
## Multiple R-squared:  0.402,  Adjusted R-squared:  0.385 
## F-statistic: 24.8 on 3 and 111 DF,  p-value: 0.00000000000229

Interpretasi. Model memiliki \(R^2\) = 0,924 dan \(R^2\) terkoreksi = 0,919 dengan uji F yang sangat signifikan. Namun \(R^2\) yang tinggi pada bentuk level sebagian besar berasal dari lag LIHSG sendiri (koefisien 0,860), sehingga tidak boleh dibaca sebagai bukti kuatnya pengaruh variabel lain. Koefisien LEMAS bersamaan (0,305) positif dan signifikan, sedangkan lag LEMAS (-0,285) negatif dan signifikan, sehingga efek bersih emas pada level hampir saling meniadakan. Koefisien LKURS bersamaan (-0,913) negatif dan lag-nya (0,801) positif, keduanya signifikan, yang berarti pelemahan rupiah menekan IHSG pada bulan yang sama dan sebagian besar tekanan itu berbalik pada bulan berikutnya. LWTI (0,054) signifikan positif, sedangkan INF (0,003; p = 0,776) tidak signifikan.

Koefisien jangka panjang hanya signifikan untuk LWTI (0,382; p = 0,0002): kenaikan harga minyak 1 persen berasosiasi dengan kenaikan IHSG sekitar 0,38 persen. LEMAS (0,149; p = 0,276), LKURS (-0,803; p = 0,278), dan INF (0,021; p = 0,776) tidak signifikan terutama karena galat baku jangka panjang yang besar. Pada ECM, kenaikan emas 1 persen menaikkan IHSG sekitar 0,31 persen pada bulan yang sama (p = 0,0004) dan depresiasi rupiah 1 persen menurunkan IHSG sekitar 0,91 persen (p < 0,001). Koefisien ECT bernilai -0,1404 dan signifikan, tetapi karena bounds test tidak menolak H0 (subbab 4.5), koefisien ini tidak boleh ditafsirkan sebagai kecepatan koreksi menuju keseimbangan jangka panjang.

4.6.2 Estimasi Model VAR/VECM

Karena Johansen menemukan dua vektor kointegrasi, model yang dipakai adalah VECM dengan rank dua (bukan VAR pada selisih). Vektor pertama dinormalisasi pada LIHSG dan vektor kedua pada LEMAS.

Sintaks.

vecm_ls <- cajorls(jo_tr, r = r)

 

cat("===== VECM: vektor kointegrasi (beta) =====\n")
## ===== VECM: vektor kointegrasi (beta) =====
print(vecm_ls$beta)
##                             ect1    ect2
## LIHSG.l1  1.00000000000000000000  0.0000
## LEMAS.l1  0.00000000000000002776  1.0000
## LWTI.l1  -0.40603854416083501322  0.4177
## LKURS.l1  0.02585947382167508302 -6.0966
## constant -7.25558914242352948065 49.3400
cat("\n----- Koefisien jangka pendek & ECT per persamaan -----\n")
## 
## ----- Koefisien jangka pendek & ECT per persamaan -----
ringkas_vecm <- summary(vecm_ls$rlm)

for (i in seq_along(ringkas_vecm)) {

  cat("\n>>", names(ringkas_vecm)[i], "\n")

  print(round(ringkas_vecm[[i]]$coefficients, 4))

}
## 
## >> Response LIHSG.d 
##           Estimate Std. Error t value Pr(>|t|)
## ect1        0.0018     0.0380  0.0471   0.9625
## ect2       -0.0419     0.0189 -2.2166   0.0287
## LIHSG.dl1   0.2183     0.1139  1.9174   0.0578
## LEMAS.dl1  -0.1923     0.1108 -1.7354   0.0855
## LWTI.dl1   -0.0211     0.0359 -0.5860   0.5591
## LKURS.dl1  -0.1838     0.2163 -0.8499   0.3973
## 
## >> Response LEMAS.d 
##           Estimate Std. Error t value Pr(>|t|)
## ect1        0.1450     0.0342  4.2335   0.0000
## ect2       -0.0625     0.0171 -3.6665   0.0004
## LIHSG.dl1   0.1224     0.1027  1.1915   0.2361
## LEMAS.dl1  -0.0850     0.1000 -0.8498   0.3973
## LWTI.dl1    0.0656     0.0324  2.0238   0.0455
## LKURS.dl1   0.1240     0.1951  0.6358   0.5262
## 
## >> Response LWTI.d 
##           Estimate Std. Error t value Pr(>|t|)
## ect1        0.3053     0.1124  2.7151   0.0077
## ect2       -0.0732     0.0560 -1.3065   0.1942
## LIHSG.dl1  -0.0699     0.3372 -0.2074   0.8361
## LEMAS.dl1  -0.4240     0.3282 -1.2918   0.1992
## LWTI.dl1    0.0913     0.1064  0.8577   0.3930
## LKURS.dl1  -1.8394     0.6404 -2.8721   0.0049
## 
## >> Response LKURS.d 
##           Estimate Std. Error t value Pr(>|t|)
## ect1        0.0190     0.0182  1.0459   0.2979
## ect2        0.0394     0.0090  4.3539   0.0000
## LIHSG.dl1  -0.0835     0.0545 -1.5329   0.1282
## LEMAS.dl1  -0.0911     0.0530 -1.7171   0.0888
## LWTI.dl1    0.0074     0.0172  0.4285   0.6692
## LKURS.dl1  -0.0220     0.1035 -0.2123   0.8323
# Representasi VAR level dari VECM (dipakai untuk diagnostik, Granger, IRF, FEVD)

vec_est <- vec2var(jo_tr, r = r)

Interpretasi vektor kointegrasi. Vektor pertama dapat ditulis ECT1 = LIHSG - 0,406 LWTI + 0,026 LKURS - 7,256, sehingga dalam keseimbangan jangka panjang LIHSG = 0,406 LWTI - 0,026 LKURS + 7,256. Hubungan jangka panjang IHSG terutama dikaitkan dengan harga minyak (elastisitas positif sekitar 0,41), sedangkan pengaruh kurs hampir nol. Nilai ini searah dengan koefisien jangka panjang ARDL untuk LWTI (0,38). Koefisien LEMAS pada vektor ini nol karena normalisasi by construction ketika r = 2, sehingga nol tersebut bukan bukti bahwa emas tidak berpengaruh. Vektor kedua, ECT2 = LEMAS + 0,418 LWTI - 6,097 LKURS + 49,34, tidak memuat LIHSG dan merupakan hubungan keseimbangan antarvariabel penjelas (emas, minyak, dan kurs).

Interpretasi koefisien penyesuaian. Pada persamaan LIHSG, ECT1 tidak signifikan (0,0018; p = 0,9625), sedangkan ECT2 negatif dan signifikan (-0,0419; p = 0,0287). IHSG tidak menyesuaikan diri terhadap hubungan jangka panjang pertama tetapi merespons penyimpangan dari hubungan kedua. Pada persamaan LEMAS kedua ECT signifikan (ECT1 = 0,1450; ECT2 = -0,0625), pada persamaan LWTI hanya ECT1 yang signifikan (0,3053; p = 0,0077), dan pada persamaan LKURS hanya ECT2 yang signifikan (0,0394; p < 0,001). Penyesuaian terhadap hubungan pertama dengan demikian dilakukan oleh LEMAS dan LWTI, bukan oleh LIHSG. Pada koefisien jangka pendek, lag LIHSG (0,2183; p = 0,058) dan lag LEMAS (-0,1923; p = 0,086) berpengaruh marginal pada IHSG, sedangkan lag LWTI dan LKURS tidak signifikan; pada persamaan LWTI, lag LKURS berpengaruh negatif signifikan (-1,8394; p = 0,0049).

4.7 Diagnostik Model

Diagnostik dilakukan pada kedua model untuk menilai kelayakan inferensi: signifikansi parameter, autokorelasi, heteroskedastisitas, normalitas, spesifikasi, dan stabilitas.

4.7.1 Uji Signifikansi Parameter

Sintaks.

cat("===== Signifikansi parameter ARDL (OLS) =====\n")
## ===== Signifikansi parameter ARDL (OLS) =====
print(coeftest(mod_ardl))
## 
## t test of coefficients:
## 
##             Estimate Std. Error t value             Pr(>|t|)    
## (Intercept)  1.93306    0.87479    2.21              0.02925 *  
## L(LIHSG, 1)  0.85965    0.04237   20.29 < 0.0000000000000002 ***
## LEMAS        0.30548    0.08647    3.53              0.00061 ***
## L(LEMAS, 1) -0.28454    0.08497   -3.35              0.00112 ** 
## LWTI         0.05359    0.01623    3.30              0.00130 ** 
## LKURS       -0.91333    0.15893   -5.75          0.000000087 ***
## L(LKURS, 1)  0.80057    0.16369    4.89          0.000003560 ***
## INF          0.00293    0.01028    0.29              0.77594    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
cat("\n----- ARDL dengan galat baku HAC Newey-West -----\n")
## 
## ----- ARDL dengan galat baku HAC Newey-West -----
coba(print(coeftest(mod_ardl, vcov. = NeweyWest(mod_ardl, lag = 4, prewhite = FALSE))))
## 
## t test of coefficients:
## 
##             Estimate Std. Error t value             Pr(>|t|)    
## (Intercept)  1.93306    0.60385    3.20               0.0018 ** 
## L(LIHSG, 1)  0.85965    0.04199   20.48 < 0.0000000000000002 ***
## LEMAS        0.30548    0.12180    2.51               0.0136 *  
## L(LEMAS, 1) -0.28454    0.13356   -2.13               0.0354 *  
## LWTI         0.05359    0.01784    3.00               0.0033 ** 
## LKURS       -0.91333    0.11447   -7.98      0.0000000000018 ***
## L(LKURS, 1)  0.80057    0.12133    6.60      0.0000000016378 ***
## INF          0.00293    0.00975    0.30               0.7641    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# VECM: ECT pada persamaan LIHSG

idx_ihsg <- grep("LIHSG", names(ringkas_vecm))[1]

cat("\nECT pada persamaan LIHSG:\n")
## 
## ECT pada persamaan LIHSG:
print(round(ringkas_vecm[[idx_ihsg]]$coefficients[grep("^ect",

      rownames(ringkas_vecm[[idx_ihsg]]$coefficients)), , drop = FALSE], 4))
##      Estimate Std. Error t value Pr(>|t|)
## ect1   0.0018     0.0380  0.0471   0.9625
## ect2  -0.0419     0.0189 -2.2166   0.0287

Interpretasi. Pada uji t biasa, seluruh koefisien ARDL signifikan pada taraf 5 persen kecuali INF (p = 0,776); L(LIHSG), LKURS, dan L(LKURS) bahkan signifikan pada taraf 0,1 persen. Dengan galat baku HAC Newey-West kesimpulan tidak berubah: LEMAS (p = 0,0136), L(LEMAS) (p = 0,0354), LWTI (p = 0,0033), LKURS, dan L(LKURS) tetap signifikan, sedangkan INF tetap tidak signifikan (p = 0,764). Konsistensi kedua versi menunjukkan bahwa kesimpulan tentang parameter tidak bergantung pada asumsi homoskedastisitas dan bebas autokorelasi. Pada VECM, ECT persamaan LIHSG hanya ECT2 yang signifikan (-0,0419; p = 0,0287).

4.7.2 Uji Autokorelasi

Sintaks.

res_a <- as.numeric(residuals(mod_ardl))

 

cat("[ARDL] Breusch-Godfrey LM (orde 12):\n"); coba(print(bgtest(mod_ardl, order = 12)))
## [ARDL] Breusch-Godfrey LM (orde 12):
## 
##  Breusch-Godfrey test for serial correlation of order up to 12
## 
## data:  mod_ardl
## LM test = 23, df = 12, p-value = 0.03
cat("\n[ARDL] Ljung-Box (lag 12):\n");          print(Box.test(res_a, lag = 12, type = "Ljung-Box"))
## 
## [ARDL] Ljung-Box (lag 12):
## 
##  Box-Ljung test
## 
## data:  res_a
## X-squared = 22, df = 12, p-value = 0.03
cat("\n[VECM] Portmanteau (adjusted, lag 12):\n")
## 
## [VECM] Portmanteau (adjusted, lag 12):
coba(print(serial.test(vec_est, lags.pt = 12, type = "PT.adjusted")))
## 
##  Portmanteau Test (adjusted)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 167, df = 164, p-value = 0.4
## $serial
## 
##  Portmanteau Test (adjusted)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 167, df = 164, p-value = 0.4
cat("\n[VECM] Breusch-Godfrey LM (lag 6):\n")
## 
## [VECM] Breusch-Godfrey LM (lag 6):
coba(print(serial.test(vec_est, lags.bg = 6, type = "BG")))
## 
##  Breusch-Godfrey LM test
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 94, df = 96, p-value = 0.5
## $serial
## 
##  Breusch-Godfrey LM test
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 94, df = 96, p-value = 0.5

Interpretasi. Pada ARDL, uji Breusch-Godfrey (LM = 23; p = 0,03) dan Ljung-Box (p = 0,03) sama-sama menolak H0 sehingga residual berautokorelasi. Dampaknya galat baku OLS dapat bias, yang telah dikompensasi dengan galat baku HAC pada subbab 4.7.1. Sebaliknya, VECM lolos uji: Portmanteau (statistik 167, derajat bebas 164; p = 0,4) dan Breusch-Godfrey (statistik 94, derajat bebas 96; p = 0,5) tidak menolak H0 sehingga residual VECM bebas autokorelasi.

4.7.3 Uji Heteroskedastisitas, Normalitas, dan Spesifikasi

Sintaks.

cat("[ARDL] Breusch-Pagan:\n"); coba(print(bptest(mod_ardl)))
## [ARDL] Breusch-Pagan:
## 
##  studentized Breusch-Pagan test
## 
## data:  mod_ardl
## BP = 26, df = 7, p-value = 0.0006
cat("\n[ARDL] White (fitted & fitted^2):\n")
## 
## [ARDL] White (fitted & fitted^2):
e2  <- res_a^2

f   <- as.numeric(fitted(mod_ardl))

aux <- lm(e2 ~ f + I(f^2))

LM  <- length(e2) * summary(aux)$r.squared

cat("White LM =", round(LM, 3), "| p =", round(pchisq(LM, df = 2, lower.tail = FALSE), 4), "\n")
## White LM = 2.394 | p = 0.3021
cat("\n[ARDL] ARCH-LM (lag 12, via Ljung-Box residual kuadrat):\n")
## 
## [ARDL] ARCH-LM (lag 12, via Ljung-Box residual kuadrat):
print(Box.test(res_a^2, lag = 12, type = "Ljung-Box"))
## 
##  Box-Ljung test
## 
## data:  res_a^2
## X-squared = 28, df = 12, p-value = 0.006
cat("\n[VECM] ARCH-LM multivariat (lag 12):\n")
## 
## [VECM] ARCH-LM multivariat (lag 12):
coba(print(arch.test(vec_est, lags.multi = 12, multivariate.only = TRUE)))
## 
##  ARCH (multivariate)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 1020, df = 1200, p-value = 1
## $arch.mul
## 
##  ARCH (multivariate)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 1020, df = 1200, p-value = 1
# Uji normalitas residual & spesifikasi

cat("\n[ARDL] Jarque-Bera:\n"); print(jarque.bera.test(res_a))
## 
## [ARDL] Jarque-Bera:
## 
##  Jarque Bera Test
## 
## data:  res_a
## X-squared = 12, df = 2, p-value = 0.003
cat("\n[ARDL] Ramsey RESET:\n"); coba(print(resettest(mod_ardl, power = 2:3, type = "fitted")))
## 
## [ARDL] Ramsey RESET:
## 
##  RESET test
## 
## data:  mod_ardl
## RESET = 0.45, df1 = 1, df2 = 106, p-value = 0.5
cat("\n[VECM] Normalitas residual multivariat:\n")
## 
## [VECM] Normalitas residual multivariat:
coba(print(normality.test(vec_est, multivariate.only = TRUE)))
## $JB
## 
##  JB-Test (multivariate)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 139, df = 8, p-value <0.0000000000000002
## 
## 
## $Skewness
## 
##  Skewness only (multivariate)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 25, df = 4, p-value = 0.00005
## 
## 
## $Kurtosis
## 
##  Kurtosis only (multivariate)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 113, df = 4, p-value <0.0000000000000002
## $jb.mul
## $jb.mul$JB
## 
##  JB-Test (multivariate)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 139, df = 8, p-value <0.0000000000000002
## 
## 
## $jb.mul$Skewness
## 
##  Skewness only (multivariate)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 25, df = 4, p-value = 0.00005
## 
## 
## $jb.mul$Kurtosis
## 
##  Kurtosis only (multivariate)
## 
## data:  Residuals of VAR object vec_est
## Chi-squared = 113, df = 4, p-value <0.0000000000000002

Interpretasi. Pada ARDL, Breusch-Pagan (p = 0,0006) dan ARCH-LM (p = 0,006) menolak H0 sehingga terdapat indikasi heteroskedastisitas dan efek ARCH, sedangkan uji White (LM = 2,394; p = 0,302) tidak menolak. Perbedaan ini wajar karena uji White versi ini hanya memakai nilai fitted sehingga dayanya lebih rendah daripada Breusch-Pagan. Kesimpulan yang aman adalah heteroskedastisitas terdeteksi pada dua dari tiga uji dan telah ditangani dengan galat baku HAC. Pada VECM, ARCH-LM multivariat (statistik 1.020, derajat bebas 1.200; p = 1) tidak menolak H0 sehingga tidak ada masalah heteroskedastisitas.

Uji Jarque-Bera pada ARDL (p = 0,003) menolak normalitas, dan pada VECM uji normalitas multivariat juga menolak H0 (p < 0,001) dengan penyumbang terbesar kurtosis (p < 0,001; skewness p = 0,00005). Ekor distribusi residual lebih tebal daripada normal, yang wajar pada data keuangan. Ketidaknormalan tidak merusak konsistensi estimasi tetapi membatasi ketepatan inferensi pada sampel kecil dan dicatat sebagai keterbatasan. Uji RESET (p = 0,5) tidak menolak kebenaran bentuk fungsional, tetapi hasil ini tidak dijadikan dasar utama kesimpulan.

4.7.4 Uji Stabilitas Model

Sintaks.

# (a) ARDL: CUSUM dan CUSUMSQ

coba({

  Xm  <- model.matrix(mod_ardl)

  yv  <- as.numeric(model.response(model.frame(mod_ardl)))

  dfc <- data.frame(y = yv, Xm[, -1, drop = FALSE])

  colnames(dfc) <- c("y", make.names(colnames(Xm)[-1]))

 

  cus <- efp(y ~ ., data = dfc, type = "Rec-CUSUM")

  cat("[ARDL] Uji CUSUM:\n"); print(sctest(cus))

 

  # CUSUMSQ (pita 5% pendekatan Durbin, 1969)

  w   <- recresid(y ~ ., data = dfc)

  m   <- length(w)

  csq <- cumsum(w^2) / sum(w^2)

  c0  <- 1.358 / sqrt(m / 2 - 1)

  tt  <- (1:m) / m

  keluar <- any(csq > tt + c0 | csq < tt - c0)

  cat("[ARDL] CUSUMSQ keluar dari pita 5%? ", ifelse(keluar, "YA (tidak stabil)", "TIDAK (stabil)"), "\n")

 

  par(mfrow = c(1, 2))

  plot(cus, main = "CUSUM ARDL")

  plot(tt, csq, type = "l", lwd = 2, ylim = c(-0.2, 1.2), xlab = "Proporsi sampel",

       ylab = "CUSUMSQ", main = "CUSUMSQ ARDL")

  lines(tt, tt + c0, col = "red", lty = 2); lines(tt, tt - c0, col = "red", lty = 2)

  par(mfrow = c(1, 1))

})
## [ARDL] Uji CUSUM:
## 
##  Recursive CUSUM test
## 
## data:  cus
## S = 0.81, p-value = 0.1
## 
## [ARDL] CUSUMSQ keluar dari pita 5%?  YA (tidak stabil)

# (b) VECM: akar karakteristik matriks pendamping

akar_modulus <- function(Alist) {

  n <- nrow(Alist[[1]]); p <- length(Alist)

  top <- do.call(cbind, Alist)

  M <- if (p > 1) rbind(top, cbind(diag(n * (p - 1)), matrix(0, n * (p - 1), n))) else top

  sort(Mod(eigen(M)$values), decreasing = TRUE)

}

 

akar <- akar_modulus(vec_est$A)

cat("[VECM] Modulus akar karakteristik (terbesar -> terkecil):\n"); print(round(akar, 4))
## [VECM] Modulus akar karakteristik (terbesar -> terkecil):
## [1] 1.0000 1.0000 0.8630 0.4600 0.3827 0.3827 0.2986 0.2986
cat("Jumlah akar ~ 1 (|z| > 0.999):", sum(akar > 0.999),

    "| diharapkan n - r =", length(VAR_I1) - r, "\n")
## Jumlah akar ~ 1 (|z| > 0.999): 2 | diharapkan n - r = 2
cat("Akar terbesar di luar unit root:", round(akar[akar < 0.999][1], 4), "(harus < 1)\n")
## Akar terbesar di luar unit root: 0.863 (harus < 1)
# CUSUM pada VAR level

var_lvl <- VAR(Y4, p = K, type = "const")

plot(stability(var_lvl, type = "OLS-CUSUM"))

Interpretasi. Uji CUSUM pada ARDL (S = 0,81; p = 0,1) tidak menolak kestabilan parameter pada taraf 5 persen, tetapi kurva CUSUMSQ keluar dari pita kepercayaan sehingga model dinyatakan tidak stabil menurut CUSUMSQ. CUSUMSQ lebih sensitif terhadap perubahan varians residual (misalnya guncangan pandemi), sejalan dengan temuan heteroskedastisitas, dan dilaporkan sebagai keterbatasan ARDL. Pada VECM, modulus akar karakteristik adalah 1,000; 1,000; 0,863; 0,460; 0,383; 0,383; 0,299; dan 0,299. Dua akar bernilai satu sesuai dengan n - r = 4 - 2 = 2, dan akar terbesar berikutnya (0,863) berada di dalam lingkaran satuan. Kondisi ini sesuai teori untuk sistem dengan dua vektor kointegrasi sehingga VECM stabil dan sekaligus mendukung pemilihan rank dua. Grafik CUSUM VAR level dibaca sebagai pelengkap: proses empiris yang berada di dalam pita 5 persen menandakan parameter konstan.

4.7.5 Ringkasan Diagnostik

ringkasan_diag <- data.frame(

  Aspek = c("Autokorelasi", "Autokorelasi", "Autokorelasi", "Autokorelasi",

            "Heteroskedastisitas", "Heteroskedastisitas", "Heteroskedastisitas", "Heteroskedastisitas",

            "Normalitas", "Normalitas", "Spesifikasi", "Stabilitas", "Stabilitas", "Stabilitas"),

  Uji = c("Breusch-Godfrey (orde 12)", "Ljung-Box (lag 12)",

          "Portmanteau (lag 12)", "Breusch-Godfrey multivariat (lag 6)",

          "Breusch-Pagan", "White (fitted)", "ARCH-LM (via Ljung-Box kuadrat)", "ARCH-LM multivariat (lag 12)",

          "Jarque-Bera", "Jarque-Bera multivariat", "Ramsey RESET",

          "CUSUM", "CUSUMSQ", "Akar karakteristik"),

  Model = c("ARDL", "ARDL", "VECM", "VECM",

            "ARDL", "ARDL", "ARDL", "VECM",

            "ARDL", "VECM", "ARDL",

            "ARDL", "ARDL", "VECM"),

  p_value = c("0,03", "0,03", "0,4", "0,5",

              "0,0006", "0,302", "0,006", "1",

              "0,003", "< 0,001", "0,5",

              "0,1", "-", "-"),

  Hasil = c("Ada autokorelasi", "Ada autokorelasi", "Bebas autokorelasi", "Bebas autokorelasi",

            "Heteroskedastis", "Homoskedastis", "Ada efek ARCH", "Homoskedastis",

            "Tidak normal", "Tidak normal", "Bentuk fungsional sesuai",

            "Stabil", "Keluar pita (tidak stabil)", "Stabil (2 akar satu = n - r)")

)

kable(ringkasan_diag, row.names = FALSE, caption = "Ringkasan Hasil Diagnostik ARDL dan VECM")
Ringkasan Hasil Diagnostik ARDL dan VECM
Aspek Uji Model p_value Hasil
Autokorelasi Breusch-Godfrey (orde 12) ARDL 0,03 Ada autokorelasi
Autokorelasi Ljung-Box (lag 12) ARDL 0,03 Ada autokorelasi
Autokorelasi Portmanteau (lag 12) VECM 0,4 Bebas autokorelasi
Autokorelasi Breusch-Godfrey multivariat (lag 6) VECM 0,5 Bebas autokorelasi
Heteroskedastisitas Breusch-Pagan ARDL 0,0006 Heteroskedastis
Heteroskedastisitas White (fitted) ARDL 0,302 Homoskedastis
Heteroskedastisitas ARCH-LM (via Ljung-Box kuadrat) ARDL 0,006 Ada efek ARCH
Heteroskedastisitas ARCH-LM multivariat (lag 12) VECM 1 Homoskedastis
Normalitas Jarque-Bera ARDL 0,003 Tidak normal
Normalitas Jarque-Bera multivariat VECM < 0,001 Tidak normal
Spesifikasi Ramsey RESET ARDL 0,5 Bentuk fungsional sesuai
Stabilitas CUSUM ARDL 0,1 Stabil
Stabilitas CUSUMSQ ARDL - Keluar pita (tidak stabil)
Stabilitas Akar karakteristik VECM - Stabil (2 akar satu = n - r)

Interpretasi. VECM lolos uji autokorelasi, heteroskedastisitas, dan stabilitas (akar karakteristik), tetapi residualnya tidak berdistribusi normal. ARDL memiliki masalah autokorelasi, heteroskedastisitas, normalitas, dan CUSUMSQ. Hasil ini mendukung keputusan menjadikan VECM sebagai model utama dan ARDL sebagai model pelengkap jangka pendek dengan galat baku yang dikoreksi HAC.

4.8 Analisis Hubungan Dinamis Antarvariabel

4.8.1 Kausalitas Granger

Uji utama adalah Toda-Yamamoto (VAR level dengan lag K + dmax, uji Wald pada K lag pertama), karena valid untuk orde integrasi campuran dan memungkinkan inflasi diuji. Granger klasik pada seri stasioner dipakai sebagai pembanding.

Sintaks.

# (a) Toda-Yamamoto

Y5   <- ts_all[, vars_lvl]

pil5 <- VARselect(Y5, lag.max = 8, type = "const")

K5   <- max(1L, as.integer(pil5$selection["SC(n)"]))

dmax <- 1

var_ty <- VAR(Y5, p = K5 + dmax, type = "const")

cat("Granger (Toda-Yamamoto) | K =", K5, "dmax =", dmax, "\n")
## Granger (Toda-Yamamoto) | K = 1 dmax = 1
hasil_ty <- NULL

for (akibat in vars_lvl) {

  for (sebab in setdiff(vars_lvl, akibat)) {

    hip <- paste0(sebab, ".l", 1:K5, " = 0")

    w <- linearHypothesis(var_ty$varresult[[akibat]], hip, test = "Chisq")

    hasil_ty <- rbind(hasil_ty, data.frame(

      Penyebab = sebab, Akibat = akibat,

      Chisq = round(w$Chisq[2], 4), df = w$Df[2], p_value = round(w[["Pr(>Chisq)"]][2], 4),

      Keputusan = ifelse(w[["Pr(>Chisq)"]][2] < 0.05, "Ada kausalitas", "Tidak ada")))

  }

}

kable(hasil_ty, row.names = FALSE, caption = "Uji Kausalitas Granger Toda-Yamamoto")
Uji Kausalitas Granger Toda-Yamamoto
Penyebab Akibat Chisq df p_value Keputusan
LEMAS LIHSG 4.5366 1 0.0332 Ada kausalitas
LWTI LIHSG 0.8414 1 0.3590 Tidak ada
LKURS LIHSG 0.0519 1 0.8199 Tidak ada
INF LIHSG 2.0815 1 0.1491 Tidak ada
LIHSG LEMAS 5.4987 1 0.0190 Ada kausalitas
LWTI LEMAS 0.1133 1 0.7364 Tidak ada
LKURS LEMAS 5.1032 1 0.0239 Ada kausalitas
INF LEMAS 0.1550 1 0.6938 Tidak ada
LIHSG LWTI 0.4032 1 0.5254 Tidak ada
LEMAS LWTI 1.7759 1 0.1827 Tidak ada
LKURS LWTI 3.6203 1 0.0571 Tidak ada
INF LWTI 0.4292 1 0.5124 Tidak ada
LIHSG LKURS 1.4239 1 0.2328 Tidak ada
LEMAS LKURS 0.9375 1 0.3329 Tidak ada
LWTI LKURS 1.1828 1 0.2768 Tidak ada
INF LKURS 0.0019 1 0.9648 Tidak ada
LIHSG INF 1.3830 1 0.2396 Tidak ada
LEMAS INF 1.5155 1 0.2183 Tidak ada
LWTI INF 0.3941 1 0.5302 Tidak ada
LKURS INF 1.2382 1 0.2658 Tidak ada
# (b) Granger klasik pasangan (seri stasioner)

st <- ts.intersect(diff(ts_all[, "LIHSG"]), diff(ts_all[, "LEMAS"]),

                   diff(ts_all[, "LWTI"]),  diff(ts_all[, "LKURS"]), ts_all[, "INF"])

colnames(st) <- c("dLIHSG", "dLEMAS", "dLWTI", "dLKURS", "INF")

nm <- colnames(st)

 

hasil_gc <- NULL

for (akibat in nm) for (sebab in setdiff(nm, akibat)) {

  g <- grangertest(st[, akibat], st[, sebab], order = K5)

  hasil_gc <- rbind(hasil_gc, data.frame(

    Penyebab = sebab, Akibat = akibat, F = round(g$F[2], 4),

    p_value = round(g[["Pr(>F)"]][2], 4),

    Keputusan = ifelse(g[["Pr(>F)"]][2] < 0.05, "Ada kausalitas", "Tidak ada")))

}

kable(hasil_gc, row.names = FALSE, caption = "Uji Granger Klasik Berpasangan (seri stasioner)")
Uji Granger Klasik Berpasangan (seri stasioner)
Penyebab Akibat F p_value Keputusan
dLEMAS dLIHSG 1.1005 0.2964 Tidak ada
dLWTI dLIHSG 1.3825 0.2422 Tidak ada
dLKURS dLIHSG 1.3821 0.2423 Tidak ada
INF dLIHSG 0.7574 0.3860 Tidak ada
dLIHSG dLEMAS 3.4682 0.0652 Tidak ada
dLWTI dLEMAS 0.0674 0.7957 Tidak ada
dLKURS dLEMAS 4.6355 0.0335 Ada kausalitas
INF dLEMAS 0.5852 0.4459 Tidak ada
dLIHSG dLWTI 1.0799 0.3010 Tidak ada
dLEMAS dLWTI 0.0837 0.7729 Tidak ada
dLKURS dLWTI 2.7620 0.0993 Tidak ada
INF dLWTI 0.0012 0.9720 Tidak ada
dLIHSG dLKURS 0.1247 0.7247 Tidak ada
dLEMAS dLKURS 0.0085 0.9267 Tidak ada
dLWTI dLKURS 8.3264 0.0047 Ada kausalitas
INF dLKURS 0.1153 0.7348 Tidak ada
dLIHSG INF 0.7749 0.3806 Tidak ada
dLEMAS INF 0.8278 0.3649 Tidak ada
dLWTI INF 0.0642 0.8005 Tidak ada
dLKURS INF 0.2088 0.6486 Tidak ada

Interpretasi. Kriteria SC memilih K = 1 dan dmax = 1 sehingga VAR diestimasi dengan dua lag. Pada Toda-Yamamoto, dari 20 pasangan hanya tiga yang signifikan. LEMAS menyebabkan LIHSG secara Granger (\(\chi^2\) = 4,54; p = 0,033) dan sebaliknya LIHSG menyebabkan LEMAS (\(\chi^2\) = 5,50; p = 0,019), sehingga hubungan emas dan IHSG bersifat dua arah. LKURS menyebabkan LEMAS (\(\chi^2\) = 5,10; p = 0,024). LWTI (p = 0,359), LKURS (p = 0,820), dan INF (p = 0,149) tidak memiliki daya prediksi terhadap LIHSG; LKURS terhadap LWTI mendekati signifikan (p = 0,057).

Pada Granger klasik dengan seri stasioner, tidak ada variabel yang menyebabkan IHSG secara Granger (seluruh p > 0,24). Hanya dua hubungan yang signifikan: dLKURS menyebabkan dLEMAS (p = 0,0335) dan dLWTI menyebabkan dLKURS (p = 0,0047). Perbedaan dengan Toda-Yamamoto timbul karena uji pada selisih membuang informasi hubungan jangka panjang, sedangkan Toda-Yamamoto bekerja pada level. Kedua hasil dilaporkan apa adanya.

Perlu dicatat bahwa kausalitas Granger menguji kemampuan prediktif nilai lampau, bukan hubungan struktural, dan tidak menangkap efek yang terjadi pada bulan yang sama. Hal ini menjelaskan mengapa kurs tidak menyebabkan IHSG secara Granger padahal koefisien LKURS bersamaan pada ARDL sangat signifikan (-0,913): efek kurs terhadap IHSG terjadi dalam bulan yang sama sehingga tidak tertangkap oleh uji berbasis lag.

4.8.2 Impulse Response Function (IRF)

IRF memakai dekomposisi Cholesky dengan urutan LWTI, LEMAS, LKURS, LIHSG (dari paling eksogen ke paling endogen), horizon 24 bulan, dan selang kepercayaan 95 persen hasil bootstrap 500 replikasi.

Sintaks.

Y4_ord  <- Y4[, c("LWTI", "LEMAS", "LKURS", "LIHSG")]

jo_ord  <- ca.jo(Y4_ord, type = "trace", ecdet = "const", K = K, spec = "transitory")

vec_irf <- vec2var(jo_ord, r = r)

 

set.seed(123)

shock <- c("LWTI", "LEMAS", "LKURS")

irf_list <- lapply(shock, function(s)

  irf(vec_irf, impulse = s, response = "LIHSG", n.ahead = 24,

      ortho = TRUE, cumulative = FALSE, boot = TRUE, ci = 0.95, runs = 500))

names(irf_list) <- shock

 

# Tabel respons IHSG pada horizon 1, 3, 6, 12, 24 bulan

irf_tab <- sapply(shock, function(s) irf_list[[s]]$irf[[1]][c(2, 4, 7, 13, 25), 1])

rownames(irf_tab) <- paste("Bulan", c(1, 3, 6, 12, 24))

kable(irf_tab, digits = 5, caption = "Respons LIHSG terhadap kejutan satu simpangan baku")
Respons LIHSG terhadap kejutan satu simpangan baku
LWTI LEMAS LKURS
Bulan 1 0.01423 0.00817 -0.01735
Bulan 3 0.00923 0.00347 -0.00995
Bulan 6 0.01260 0.00020 -0.00607
Bulan 12 0.01805 -0.00213 -0.00390
Bulan 24 0.02123 -0.00348 -0.00267
# Grafik IRF

for (s in shock) plot(irf_list[[s]], main = paste("Respon IHSG terhadap shock", s))

Interpretasi. Respons IHSG terhadap kejutan LWTI positif sepanjang horizon dan cenderung membesar: 0,0142 pada bulan pertama, 0,0092 (bulan ke-3), 0,0126 (bulan ke-6), 0,0181 (bulan ke-12), dan 0,0212 (bulan ke-24). Kejutan kenaikan harga minyak satu simpangan baku dengan demikian berasosiasi dengan kenaikan IHSG sekitar 1,4 sampai 2,1 persen yang persisten, sesuai dengan sifat VECM di mana kejutan dapat berdampak permanen. Respons terhadap kejutan LEMAS positif di awal (0,0082), meluruh ke nol pada bulan ke-6 (0,0002), dan berbalik tipis negatif (-0,0021 pada bulan ke-12 dan -0,0035 pada bulan ke-24). Respons terhadap kejutan LKURS negatif sejak awal (-0,0174) dan makin kecil secara absolut (-0,0100; -0,0061; -0,0039; -0,0027), yang berarti pelemahan rupiah menekan IHSG terutama dalam jangka pendek dan efeknya mereda seiring waktu.

Respons dinilai signifikan hanya jika selang kepercayaan 95 persen pada grafik tidak memuat nol, sehingga kesimpulan tentang arah dan besar respons perlu dibaca bersama grafik tersebut. Karena urutan Cholesky merupakan asumsi, hasil ini sebaiknya diuji kepekaannya dengan mengubah urutan variabel.

4.8.3 Forecast Error Variance Decomposition (FEVD)

Sintaks.

fevd_out <- fevd(vec_irf, n.ahead = 24)

 

fevd_tab <- round(100 * fevd_out$LIHSG[c(1, 3, 6, 12, 24), ], 2)

rownames(fevd_tab) <- paste("Bulan", c(1, 3, 6, 12, 24))

kable(fevd_tab, caption = "FEVD LIHSG (dalam persen)")
FEVD LIHSG (dalam persen)
LWTI LEMAS LKURS LIHSG
Bulan 1 12.36 11.09 13.16 63.39
Bulan 3 8.84 4.97 12.12 74.07
Bulan 6 8.24 3.07 9.15 79.55
Bulan 12 13.76 1.96 6.61 77.67
Bulan 24 25.73 1.55 4.40 68.32
plot(fevd_out)

Interpretasi. Pada bulan pertama, kejutan LIHSG sendiri menjelaskan 63,39 persen varians galat peramalan IHSG, sedangkan LWTI, LEMAS, dan LKURS masing-masing menyumbang 12,36; 11,09; dan 13,16 persen. Kontribusi LIHSG sendiri naik hingga 79,55 persen pada bulan ke-6, lalu turun menjadi 77,67 persen (bulan ke-12) dan 68,32 persen (bulan ke-24). Kontribusi LWTI turun di awal (8,84 persen pada bulan ke-3 dan 8,24 persen pada bulan ke-6) lalu naik tajam menjadi 13,76 persen (bulan ke-12) dan 25,73 persen (bulan ke-24), sehingga minyak menjadi sumber ketidakpastian eksternal yang paling penting dalam jangka panjang. Sebaliknya, kontribusi LEMAS menyusut dari 11,09 persen menjadi 1,55 persen dan LKURS dari 13,16 persen menjadi 4,40 persen, yang berarti emas dan kurs lebih berperan pada jangka pendek. Temuan ini konsisten dengan IRF dan dengan elastisitas jangka panjang LWTI pada vektor kointegrasi.

4.9 Interpretasi Pengaruh Faktor Ekonomi Global dan Domestik terhadap IHSG

Subbab ini merangkum seluruh hasil menjadi jawaban atas pengaruh faktor global (emas dan minyak WTI) dan domestik (kurs JISDOR dan inflasi) terhadap IHSG.

Sintaks.

# (1) Hubungan jangka panjang (VECM)

beta1 <- vecm_ls$beta[, 1]

elast_jp <- -beta1[!grepl("^LIHSG|constant", names(beta1))]

if (r >= 2) elast_jp <- elast_jp[!grepl("^LEMAS", names(elast_jp))]  # LEMAS dipaksa 0 oleh normalisasi

cat("Elastisitas jangka panjang terhadap LIHSG (VECM, vektor 1):\n"); print(round(elast_jp, 4))
## Elastisitas jangka panjang terhadap LIHSG (VECM, vektor 1):
##  LWTI.l1 LKURS.l1 
##   0.4060  -0.0259
# (2) Kecepatan penyesuaian ke keseimbangan (ECT)

koef_ihsg  <- coef(vecm_ls$rlm)[, grep("LIHSG", colnames(coef(vecm_ls$rlm)))[1]]

alpha_ihsg <- koef_ihsg[grep("^ect", names(koef_ihsg))]

cat("\nKoefisien ECT persamaan LIHSG:", round(alpha_ihsg, 4), "\n")
## 
## Koefisien ECT persamaan LIHSG: 0.0018 -0.0419
alpha_ok <- alpha_ihsg[alpha_ihsg < 0 & alpha_ihsg > -1]

if (length(alpha_ok)) {

  cat("Waktu paruh (bulan) untuk", names(alpha_ok), ":",

      round(log(0.5) / log(1 + alpha_ok), 2), "\n")

}
## Waktu paruh (bulan) untuk ect2 : 16.19
# (3) ARDL: koefisien jangka panjang & ECT

cat("\nKoefisien jangka panjang ARDL:\n"); print(lr_ardl)
## 
## Koefisien jangka panjang ARDL:
##          Term Estimate Std. Error t value  Pr(>|t|)
## 1 (Intercept)  13.7729    6.13667  2.2444 0.0268674
## 2       LEMAS   0.1492    0.13629  1.0945 0.2762001
## 3        LWTI   0.3818    0.09889  3.8611 0.0001936
## 4       LKURS  -0.8034    0.73604 -1.0915 0.2775230
## 5         INF   0.0209    0.07324  0.2854 0.7759155
ect_ardl <- coef(mod_recm)[grep("ect", names(coef(mod_recm)))]

cat("Koefisien ECT ARDL:", round(ect_ardl, 4),

    "| waktu paruh (bulan):", round(log(0.5) / log(1 + ect_ardl), 2), "\n")
## Koefisien ECT ARDL: -0.1404 | waktu paruh (bulan): 4.58
ringkasan_pengaruh <- data.frame(

  Variabel = c("WTI (global)", "Emas (global)", "Kurs JISDOR (domestik)", "Inflasi (domestik)"),

  Jangka_Panjang = c("VECM +0,41; ARDL +0,38 (p = 0,0002)",

                     "VECM tidak ditampilkan (normalisasi); ARDL 0,149 (p = 0,276)",

                     "VECM -0,026; ARDL -0,803 (p = 0,278)",

                     "ARDL 0,021 (p = 0,776); tidak ada di VECM"),

  Jangka_Pendek_ARDL = c("+0,054 (signifikan)",

                         "+0,305 bersamaan, -0,285 lag (signifikan)",

                         "-0,913 bersamaan, +0,801 lag (signifikan)",

                         "+0,003 (tidak signifikan)"),

  Granger_TY = c("Tidak (p = 0,359)", "Dua arah (p = 0,033 dan 0,019)",

                 "Tidak (p = 0,820)", "Tidak (p = 0,149)"),

  IRF = c("Positif, membesar (0,0142 ke 0,0212)",

          "Positif lalu tipis negatif (0,0082 ke -0,0035)",

          "Negatif, meluruh (-0,0174 ke -0,0027)", "Tidak dihitung"),

  FEVD_bulan_24 = c("25,73%", "1,55%", "4,40%", "Tidak dihitung")

)

kable(ringkasan_pengaruh, row.names = FALSE,

      caption = "Ringkasan Pengaruh Variabel terhadap IHSG")
Ringkasan Pengaruh Variabel terhadap IHSG
Variabel Jangka_Panjang Jangka_Pendek_ARDL Granger_TY IRF FEVD_bulan_24
WTI (global) VECM +0,41; ARDL +0,38 (p = 0,0002) +0,054 (signifikan) Tidak (p = 0,359) Positif, membesar (0,0142 ke 0,0212) 25,73%
Emas (global) VECM tidak ditampilkan (normalisasi); ARDL 0,149 (p = 0,276) +0,305 bersamaan, -0,285 lag (signifikan) Dua arah (p = 0,033 dan 0,019) Positif lalu tipis negatif (0,0082 ke -0,0035) 1,55%
Kurs JISDOR (domestik) VECM -0,026; ARDL -0,803 (p = 0,278) -0,913 bersamaan, +0,801 lag (signifikan) Tidak (p = 0,820) Negatif, meluruh (-0,0174 ke -0,0027) 4,40%
Inflasi (domestik) ARDL 0,021 (p = 0,776); tidak ada di VECM +0,003 (tidak signifikan) Tidak (p = 0,149) Tidak dihitung Tidak dihitung

Interpretasi hubungan jangka panjang. Hubungan jangka panjang IHSG paling konsisten dengan harga minyak WTI. Elastisitas VECM sebesar +0,406 dan koefisien jangka panjang ARDL sebesar +0,382 searah, FEVD pada bulan ke-24 memberi kontribusi 25,73 persen, dan IRF menunjukkan respons positif yang persisten. Pengaruh kurs pada vektor kointegrasi hampir nol (-0,0259) dan tidak signifikan pada ARDL. Emas tidak dapat dinilai dari vektor pertama karena normalisasi, dan koefisien jangka panjangnya pada ARDL tidak signifikan. Inflasi tidak signifikan pada seluruh spesifikasi.

Penyesuaian IHSG terhadap keseimbangan jangka panjang berlangsung lambat. Hanya ECT2 pada persamaan LIHSG yang valid (-0,0419), dengan waktu paruh sekitar 16,19 bulan atau koreksi sekitar 4,2 persen per bulan. Waktu paruh ECT ARDL (4,58 bulan) tidak digunakan karena bounds test tidak menolak H0.

Pembahasan menurut variabel.

Minyak WTI. Hasil yang positif dan persisten menunjukkan bahwa kenaikan harga minyak bergerak searah dengan IHSG, bukan menekannya. Beberapa penjelasan yang masuk akal, tetapi belum diuji pada penelitian ini, adalah keberadaan emiten sektor energi dan pertambangan dalam indeks yang diuntungkan harga komoditas, serta kenaikan harga minyak yang dapat mencerminkan membaiknya permintaan global. Karena Toda-Yamamoto menunjukkan WTI tidak mendahului IHSG secara prediktif, hubungan ini lebih tepat dibaca sebagai keseimbangan jangka panjang yang bergerak bersama daripada sebagai kemampuan WTI memprediksi IHSG pada bulan berikutnya.

Emas. Emas berperan terutama dalam jangka pendek dan dua arah. Kenaikan emas 1 persen berasosiasi dengan kenaikan IHSG sekitar 0,31 persen pada bulan yang sama, tetapi efek bersihnya pada level hampir hilang karena lag LEMAS bertanda negatif, dan respons IRF meluruh ke nol dalam enam bulan. Hubungan dua arah pada Toda-Yamamoto menunjukkan IHSG juga mendahului emas, sehingga emas tidak dapat dipandang semata-mata sebagai faktor eksternal yang memengaruhi IHSG.

Kurs JISDOR. Pelemahan rupiah menekan IHSG terutama pada bulan terjadinya (koefisien bersamaan -0,913; respons IRF awal -0,0174), tetapi pengaruh jangka panjangnya tidak signifikan dan kontribusi FEVD menyusut dari 13,16 persen menjadi 4,40 persen. Tekanan itu sebagian besar berbalik pada bulan berikutnya (koefisien lag +0,801). Pola ini lebih cocok dibaca sebagai reaksi jangka pendek terhadap guncangan kurs daripada hubungan struktural yang bertahan lama.

Inflasi. Inflasi bulanan tidak berpengaruh signifikan terhadap IHSG pada ARDL (p = 0,776) maupun pada Toda-Yamamoto (p = 0,149). Inflasi M-to-M bersifat berisik dan berfluktuasi di sekitar nol, sehingga informasi pada tingkat bulanan mungkin kurang memadai untuk memengaruhi pergerakan indeks; dugaan ini perlu diuji lebih lanjut, misalnya dengan inflasi tahunan atau ekspektasi inflasi.

Faktor global dan domestik. Dalam jangka panjang, faktor global (terutama minyak) lebih menonjol daripada faktor domestik yang diwakili kurs dan inflasi, sedangkan faktor domestik berupa kurs lebih berperan pada guncangan jangka pendek. Perlu diingat bahwa kesimpulan ini terbatas pada variabel yang dipakai dan tidak berarti faktor domestik lain, seperti suku bunga kebijakan, tidak berpengaruh.

Keterbatasan. Hasil perlu dibaca dengan memperhatikan: (1) residual yang tidak berdistribusi normal; (2) rank kointegrasi yang sensitif karena penolakan r ≤ 1 hanya tipis; (3) konflik antara Johansen dan bounds test; (4) urutan Cholesky pada IRF dan FEVD yang merupakan asumsi; (5) guncangan besar pada 2020 dan 2026 yang belum dimodelkan sebagai perubahan struktural; serta (6) kausalitas Granger yang bersifat prediktif, bukan struktural.

BAB V PENUTUP

5.1 Kesimpulan

Berdasarkan hasil analisis data bulanan Januari 2017 sampai Agustus 2026 (116 observasi), diperoleh kesimpulan berikut.

  1. Karakteristik dan pola data. IHSG, emas, WTI, kurs, dan inflasi memiliki karakteristik yang berbeda. Emas paling bervariasi secara relatif (koefisien variasi sekitar 46 persen). IHSG, WTI, dan kurs mengalami perubahan tajam yang berdekatan pada Maret sampai April 2020 dan paruh pertama 2026. Korelasi awal IHSG bersifat positif sedang terhadap WTI (0,579), emas (0,561), dan kurs (0,506), serta sangat lemah terhadap inflasi (0,071), namun korelasi level ini bersifat eksploratif dan tidak membuktikan pengaruh.

  2. Pra-pemrosesan. Data tidak mengandung missing value dan periode bulanan lengkap. Transformasi logaritmik diterapkan pada IHSG, emas, WTI, dan kurs, sedangkan inflasi tidak ditransformasi karena terdapat 26 bulan inflasi negatif.

  3. Stasioneritas. LIHSG, LEMAS, LWTI, dan LKURS terintegrasi orde satu, I(1), sedangkan inflasi stasioner pada level, I(0). Orde integrasi yang campuran ini menjadi dasar penggunaan ARDL dan mengeluarkan inflasi dari sistem VECM.

  4. Kointegrasi. Uji Johansen menemukan dua vektor kointegrasi (r = 2) pada empat variabel I(1), sedangkan ARDL bounds test tidak menemukan kointegrasi (F = 3,194; p = 0,155). Karena konflik ini, VECM dijadikan model utama hubungan jangka panjang dan ARDL(1,1,0,1,0) dijadikan model pelengkap jangka pendek.

  5. Model dan diagnostik. VECM lolos uji autokorelasi, heteroskedastisitas, dan stabilitas akar karakteristik, tetapi residualnya tidak normal. ARDL memiliki masalah autokorelasi, heteroskedastisitas, normalitas, dan CUSUMSQ sehingga inferensinya memakai galat baku HAC dan dibatasi pada dinamika jangka pendek.

  6. Hubungan jangka panjang. Harga minyak WTI merupakan penentu jangka panjang IHSG yang paling konsisten, dengan elastisitas sekitar 0,41 pada VECM dan 0,38 pada ARDL. Pengaruh jangka panjang kurs dan inflasi tidak signifikan. Penyesuaian IHSG terhadap keseimbangan berlangsung lambat, dengan waktu paruh sekitar 16 bulan.

  7. Hubungan jangka pendek. Kenaikan emas 1 persen berasosiasi dengan kenaikan IHSG sekitar 0,31 persen pada bulan yang sama, dan depresiasi rupiah 1 persen berasosiasi dengan penurunan IHSG sekitar 0,91 persen. Keduanya bersifat jangka pendek: efek emas meluruh ke nol dalam enam bulan dan tekanan kurs sebagian besar berbalik pada bulan berikutnya.

  8. Kausalitas, IRF, dan FEVD. Toda-Yamamoto menemukan hubungan Granger dua arah antara emas dan IHSG serta dari kurs ke emas; WTI, kurs, dan inflasi tidak mendahului IHSG secara prediktif. IRF menunjukkan respons IHSG positif dan persisten terhadap kejutan WTI serta respons negatif yang meluruh terhadap kejutan kurs. FEVD menunjukkan kontribusi WTI meningkat menjadi 25,73 persen pada bulan ke-24, sedangkan emas (1,55 persen) dan kurs (4,40 persen) menyusut.

  9. Faktor global dan domestik. Dalam jangka panjang faktor global, terutama minyak, lebih menonjol daripada faktor domestik berupa kurs dan inflasi, sedangkan kurs berperan pada guncangan jangka pendek dan inflasi tidak signifikan pada seluruh spesifikasi. Kesimpulan ini bersifat asosiatif dan prediktif, bukan sebab-akibat struktural, serta terbatas oleh ketidaknormalan residual, sensitivitas rank kointegrasi, dan asumsi urutan Cholesky.

5.2 Saran

Saran praktis.

  1. Pelaku pasar dan analis yang memantau IHSG dapat memperhatikan pergerakan harga minyak sebagai indikator yang berhubungan dengan IHSG dalam jangka panjang, serta guncangan kurs sebagai sumber tekanan jangka pendek. Hasil ini bersifat deskriptif atas data historis dan bukan rekomendasi investasi.

  2. Karena penyesuaian IHSG terhadap keseimbangan jangka panjang berlangsung lambat (waktu paruh sekitar 16 bulan), penyimpangan IHSG dari hubungan keseimbangannya dapat bertahan lama sehingga tidak tepat diperlakukan sebagai koreksi cepat.

  3. Pengambil kebijakan dapat memperhatikan stabilitas kurs dalam jangka pendek karena pelemahan rupiah berasosiasi dengan tekanan pada IHSG pada bulan yang sama.

Saran untuk penelitian selanjutnya.

  1. Melakukan uji weak exogeneity pada VECM untuk memeriksa dugaan bahwa konflik antara Johansen dan ARDL bounds test berasal dari asumsi eksogenitas ARDL.

  2. Memodelkan perubahan struktural, misalnya dengan variabel dummy untuk pandemi 2020 dan guncangan 2026, atau dengan uji structural break dan model regime switching, karena CUSUMSQ ARDL menunjukkan ketidakstabilan varians.

  3. Menangani heteroskedastisitas dan efek ARCH dengan model varians bersyarat (misalnya GARCH) serta mempertimbangkan sebaran residual yang berekor tebal.

  4. Menguji kepekaan IRF dan FEVD terhadap urutan Cholesky atau menggunakan generalized IRF, serta menambahkan variabel domestik lain seperti suku bunga kebijakan dan aliran modal asing.

  5. Menguji inflasi dalam bentuk lain (tahunan atau ekspektasi inflasi), menambah panjang sampel atau frekuensi data, dan mengevaluasi kemampuan peramalan di luar sampel (out-of-sample).