Beras merupakan salah satu komoditas pangan utama yang memiliki peran penting dalam memenuhi kebutuhan konsumsi masyarakat di Indonesia. Sebagai makanan pokok bagi sebagian besar penduduk, kestabilan harga beras menjadi salah satu faktor yang sangat diperhatikan dalam menjaga ketahanan pangan nasional. Perubahan harga beras tidak hanya memengaruhi daya beli masyarakat, tetapi juga dapat berdampak pada tingkat inflasi dan kondisi perekonomian secara keseluruhan.
Dalam rantai distribusi beras, harga beras di tingkat penggilingan merupakan salah satu indikator penting yang mencerminkan kondisi awal terbentuknya harga beras sebelum sampai ke pasar atau konsumen. Harga pada tingkat ini dipengaruhi oleh berbagai faktor, seperti produksi padi, ketersediaan bahan baku gabah, biaya distribusi, kebijakan pemerintah, serta kondisi permintaan dan penawaran di pasar. Oleh karena itu, pemantauan dan analisis terhadap perkembangan harga beras di tingkat penggilingan menjadi penting untuk memahami dinamika pergerakan harga beras dari waktu ke waktu.
Data harga beras yang dicatat secara berkala membentuk suatu deret waktu (time series), yaitu data yang tersusun berdasarkan urutan waktu tertentu. Analisis deret waktu memungkinkan peneliti untuk mengidentifikasi pola yang terdapat dalam data, seperti pola tren, pola musiman, maupun fluktuasi acak yang terjadi pada periode tertentu. Dengan memahami pola tersebut, analisis deret waktu juga dapat digunakan untuk melakukan peramalan terhadap nilai data pada periode yang akan datang.
Salah satu metode yang umum digunakan dalam analisis deret waktu adalah metode Autoregressive Integrated Moving Average (ARIMA). Model ARIMA merupakan pendekatan statistik yang memanfaatkan hubungan antara nilai suatu variabel pada periode sekarang dengan nilai variabel tersebut pada periode sebelumnya. Metode ini banyak digunakan dalam berbagai bidang, termasuk ekonomi dan sektor pangan, karena mampu menggambarkan pola data historis serta menghasilkan model yang dapat digunakan untuk melakukan peramalan.
Berdasarkan hal tersebut, penelitian ini dilakukan untuk menganalisis pola pergerakan Rata-Rata Harga Beras Bulanan di Tingkat Penggilingan pada periode tahun 2017 hingga 2025. Selain itu, penelitian ini juga bertujuan untuk membangun model deret waktu menggunakan metode ARIMA yang dapat menggambarkan karakteristik data harga beras serta digunakan untuk melakukan peramalan harga beras pada periode mendatang. Hasil analisis diharapkan dapat memberikan gambaran mengenai dinamika harga beras serta menjadi salah satu referensi dalam memahami perkembangan harga komoditas pangan di Indonesia.
Tujuan dari analisis ini adalah:
Data yang digunakan dalam analisis ini merupakan data sekunder yang diperoleh dari Badan Pusat Statistik (BPS). Data tersebut berupa rata-rata harga beras bulanan di tingkat penggilingan pada periode tahun 2017 hingga 2025.
Variabel yang digunakan dalam penelitian ini terdiri dari variabel periode yang menunjukkan waktu pengamatan dalam bentuk bulan dan tahun, serta variabel harga yang menunjukkan rata-rata harga beras pada setiap periode. Data tersebut disusun dalam bentuk deret waktu dengan frekuensi bulanan untuk keperluan analisis time series menggunakan metode ARIMA.
file_path <- "C:/Semester 6/Komlan/Data Beras Medium 2017-2025.xlsx"
raw <- read_excel(file_path)
head(raw, 10)
## # A tibble: 10 × 2
## tanggal rataan_harga
## <dttm> <chr>
## 1 2017-01-01 00:00:00 9099.52
## 2 2017-02-01 00:00:00 9047.57
## 3 2017-03-01 00:00:00 8705.43
## 4 2017-04-01 00:00:00 8653.8
## 5 2017-05-01 00:00:00 8790.17
## 6 2017-06-01 00:00:00 8794.48
## 7 2017-07-01 00:00:00 8743.86
## 8 2017-08-01 00:00:00 8823.05
## 9 2017-09-01 00:00:00 8935.02
## 10 2017-10-01 00:00:00 9116.5
str(raw)
## tibble [108 × 2] (S3: tbl_df/tbl/data.frame)
## $ tanggal : POSIXct[1:108], format: "2017-01-01" "2017-02-01" ...
## $ rataan_harga: chr [1:108] "9099.52" "9047.57" "8705.43" "8653.8" ...
summary(raw)
## tanggal rataan_harga
## Min. :2017-01-01 00:00:00 Length:108
## 1st Qu.:2019-03-24 06:00:00 Class :character
## Median :2021-06-16 00:00:00 Mode :character
## Mean :2021-06-16 08:26:40
## 3rd Qu.:2023-09-08 12:00:00
## Max. :2025-12-01 00:00:00
df <- raw %>%
mutate(rataan_harga = as.numeric(rataan_harga)) %>%
arrange(tanggal)
head(df)
## # A tibble: 6 × 2
## tanggal rataan_harga
## <dttm> <dbl>
## 1 2017-01-01 00:00:00 9100.
## 2 2017-02-01 00:00:00 9048.
## 3 2017-03-01 00:00:00 8705.
## 4 2017-04-01 00:00:00 8654.
## 5 2017-05-01 00:00:00 8790.
## 6 2017-06-01 00:00:00 8794.
str(df)
## tibble [108 × 2] (S3: tbl_df/tbl/data.frame)
## $ tanggal : POSIXct[1:108], format: "2017-01-01" "2017-02-01" ...
## $ rataan_harga: num [1:108] 9100 9048 8705 8654 8790 ...
Pada tahap pembersihan data dilakukan penyesuaian format data agar dapat digunakan dalam analisis. Variabel rataan_harga yang sebelumnya bertipe character dikonversi menjadi tipe numeric sehingga nilai harga dapat diolah dalam perhitungan statistik. Selain itu, data juga disusun berdasarkan variabel tanggal untuk memastikan bahwa seluruh observasi tersusun secara kronologis sesuai urutan waktu pengamatan. Setelah proses ini dilakukan, data siap digunakan untuk tahap analisis selanjutnya.
sum(is.na(df$rataan_harga))
## [1] 0
df %>% filter(is.na(rataan_harga))
## # A tibble: 0 × 2
## # ℹ 2 variables: tanggal <dttm>, rataan_harga <dbl>
Pengecekan missing value dilakukan untuk memastikan bahwa tidak
terdapat nilai yang hilang pada data yang digunakan dalam analisis.
Berdasarkan hasil pemeriksaan menggunakan fungsi
sum(is.na(df$rataan_harga)) diperoleh nilai 0, yang
menunjukkan bahwa tidak terdapat nilai yang hilang pada variabel
rataan_harga. Selain itu, pengecekan menggunakan
df %>% filter(is.na(rataan_harga)) juga tidak
menampilkan baris data apa pun. Dengan demikian, dapat disimpulkan bahwa
dataset tidak memiliki missing value sehingga data dapat langsung
digunakan pada tahap analisis selanjutnya.
start_year <- year(min(df$tanggal))
start_month <- month(min(df$tanggal))
beras_ts <- ts(df$rataan_harga,
start = c(start_year, start_month),
frequency = 12)
beras_ts
## Jan Feb Mar Apr May Jun Jul Aug
## 2017 9099.52 9047.57 8705.43 8653.80 8790.17 8794.48 8743.86 8823.05
## 2018 10177.05 10215.16 9698.23 9220.84 9190.37 9135.41 9197.78 9172.27
## 2019 9902.68 9799.57 9555.35 9144.20 9142.52 9166.40 9211.03 9224.00
## 2020 9805.40 9844.13 9826.68 9671.03 9526.55 9445.31 9316.30 9334.90
## 2021 9404.74 9386.31 9153.68 8978.86 8909.50 8906.67 8886.90 8915.75
## 2022 9381.24 9358.61 9323.35 9104.35 9065.18 9007.86 9091.92 9358.34
## 2023 10801.71 11300.76 11121.88 11049.87 11005.56 11079.92 11120.58 11474.96
## 2024 13187.17 14161.81 13964.60 12759.11 12071.41 12313.56 12518.68 12627.46
## 2025 12608.54 12596.26 12702.97 12555.17 12576.12 12868.83 13264.30 13458.23
## Sep Oct Nov Dec
## 2017 8935.02 9116.50 9279.52 9526.01
## 2018 9309.98 9395.39 9603.63 9798.38
## 2019 9301.08 9433.88 9522.01 9565.59
## 2020 9404.58 9462.81 9384.98 9382.69
## 2021 8962.39 9010.82 9071.94 9128.44
## 2022 9785.04 10043.47 10122.15 10371.11
## 2023 12685.36 13011.56 12959.50 13070.70
## 2024 12608.47 12554.97 12394.92 12447.45
## 2025 13385.89 13324.28 13195.20 13283.83
Pada tahap ini, variabel rataan_harga disusun berdasarkan urutan waktu dengan frekuensi bulanan sehingga membentuk objek time series yang dimulai dari Januari 2017 hingga Desember 2025. Hasil pembentukan data deret waktu menunjukkan bahwa data harga beras tersusun secara kronologis untuk setiap bulan dalam satu tahun, mulai dari Januari hingga Desember. Dengan demikian, data telah memiliki struktur deret waktu yang sesuai dan siap digunakan pada tahap analisis selanjutnya
autoplot(beras_ts) +
labs(
title = "Pergerakan Rata-Rata Harga Beras Medium Bulanan di Tingkat Penggilingan",
x = "Tahun",
y = "Harga (Rp/kg)"
)
Visualisasi deret waktu dilakukan untuk melihat pola pergerakan rata-rata harga beras medium bulanan di tingkat penggilingan selama periode 2017 hingga 2025. Berdasarkan grafik, harga beras mengalami fluktuasi dari waktu ke waktu dengan kondisi yang relatif stabil pada periode 2017 hingga 2021. Namun, mulai tahun 2022 terlihat adanya peningkatan harga yang cukup signifikan hingga mencapai puncaknya pada tahun 2024. Setelah mengalami sedikit penurunan, harga kembali berada pada tingkat yang relatif tinggi hingga tahun 2025. Pola ini menunjukkan adanya kecenderungan tren peningkatan harga beras dalam beberapa tahun terakhir.
beras_stl <- stl(beras_ts, s.window = "periodic")
autoplot(beras_stl)
Dekomposisi deret waktu dilakukan untuk memisahkan komponen utama yang membentuk data deret waktu, yaitu tren, musiman, dan komponen sisa. Proses ini bertujuan untuk memahami pola dasar yang terdapat pada data sebelum dilakukan pemodelan lebih lanjut. Berdasarkan hasil dekomposisi, terlihat bahwa komponen tren menunjukkan kecenderungan peningkatan harga beras dalam jangka panjang, terutama mulai sekitar tahun 2022 hingga 2024 yang mengalami kenaikan cukup signifikan. Komponen musiman memperlihatkan adanya pola yang berulang setiap tahun, yang menunjukkan bahwa harga beras mengalami fluktuasi pada periode tertentu secara konsisten. Sementara itu, komponen sisa menunjukkan fluktuasi acak di sekitar nilai nol yang tidak dapat dijelaskan oleh tren maupun pola musiman. Hal ini menunjukkan bahwa sebagian besar variasi pada data harga beras dapat dijelaskan oleh komponen tren dan musiman.
Pengujian stasioneritas varians dilakukan untuk mengetahui apakah varians data deret waktu sudah stabil sepanjang periode pengamatan. Pengujian ini dilakukan menggunakan metode Box-Cox dengan melihat nilai parameter λ (lambda). Jika nilai λ mendekati 1, maka varians data dapat dianggap stabil sehingga tidak diperlukan transformasi. Sebaliknya, jika nilai λ jauh dari 1, maka varians data dianggap tidak stabil sehingga perlu dilakukan transformasi Box-Cox sebelum melanjutkan analisis lebih lanjut.
lambda <- BoxCox.lambda(beras_ts)
lambda
## [1] -0.9999242
Berdasarkan hasil perhitungan menggunakan metode Box-Cox diperoleh nilai parameter λ sebesar −0.9999. Nilai tersebut menunjukkan bahwa varians data belum stabil karena nilainya jauh dari 1. Oleh karena itu, diperlukan transformasi Box-Cox pada data agar varians menjadi lebih stabil sebelum dilakukan analisis deret waktu pada tahap selanjutnya.
beras_bc <- BoxCox(beras_ts, lambda = lambda)
autoplot(beras_bc) +
labs(title = "Harga Beras Setelah Transformasi Box-Cox",
x = "Tahun",
y = "Harga (Transformasi)")
lambda2 <- BoxCox.lambda(beras_bc)
lambda2
## [1] -0.9999242
Transformasi pertama dilakukan menggunakan metode Box-Cox untuk menstabilkan varians data. Berdasarkan hasil perhitungan diperoleh nilai parameter λ sebesar −0.9999 sehingga dilakukan transformasi pada data deret waktu. Hasil transformasi menunjukkan bahwa pola data tetap mengikuti pergerakan data sebelumnya, namun dengan skala yang telah disesuaikan sehingga data dapat digunakan pada tahap analisis selanjutnya.
Pengujian stasioneritas dalam mean dilakukan untuk mengetahui apakah rata-rata data deret waktu bersifat konstan sepanjang periode pengamatan. Data yang tidak stasioner dalam mean dapat mempengaruhi proses pemodelan deret waktu sehingga perlu dilakukan pengujian sebelum menentukan model yang sesuai. Pada tahap ini digunakan uji Augmented Dickey-Fuller (ADF) untuk mengetahui apakah data telah memenuhi asumsi stasioneritas.
adf.test(beras_bc)
##
## Augmented Dickey-Fuller Test
##
## data: beras_bc
## Dickey-Fuller = -1.8916, Lag order = 4, p-value = 0.6216
## alternative hypothesis: stationary
Hipotesis
H₀ : Data memiliki unit root sehingga data tidak stasioner dalam mean.
H₁ : Data tidak memiliki unit root sehingga data stasioner dalam mean.
Taraf Signifikansi
α = 0.05
Statistik Uji
Berdasarkan hasil uji Augmented Dickey-Fuller (ADF) diperoleh nilai statistik uji Dickey-Fuller sebesar −1.8916 dengan p-value sebesar 0.6216.
Daerah Kritis
H₀ ditolak jika p-value < α (0.05).
Keputusan
Karena nilai p-value (0.6216) > α (0.05), maka H₀ gagal ditolak.
Kesimpulan
Pada taraf signifikansi 0.05 dapat disimpulkan bahwa data harga beras setelah transformasi Box-Cox masih belum stasioner dalam mean. Oleh karena itu diperlukan proses differencing untuk menstabilkan rata-rata data sebelum dilakukan analisis lebih lanjut.
diff_beras <- diff(beras_bc)
autoplot(diff_beras) +
labs(title = "Data Harga Beras Setelah Differencing Pertama",
x = "Tahun",
y = "Differencing Harga")
adf.test(diff_beras)
##
## Augmented Dickey-Fuller Test
##
## data: diff_beras
## Dickey-Fuller = -4.8111, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
Hipotesis
H₀ : Data memiliki unit root sehingga data tidak stasioner dalam mean.
H₁ : Data tidak memiliki unit root sehingga data stasioner dalam mean.
Taraf Signifikansi
α = 0.05
Statistik Uji
Berdasarkan hasil uji Augmented Dickey-Fuller (ADF) pada data hasil differencing diperoleh nilai statistik Dickey-Fuller sebesar −4.8111 dengan p-value sebesar 0.01.
Daerah Kritis
H₀ ditolak jika p-value < α (0.05).
Keputusan
Karena nilai p-value (0.01) < α (0.05), maka H₀ ditolak.
Kesimpulan
Pada taraf signifikansi 0.05 dapat disimpulkan bahwa data hasil differencing telah stasioner dalam mean. Oleh karena itu, proses differencing pertama sudah cukup untuk menstabilkan rata-rata data dan data dapat digunakan untuk tahap analisis selanjutnya.
Acf(diff_beras)
Pacf(diff_beras)
Berdasarkan plot ACF dan PACF dari data yang telah stasioner setelah proses differencing pertama, terlihat bahwa nilai autokorelasi pada beberapa lag awal masih signifikan dan kemudian menurun secara bertahap menuju nol. Pada plot PACF terlihat adanya spike yang signifikan pada lag pertama sebelum kemudian menurun pada lag-lag berikutnya. Pola tersebut mengindikasikan adanya kemungkinan komponen autoregressive pada lag awal. Selain itu, tidak terlihat adanya pola musiman yang signifikan pada lag ke-12 sehingga model yang digunakan merupakan model ARIMA non-musiman.
Model yang digunakan dalam analisis ini adalah model ARIMA non-musiman dengan bentuk umum ARIMA(p,d,q).
p : orde autoregressive (AR)
d : orde differencing
q : orde moving average (MA)
Berdasarkan hasil pengujian sebelumnya, data telah dilakukan differencing satu kali sehingga nilai d = 1. Selanjutnya, penentuan nilai p dan q dilakukan berdasarkan pola pada plot ACF dan PACF.
Berdasarkan hasil analisis plot ACF dan PACF, diperoleh kemungkinan nilai:
p : 0, 1
d : 1
q : 0, 1
Sehingga beberapa kandidat model ARIMA yang dapat digunakan adalah:
ARIMA(1,1,0)
ARIMA(0,1,1)
ARIMA(1,1,1)
Model-model tersebut selanjutnya akan diestimasi dan dibandingkan untuk menentukan model yang paling sesuai dalam memodelkan data harga beras.
# Definisikan Model Kandidat
model1 <- Arima(beras_ts, order = c(1,1,0))
model2 <- Arima(beras_ts, order = c(0,1,1))
model3 <- Arima(beras_ts, order = c(1,1,1))
# FUngsi Uji Signifikansi Parameter
uji_signifikansi <- function(model){
coef_est <- model$coef
se_est <- sqrt(diag(model$var.coef))
z_value <- coef_est / se_est
p_value <- 2 * (1 - pnorm(abs(z_value)))
hasil <- data.frame(
Parameter = names(coef_est),
Estimate = coef_est,
Std_Error = se_est,
z_value = z_value,
p_value = p_value,
Keputusan = ifelse(p_value < 0.05,"Signifikan","Tidak Signifikan")
)
return(hasil)
}
# Uji Untuk setiap model
hasil_model1 <- uji_signifikansi(model1)
print(hasil_model1)
## Parameter Estimate Std_Error z_value p_value Keputusan
## ar1 ar1 0.4165642 0.08717468 4.7785 1.766075e-06 Signifikan
hasil_model2 <- uji_signifikansi(model2)
print(hasil_model2)
## Parameter Estimate Std_Error z_value p_value Keputusan
## ma1 ma1 0.5878475 0.07535599 7.800938 6.217249e-15 Signifikan
hasil_model3 <- uji_signifikansi(model3)
print(hasil_model3)
## Parameter Estimate Std_Error z_value p_value Keputusan
## ar1 ar1 0.03644065 0.1548470 0.2353332 8.139501e-01 Tidak Signifikan
## ma1 ma1 0.56513997 0.1250392 4.5197041 6.192613e-06 Signifikan
HIpotesis
H₀ : 𝜑i = 0 dan atau 𝜃i = 0 (Parameter tidak signifikan terhadap model
𝐻1: 𝜑i ≠ 0 dan atau 𝜃i ≠ 0 (Parameter signifikan terhadap model)
Taraf Signifikansi
α = 0.05
Statistik Uji
Dilihat dari nilai p-value pada output hasil estimasi model.
Daerah Kritis
H₀ ditolak jika p-value < α (0.05).
Keputusan dan Kesimpulan
Berdasarkan model ARIMA(1,1,0), diperoleh bahwa parameter AR(1) memiliki nilai p-value sebesar 1.766075e-06 yang lebih kecil dari α (0.05). Hal ini menunjukkan bahwa parameter AR(1) signifikan secara statistik sehingga komponen autoregressive pada lag pertama berpengaruh terhadap model.
Pada model ARIMA(0,1,1), diperoleh bahwa parameter MA(1) memiliki nilai p-value sebesar 6.217249e-15 yang lebih kecil dari α (0.05). Hal ini menunjukkan bahwa parameter MA(1) signifikan secara statistik sehingga komponen moving average pada lag pertama berpengaruh terhadap model.
Pada model ARIMA(1,1,1), diperoleh bahwa parameter AR(1) memiliki nilai p-value sebesar 0.8139501 yang lebih besar dari α (0.05) sehingga tidak signifikan secara statistik. Sementara itu, parameter MA(1) memiliki nilai p-value sebesar 6.192613e-06 yang lebih kecil dari α (0.05) sehingga signifikan secara statistik. Dengan demikian, hanya parameter MA(1) yang berpengaruh signifikan terhadap model.
hitung_signifikan <- function(model){
coef <- model$coef
se <- sqrt(diag(model$var.coef))
z_stat <- coef / se
p_values <- 2 * (1 - pnorm(abs(z_stat)))
jumlah_sig <- sum(p_values < 0.05)
if(jumlah_sig == length(p_values)){
return(paste(jumlah_sig,"signifikan"))
} else if(jumlah_sig > 0){
return(paste(jumlah_sig,"signifikan"))
} else {
return("Tidak signifikan")
}
}
# Membuat Tabel Perbandingan
tabel_model <- data.frame(
Model = c("ARIMA(1,1,0)",
"ARIMA(0,1,1)",
"ARIMA(1,1,1)"),
AIC = c(AIC(model1),
AIC(model2),
AIC(model3)),
Signifikansi = c(
hitung_signifikan(model1),
hitung_signifikan(model2),
hitung_signifikan(model3)
)
)
print(tabel_model)
## Model AIC Signifikansi
## 1 ARIMA(1,1,0) 1487.865 1 signifikan
## 2 ARIMA(0,1,1) 1475.496 1 signifikan
## 3 ARIMA(1,1,1) 1477.441 1 signifikanBerdasarkan hasil perbandingan model menggunakan nilai Akaike Information Criterion (AIC), diperoleh bahwa model ARIMA(0,1,1) memiliki nilai AIC paling kecil yaitu sebesar 1475.496, dibandingkan dengan model ARIMA(1,1,0) dengan nilai AIC sebesar 1487.865 dan ARIMA(1,1,1) dengan nilai AIC sebesar 1477.441. Selain itu, ketiga model memiliki parameter yang signifikan secara statistik. Oleh karena itu, model ARIMA(0,1,1) dipilih sebagai model terbaik untuk tahap analisis selanjutnya karena memiliki nilai AIC paling kecil sehingga dianggap paling mampu menjelaskan pola data dengan baik.
res <- residuals(model2)
shapiro.test(res)
##
## Shapiro-Wilk normality test
##
## data: res
## W = 0.89836, p-value = 5.244e-07
Hipotesis
H₀ : Residual berdistribusi normal
H₁ : Residual tidak berdistribusi normal
Taraf Signifikansi
α = 0.05
Statistik Uji
Berdasarkan hasil uji Shapiro-Wilk diperoleh nilai statistik uji W sebesar 0.89836 dengan p-value sebesar 5.244e-07.
Daerah Kritis
H₀ ditolak jika p-value < α (0.05).
Keputusan
Karena nilai p-value (5.244e-07) < 0.05, maka H₀ ditolak.
Kesimpulan
Pada taraf signifikansi 0.05 dapat disimpulkan bahwa residual dari model ARIMA(0,1,1) tidak berdistribusi normal.
Dalam model ARIMA, normalitas residual tidak selalu harus terpenuhi secara ketat, yang lebih penting biasanya adalah independensi residual (tidak ada autokorelasi).
Box.test(residuals(model2), type = "Ljung-Box")
##
## Box-Ljung test
##
## data: residuals(model2)
## X-squared = 0.0054233, df = 1, p-value = 0.9413
Hipotesis
H₀ : Tidak terdapat autokorelasi antar lag residual
H₁ : Terdapat autokorelasi antar lag residual
Taraf Signifikansi
α = 0.05
Statistik Uji
Berdasarkan hasil uji Box-Ljung diperoleh nilai statistik uji sebesar 0.0054233 dengan p-value sebesar 0.9413.
Daerah Kritis
H₀ ditolak jika p-value < α (0.05).
Keputusan
Karena nilai p-value (0.9413) > 0.05, maka H₀ gagal ditolak.
Kesimpulan
Pada taraf signifikansi 0.05 dapat disimpulkan bahwa tidak terdapat autokorelasi pada residual model ARIMA(0,1,1). Hal ini menunjukkan bahwa residual bersifat independen sehingga model telah memenuhi asumsi independensi residual.
ArchTest(residuals(model2), lags = 12)
##
## ARCH LM-test; Null hypothesis: no ARCH effects
##
## data: residuals(model2)
## Chi-squared = 30.308, df = 12, p-value = 0.002509
Hipotesis
H₀ : Tidak terdapat gejala heteroskedastisitas pada residual
H₁ : Terdapat gejala heteroskedastisitas pada residual
Taraf Signifikansi
α = 0.05
Statistik Uji
Berdasarkan hasil uji ARCH LM diperoleh nilai statistik Chi-squared sebesar 30.308 dengan p-value sebesar 0.002509.
Daerah Kritis
H₀ ditolak jika p-value < α (0.05).
Keputusan
Karena nilai p-value (0.002509) < 0.05, maka H₀ ditolak.
Kesimpulan
Pada taraf signifikansi 0.05 dapat disimpulkan bahwa terdapat gejala heteroskedastisitas pada residual model ARIMA(0,1,1) sehingga asumsi homoskedastisitas tidak terpenuhi.
Berdasarkan hasil pengujian diagnostik residual, diperoleh bahwa residual model ARIMA(0,1,1) tidak berdistribusi normal dan terdapat gejala heteroskedastisitas. Namun hasil uji independensi residual menunjukkan bahwa tidak terdapat autokorelasi pada residual sehingga residual dapat dianggap bersifat white noise. Oleh karena itu, model ARIMA(0,1,1) masih dapat digunakan untuk proses peramalan.
mape <- function(actual, pred){
actual <- as.numeric(actual)
pred <- as.numeric(pred)
mean(abs((actual - pred)/actual))*100
}
smape <- function(actual, pred){
actual <- as.numeric(actual)
pred <- as.numeric(pred)
mean(abs(actual - pred) / ((abs(actual) + abs(pred))/2))*100
}
n <- length(beras_ts)
n_train <- floor(0.8 * n)
train <- window(beras_ts, end = time(beras_ts)[n_train])
test <- window(beras_ts, start = time(beras_ts)[n_train+1])
length(train)
## [1] 86
length(test)
## [1] 22
model_train <- Arima(train, order = c(0,1,1))
fc_test <- forecast(model_train, h = length(test))
MAPE_test <- mape(test, fc_test$mean)
SMAPE_test <- smape(test, fc_test$mean)
fit_train <- fitted(model_train)
MAPE_train <- mape(train, fit_train)
SMAPE_train <- smape(train, fit_train)
tabel_error <- data.frame(
Data = c("Training","Testing"),
MAPE = c(MAPE_train, MAPE_test),
SMAPE = c(SMAPE_train, SMAPE_test)
)
tabel_error
## Data MAPE SMAPE
## 1 Training 1.43703 1.445083
## 2 Testing 14.66698 13.601418
Berdasarkan hasil perhitungan, diperoleh nilai MAPE sebesar 1.43703% dan SMAPE sebesar 1.445083% pada data training, sedangkan pada data testing diperoleh MAPE sebesar 14.66698% dan SMAPE sebesar 13.601418%. Nilai kesalahan pada data training relatif sangat kecil yang menunjukkan bahwa model mampu memodelkan data dengan sangat baik. Sementara itu, nilai kesalahan pada data testing masih berada pada tingkat yang cukup baik sehingga model ARIMA(0,1,1) memiliki kemampuan yang cukup baik dalam memodelkan dan memprediksi data harga beras.
forecast_model <- forecast(model2, h = 12)
autoplot(forecast_model) +
labs(title = "Forecast Harga Beras",
x = "Tahun",
y = "Harga")
Berdasarkan hasil peramalan menggunakan model ARIMA(0,1,1) untuk 12 periode mendatang, terlihat bahwa harga beras diprediksi akan bergerak relatif stabil di sekitar nilai pada periode terakhir. Garis biru menunjukkan nilai prediksi utama, sedangkan area berwarna biru menunjukkan interval kepercayaan dari hasil peramalan. Semakin jauh periode yang diprediksi, rentang interval kepercayaan semakin melebar yang menandakan meningkatnya ketidakpastian prediksi pada periode yang lebih panjang.