# Data harga GKP Kabupaten Serang (Jan 2023 - Des 2024)
gkp_vector <- 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
)
# 1. Membuat objek time series
gkp_ts <- ts(gkp_vector, 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,
main = "Plot Runtun Waktu Harga GKP (2023 - 2024)",
ylab = "Harga (Rp/kg)",
xlab = "Waktu",
col = "darkblue",
lwd = 2,
type = "o",
pch = 16)
grid()
# Transformasi logaritma
log_gkp <- log(gkp_ts)
# Mengatur tata letak plot 1x2
par(mfrow = c(1, 2))
plot(gkp_ts,
main = "Data Asli GKP",
ylab = "Harga (Rp/kg)",
col = "darkblue",
lwd = 2,
type = "o",
pch = 16)
grid()
plot(log_gkp,
main = "Logaritma Data GKP",
ylab = "Log(Harga)",
col = "darkgreen",
lwd = 2,
type = "o",
pch = 16)
grid()
# Kembalikan tata letak plot ke semula
par(mfrow = c(1, 1))
# Differencing 1 kali pada data log
diff_log_gkp <- diff(log_gkp)
plot(diff_log_gkp,
main = "Differencing Tingkat Pertama pada Log(GKP)",
ylab = "Selisih Log(Harga)",
xlab = "Waktu",
col = "darkred",
lwd = 2,
type = "o",
pch = 16)
abline(h = 0, col = "gray", lty = 2)
grid()
Analisis Tren: setelah dilakukan differencing tingkat pertama, Fluktuasi
data berpusat di sekitar nilai nol dan tidak lagi menunjukkan tren
naik/turun yang sistematis. Hal ini menunjukkan bahwa tren pada data
berhasil dihilangkan dan mean data sudah stasioner.
# Pembagian data latih (21 observasi) & data uji (3 observasi terakhir)
train <- head(gkp_vector, 21)
test <- tail(gkp_vector, 3)
# Ramalan Naif (menggunakan nilai terakhir dari data latih secara konstan)
naive_forecast <- rep(tail(train, 1), 3)
# Perhitungan Error
error <- test - naive_forecast
# Perhitungan Metrik Evaluasi
ME <- mean(error)
MAE <- mean(abs(error))
MSE <- mean(error^2)
RMSE <- sqrt(MSE)
MAPE <- mean(abs(error / test)) * 100
# Menampilkan Hasil Evaluasi dalam Tabel Ringkas
eval_matrix <- data.frame(
Metrik = c("ME", "MAE", "MSE", "RMSE", "MAPE (%)"),
Nilai = c(ME, MAE, MSE, RMSE, MAPE)
)
knitr::kable(eval_matrix, digits = 2, caption = "Hasil Metrik Evaluasi Ramalan Naif")
| Metrik | Nilai |
|---|---|
| ME | 266.67 |
| MAE | 266.67 |
| MSE | 81666.67 |
| RMSE | 285.77 |
| MAPE (%) | 4.30 |