Input Data Gabah Kering Panen (GKP)

# 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

1. Plot Runtun Waktu Data Asli

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()

2. Transformasi Logaritma & Perbandingan Plot

# 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))

3. Differencing Tingkat Pertama pada Data Hasil Transformasi

# 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.

4. Evaluasi Ramalan Naif (Train-Test Split)

# 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")
Hasil Metrik Evaluasi Ramalan Naif
Metrik Nilai
ME 266.67
MAE 266.67
MSE 81666.67
RMSE 285.77
MAPE (%) 4.30