Pendahuluan

Analisis runtun waktu adalah metode statistik yang digunakan untuk menganalisis data yang dicatat secara berurutan berdasarkan waktu. Metode ini banyak diterapkan pada bidang ekonomi, keuangan, industri, dan energi karena mampu menggambarkan pola perubahan data dari waktu ke waktu serta digunakan untuk melakukan peramalan nilai pada periode mendatang.

Salah satu model yang sering digunakan dalam analisis runtun waktu adalah Autoregressive Integrated Moving Average (ARIMA). Model ini sesuai untuk data yang memiliki pola historis dan dapat dibuat stasioner melalui diferensiasi. Dalam analisis ini, model ARIMA digunakan untuk memodelkan variabel Terakhir pada data Pertamina agar dapat diketahui pola pergerakannya serta digunakan untuk memprediksi nilai pada periode berikutnya.

Tinjauan Pustaka

Runtun waktu merupakan sekumpulan data yang diamati secara berurutan dalam interval waktu tertentu, seperti harian, mingguan, bulanan, atau tahunan. Dalam analisis runtun waktu, salah satu syarat penting adalah stasioneritas, yaitu kondisi ketika rata-rata dan varians data relatif konstan dari waktu ke waktu. Jika data belum stasioner, maka perlu dilakukan transformasi atau diferensiasi sebelum pemodelan dilakukan.

Model ARIMA terdiri atas tiga komponen, yaitu Autoregressive (AR), Integrated (I), dan Moving Average (MA), yang ditulis dalam bentuk ARIMA(p,d,q). Nilai p menunjukkan orde autoregressive, d menunjukkan banyaknya diferensiasi, dan q menunjukkan orde moving average. Pembentukan model ARIMA umumnya dilakukan melalui tahapan identifikasi model, estimasi parameter, uji diagnostik residual, dan peramalan.

Jenis dan Sumber Data

Jenis data yang digunakan dalam analisis ini adalah data sekunder kuantitatif berbentuk data runtun waktu. Data dikatakan kuantitatif karena dinyatakan dalam bentuk angka, dan disebut runtun waktu karena disusun berdasarkan urutan tanggal pengamatan.

Sumber data berasal dari data saham pada Investing.com pada Pertamina, yang memuat variabel Tanggal dan Terakhir. Variabel Tanggal berfungsi sebagai penanda waktu, sedangkan variabel Terakhir digunakan sebagai objek utama dalam analisis ARIMA untuk melihat pola historis dan melakukan peramalan.

Analisis Data

Install dan panggil paket

library(readxl)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(forecast)
library(tseries)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union

Import Data

data_pertamina <- read_excel("Pertamina.xlsx", sheet = "Sheet1")
data_pertamina
## # A tibble: 399 Ă— 2
##    Tanggal             Terakhir
##    <dttm>                 <dbl>
##  1 2024-01-02 00:00:00     1265
##  2 2024-01-03 00:00:00     1280
##  3 2024-01-04 00:00:00     1285
##  4 2024-01-05 00:00:00     1280
##  5 2024-01-08 00:00:00     1230
##  6 2024-01-09 00:00:00     1175
##  7 2024-01-10 00:00:00     1200
##  8 2024-01-11 00:00:00     1205
##  9 2024-01-12 00:00:00     1205
## 10 2024-01-15 00:00:00     1225
## # ℹ 389 more rows

Praproses Data

data_ts <- data_pertamina %>%
  select(Tanggal, Terakhir) %>%
  mutate(
    Tanggal = as.Date(Tanggal),
    Terakhir = as.numeric(Terakhir)
  ) %>%
  arrange(Tanggal)

menyiapkan data untuk analisis, yaitu dengan memilih kolom yang relevan, mengubah format Tanggal menjadi tanggal, mengubah Terakhir menjadi numerik, lalu mengurutkan data berdasarkan waktu. Ini penting agar analisis runtun waktu berjalan benar

Struktur Data

str(data_ts)
## tibble [399 Ă— 2] (S3: tbl_df/tbl/data.frame)
##  $ Tanggal : Date[1:399], format: "2024-01-02" "2024-01-03" ...
##  $ Terakhir: num [1:399] 1265 1280 1285 1280 1230 ...
summary(data_ts)
##     Tanggal              Terakhir   
##  Min.   :2024-01-02   Min.   : 730  
##  1st Qu.:2024-06-12   1st Qu.:1005  
##  Median :2024-11-04   Median :1190  
##  Mean   :2024-11-07   Mean   :1172  
##  3rd Qu.:2025-04-12   3rd Qu.:1280  
##  Max.   :2025-09-15   Max.   :1830
head(data_ts)
## # A tibble: 6 Ă— 2
##   Tanggal    Terakhir
##   <date>        <dbl>
## 1 2024-01-02     1265
## 2 2024-01-03     1280
## 3 2024-01-04     1285
## 4 2024-01-05     1280
## 5 2024-01-08     1230
## 6 2024-01-09     1175
tail(data_ts)
## # A tibble: 6 Ă— 2
##   Tanggal    Terakhir
##   <date>        <dbl>
## 1 2025-09-08     1395
## 2 2025-09-09     1380
## 3 2025-09-10     1395
## 4 2025-09-11     1405
## 5 2025-09-12     1400
## 6 2025-09-15     1390

ini digunakan untuk memeriksa struktur, ringkasan statistik, dan beberapa observasi awal serta akhir data. Tujuannya untuk memastikan tidak ada kesalahan format atau nilai yang aneh sebelum analisis dilakukan.

Visualisasi Data

ggplot(data_ts, aes(x = Tanggal, y = Terakhir)) +
  geom_line() +
  labs(
    title = "Plot Runtun Waktu Harga/Terakhir",
    x = "Tanggal",
    y = "Terakhir"
  ) +
  theme_minimal()

menampilkan pola pergerakan data dari waktu ke waktu. Grafik membantu melihat apakah data menunjukkan tren, fluktuasi, atau pola tertentu yang dapat memengaruhi pembentukan model ARIMA.

Objek Time Series

ts_pertamina <- ts(data_ts$Terakhir, frequency = 5)
ts_pertamina
## Time Series:
## Start = c(1, 1) 
## End = c(80, 4) 
## Frequency = 5 
##   [1] 1265 1280 1285 1280 1230 1175 1200 1205 1205 1225 1245 1260 1250 1240 1240
##  [16] 1245 1240 1255 1320 1315 1315 1310 1315 1285 1220 1220 1180 1215 1210 1235
##  [31] 1205 1210 1195 1180 1205 1225 1230 1220 1230 1210 1220 1210 1195 1195 1200
##  [46] 1185 1200 1185 1180 1180 1180 1185 1200 1195 1190 1190 1185 1175 1125 1130
##  [61] 1160 1190 1190 1190 1210 1230 1220 1205 1205 1200 1225 1200 1210 1220 1205
##  [76] 1215 1335 1305 1315 1260 1270 1250 1315 1290 1260 1280 1260 1235 1260 1265
##  [91] 1235 1185 1210 1210 1190 1170 1180 1170 1170 1115 1120 1060 1005 1045 1155
## [106] 1150 1150 1180 1200 1190 1220 1210 1200 1200 1230 1230 1220 1260 1285 1285
## [121] 1275 1285 1260 1285 1290 1295 1280 1275 1270 1265 1285 1280 1315 1285 1255
## [136] 1210 1245 1250 1240 1230 1230 1225 1250 1235 1230 1215 1205 1200 1190 1175
## [151] 1185 1180 1155 1125 1145 1145 1130 1135 1140 1130 1130 1150 1130 1140 1120
## [166] 1120 1120 1125 1115 1150 1170 1160 1150 1135 1135 1125 1120 1120 1145 1140
## [181] 1125 1165 1170 1185 1180 1180 1185 1170 1145 1145 1140 1135 1130 1125 1110
## [196] 1110 1090 1090 1080 1065 1070 1055 1030 1035 1015 1045 1080 1050 1035 1025
## [211] 1040 1040 1020 1030 1020 1015 1005  990  965  960 1000  985  975  975  970
## [226]  965  960  955  935  900  900  965  975  960  955  950  935  940  935  925
## [241]  900  905  900  900  910  910  925  935  920  915  925 1060 1050 1000  975
## [256]  950  915  910  930  905  890  870  825  830  885  885  890  870  910  935
## [271]  915  945  925  925  910  875  895  855  865  865  840  825  815  815  805
## [286]  765  760  730  750  755  785  765  780  820  805  765  770  805  805  840
## [301]  860  835  840  850  865  865  920  965  925  940  910  915  915  940  945
## [316]  955  945  975 1080 1270 1240 1300 1395 1365 1335 1350 1345 1350 1305 1315
## [331] 1310 1335 1360 1355 1495 1435 1565 1610 1560 1470 1385 1320 1325 1320 1325
## [346] 1415 1385 1360 1440 1405 1430 1465 1475 1480 1490 1480 1635 1610 1630 1655
## [361] 1670 1585 1635 1600 1620 1690 1830 1705 1655 1685 1610 1585 1605 1595 1625
## [376] 1565 1580 1525 1540 1515 1465 1415 1420 1415 1440 1555 1540 1515 1460 1415
## [391] 1465 1435 1445 1395 1380 1395 1405 1400 1390

mengubah data numerik menjadi objek runtun waktu (ts) agar bisa dianalisis dengan metode ARIMA. frequency = 5 digunakan sebagai pendekatan data harian kerja, yaitu lima hari dalam seminggu.

Uji Stasioneritas

adf.test(ts_pertamina)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  ts_pertamina
## Dickey-Fuller = -1.3898, Lag order = 7, p-value = 0.835
## alternative hypothesis: stationary

menguji apakah data sudah stasioner. Dalam analisis ARIMA, data yang stasioner lebih mudah dimodelkan. Jika p-value > 0.05, maka data belum stasioner dan perlu dilakukan diferensiasi.

Plot ACF dan PACF

par(mfrow = c(1, 2))
Acf(ts_pertamina, main = "ACF Data Asli")
Pacf(ts_pertamina, main = "PACF Data Asli")

par(mfrow = c(1, 1))

menampilkan grafik ACF dan PACF untuk membantu identifikasi awal orde AR (p) dan MA (q). Pola pada kedua grafik menjadi petunjuk dalam pemilihan model ARIMA yang sesuai.

Diferensiasi Orde 1

ts_diff <- diff(ts_pertamina)

plot(ts_diff, main = "Data Setelah Diferensiasi Orde 1", ylab = "Diff Terakhir")

adf.test(ts_diff)
## Warning in adf.test(ts_diff): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  ts_diff
## Dickey-Fuller = -7.1591, Lag order = 7, p-value = 0.01
## alternative hypothesis: stationary

melakukan diferensiasi satu kali untuk menghilangkan tren dan membuat data lebih stasioner. Setelah itu dilakukan kembali uji ADF untuk mengecek apakah diferensiasi sudah cukup.

ACF dan PACF

par(mfrow = c(1, 2))
Acf(ts_diff, main = "ACF Setelah Diferensiasi")
Pacf(ts_diff, main = "PACF Setelah Diferensiasi")

par(mfrow = c(1, 1))

menampilkan ACF dan PACF setelah data dibuat lebih stasioner. Grafik ini biasanya lebih tepat digunakan untuk menentukan dugaan orde ARIMA karena pola tren pada data asli sudah dikurangi.

Pemodelan ARIMA

model_arima <- auto.arima(ts_pertamina, seasonal = FALSE)
summary(model_arima)
## Series: ts_pertamina 
## ARIMA(0,1,0) 
## 
## sigma^2 = 1178:  log likelihood = -1971.99
## AIC=3945.99   AICc=3946   BIC=3949.97
## 
## Training set error measures:
##                     ME     RMSE      MAE         MPE     MAPE     MASE
## Training set 0.3164536 34.28016 22.34653 -0.01436519 1.869326 0.418069
##                     ACF1
## Training set 0.004321662

membentuk model ARIMA terbaik secara otomatis berdasarkan kriteria informasi, seperti AIC atau BIC. Output summary() menampilkan model terpilih, nilai parameter, dan ukuran kecocokan model.

Diagnostik Model

checkresiduals(model_arima)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(0,1,0)
## Q* = 9.8524, df = 10, p-value = 0.4535
## 
## Model df: 0.   Total lags used: 10

mengevaluasi apakah residual model sudah menyerupai white noise. Model yang baik memiliki residual yang acak, tidak berautokorelasi, dan tidak menunjukkan pola tertentu.

Forecast 10 Periode

forecast_arima <- forecast(model_arima, h = 10)
forecast_arima
##       Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 80.80           1390 1346.013 1433.987 1322.728 1457.272
## 81.00           1390 1327.793 1452.207 1294.863 1485.137
## 81.20           1390 1313.812 1466.188 1273.481 1506.519
## 81.40           1390 1302.026 1477.974 1255.456 1524.544
## 81.60           1390 1291.642 1488.358 1239.575 1540.425
## 81.80           1390 1282.254 1497.746 1225.217 1554.783
## 82.00           1390 1273.621 1506.379 1212.014 1567.986
## 82.20           1390 1265.586 1514.414 1199.725 1580.275
## 82.40           1390 1258.039 1521.961 1188.183 1591.817
## 82.60           1390 1250.901 1529.099 1177.267 1602.733

menghasilkan prediksi 10 periode ke depan berdasarkan model ARIMA yang telah dipilih. Output menunjukkan nilai ramalan beserta interval kepercayaannya.

Plot hasil Forecast

autoplot(forecast_arima) +
  labs(
    title = "Forecast ARIMA",
    x = "Periode",
    y = "Nilai Terakhir"
  ) +
  theme_minimal()

memvisualisasikan hasil peramalan. Grafik memudahkan pembaca melihat arah prediksi ke depan serta rentang ketidakpastian hasil forecast.

Akurasi in-Sample

accuracy(model_arima)
##                     ME     RMSE      MAE         MPE     MAPE     MASE
## Training set 0.3164536 34.28016 22.34653 -0.01436519 1.869326 0.418069
##                     ACF1
## Training set 0.004321662

menampilkan ukuran akurasi model, seperti MAE, RMSE, dan MAPE. Nilai-nilai ini membantu menilai seberapa baik model mengikuti data historis.

Interpretasi model

cat("Model ARIMA terbaik berdasarkan auto.arima adalah:\n")
## Model ARIMA terbaik berdasarkan auto.arima adalah:
cat(arimaorder(model_arima), "\n")
## 0 1 0

menampilkan orde model ARIMA terbaik dalam bentuk (p,d,q). Nilai tersebut menunjukkan jumlah komponen autoregressive, tingkat diferensiasi, dan moving average yang digunakan dalam model.

Kesimpulan

Model ARIMA merupakan salah satu metode yang efektif dalam analisis runtun waktu karena mampu memodelkan hubungan antara data saat ini, data masa lalu, dan kesalahan pada periode sebelumnya. Model ini sangat berguna untuk data yang tidak stasioner pada level, tetapi dapat dibuat stasioner melalui proses diferensiasi.

Berdasarkan penggunaannya pada data Pertamina, model ARIMA dapat membantu menjelaskan pola pergerakan variabel Terakhir serta menghasilkan prediksi untuk beberapa periode ke depan. Dengan demikian, metode ini dapat digunakan sebagai alat bantu dalam pengambilan keputusan, terutama yang berkaitan dengan perencanaan dan peramalan berdasarkan data historis.