Data harga gabah kering panen (GKP) di tingkat petani Kabupaten Serang, Januari 2023 - Desember 2024 (Rp/kg), 24 observasi.
gkp <- c(5200,5150,5300,5400,5250,5350,5450,5500,5400,5550,5600,5700, # 2023
5650,5700,5800,5900,5750,5850,5950,6000,5900,6050,6150,6300) # 2024
length(gkp)
## [1] 24
gkp_ts <- ts(gkp, start = c(2023, 1), frequency = 12)
gkp_ts
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2023 5200 5150 5300 5400 5250 5350 5450 5500 5400 5550 5600 5700
## 2024 5650 5700 5800 5900 5750 5850 5950 6000 5900 6050 6150 6300
plot(gkp_ts, type = "o", pch = 16, col = "navy",
main = "Harga GKP Kabupaten Serang (Jan 2023 - Des 2024)",
xlab = "Waktu", ylab = "Rp/kg")
grid()
Interpretasi:
Dari plot terlihat harga GKP naik terus dari awal 2023 sampai akhir 2024, dari sekitar Rp5.200/kg jadi sekitar Rp6.300/kg.
Naiknya tidak lurus mulus, ada turun-naik kecil tiap beberapa bulan. Tapi turunnya sedikit setelah itu naik lagi, jadi arah besarnya tetap naik.
Besar turun-naiknya kelihatan mirip antara 2023 dan 2024, tidak makin lebar. Artinya variansinya cukup stabil.
Ada sedikit pola yang berulang, yaitu harga sempat turun di sekitar bulan April-Mei dan September di kedua tahun. Tapi datanya baru dua tahun, jadi belum bisa dibilang pola musiman.
Karena rata-rata harganya terus bergeser naik, data ini belum stasioner dalam mean. Jadi nanti perlu di-differencing.
log_gkp <- log(gkp_ts)
log_gkp
## Jan Feb Mar Apr May Jun Jul Aug
## 2023 8.556414 8.546752 8.575462 8.594154 8.565983 8.584852 8.603371 8.612503
## 2024 8.639411 8.648221 8.665613 8.682708 8.656955 8.674197 8.691146 8.699515
## Sep Oct Nov Dec
## 2023 8.594154 8.621553 8.630522 8.648221
## 2024 8.682708 8.707814 8.724207 8.748305
par(mfrow = c(1, 2))
plot(gkp_ts, type = "o", pch = 16, col = "navy",
main = "Data Asli (Rp/kg)", xlab = "Waktu", ylab = "Rp/kg")
plot(log_gkp, type = "o", pch = 16, col = "darkgoldenrod",
main = "Log(Data)", xlab = "Waktu", ylab = "ln(Rp/kg)")
par(mfrow = c(1, 1))
Interpretasi:
Dilihat dari plot data asli dan plot log bentuknya hampir sama persis. Sama-sama naik dari awal sampai akhir.
Hanya beda di angka sumbu-Y. Data asli ada di kisaran 5.200 sampai 6.300, sedangkan data log ada di kisaran 8,55 sampai 8,75.
Naik-turun kecil di sekitar garis tren juga masih ada di kedua plot, jadi log tidak membuat pola berubah.
Ini terjadi karena dari awal fluktuasi data GKP memang sudah kecil dan seragam, jadi tidak ada variansi yang perlu diratakan.
Jadi transformasi log di sini pengaruhnya kecil dan tetap dipakai supaya sesuai urutan di materi, yaitu transformasi dulu baru differencing.
Tren naik masih ada, artinya data belum stasioner dan perlu differencing di soal berikutnya.
diff_log_gkp <- diff(log_gkp)
diff_log_gkp
## Jan Feb Mar Apr May
## 2023 -0.009661911 0.028710106 0.018692133 -0.028170877
## 2024 -0.008810630 0.008810630 0.017391743 0.017094433 -0.025752496
## Jun Jul Aug Sep Oct
## 2023 0.018868484 0.018519048 0.009132484 -0.018349139 0.027398974
## 2024 0.017241806 0.016949558 0.008368250 -0.016807118 0.025105921
## Nov Dec
## 2023 0.008968670 0.017699577
## 2024 0.016393810 0.024097552
plot(diff_log_gkp, type = "o", pch = 16, col = "firebrick",
main = "Differencing Tingkat Pertama dari Log(GKP)",
xlab = "Waktu", ylab = "Wt = ln(Zt) - ln(Zt-1)")
abline(h = 0, lty = 2, col = "gray40")
mean(diff_log_gkp) # rata-rata laju pertumbuhan bulanan
## [1] 0.008343087
sd(diff_log_gkp)
## [1] 0.01725887
Interpretasi:
Setelah di-differencing, plotnya tidak naik terus lagi. Titik-titiknya naik turun di sekitar garis nol, jadi tren sudah hilang.
Nilainya kecil, berkisar antara -0,028 sampai +0,029. Rata-ratanya 0,0083, artinya harga GKP rata-rata naik sekitar 0,83% per bulan.
Simpangan bakunya 0,0173, jadi sebarannya kecil dan stabil, tidak ada lonjakan besar.
Ada beberapa bulan bernilai negatif, artinya harga turun dibanding bulan sebelumnya, tapi turunnya kecil dan langsung diikuti kenaikan.
Ada pola naik turun yang berulang, terlihat dari penurunan yang muncul tiap beberapa bulan. Tapi datanya baru dua tahun, jadi belum bisa disimpulkan musiman.
Kesimpulannya, tren sudah hilang dan data sudah relatif stasioner dalam mean setelah differencing satu kali, jadi tidak perlu differencing lagi.
train <- head(gkp, 21)
test <- tail(gkp, 3)
# Ramalan naif: nilai observasi terakhir data latih dibawa mendatar
naive_forecast <- rep(tail(train, 1), 3)
hasil <- data.frame(Bulan = c("Okt 2024", "Nov 2024", "Des 2024"),
Aktual = test,
Ramalan_Naif = naive_forecast,
Galat = test - naive_forecast)
hasil
## Bulan Aktual Ramalan_Naif Galat
## 1 Okt 2024 6050 5900 150
## 2 Nov 2024 6150 5900 250
## 3 Des 2024 6300 5900 400
error <- test - naive_forecast
ME <- mean(error)
MAE <- mean(abs(error))
MSE <- mean(error^2)
RMSE <- sqrt(MSE)
MAPE <- mean(abs(error / test)) * 100
metrik <- data.frame(ME = ME, MAE = MAE, MSE = MSE, RMSE = RMSE,
MAPE = paste0(round(MAPE, 2), "%"))
metrik
## ME MAE MSE RMSE MAPE
## 1 266.6667 266.6667 81666.67 285.7738 4.3%
plot(gkp_ts, type = "o", pch = 16, col = "navy",
main = "Ramalan Naif vs Aktual (3 Bulan Terakhir)",
xlab = "Waktu", ylab = "Rp/kg")
lines(ts(naive_forecast, start = c(2024, 10), frequency = 12),
col = "red", lwd = 2, lty = 2)
legend("topleft", legend = c("Aktual", "Ramalan naif"),
col = c("navy", "red"), lty = c(1, 2), pch = c(16, NA), bty = "n")
Interpretasi:
Ramalan naif hanya mengulang harga terakhir data latih, yaitu Rp5.900 (September 2024), untuk Oktober, November, dan Desember. Jadi ramalannya datar.
Kenyataannya harga terus naik jadi 6.050, 6.150, dan 6.300. Ramalannya selalu lebih rendah dari harga sebenarnya, dan selisihnya makin lebar dari 150, 250, sampai 400.
ME-nya positif (266,67), artinya ramalan cenderung lebih rendah dari harga sebenarnya, karena harga lagi naik sedangkan ramalan naif tidak ikut naik.
Rata-rata ramalannya meleset sekitar Rp267 per kg (MAE), atau sekitar 4,3% dari harga sebenarnya (MAPE).
RMSE (285,77) sedikit lebih besar dari MAE karena ada galat yang paling besar, yaitu 400.
Secara keseluruhan kesalahannya masih tergolong kecil, dan hasil ini bisa jadi patokan untuk model lain.