1. Buat objek ts dan plot runtun waktu dari data harga GKP di atas

# Input data harga GKP tahun 2023 dan 2024
harga23 <- c(
  5200, 5150, 5300, 5400, 5250, 5350,
  5450, 5500, 5400, 5550, 5600, 5700
)

harga24 <- c(
  5650, 5700, 5800, 5900, 5750, 5850,
  5950, 6000, 5900, 6050, 6150, 6300
)

# Menggabungkan data
gkp <- c(harga23, harga24)

# Membuat objek time series
gkpts <- ts(
  gkp,
  start = c(2023, 1),
  frequency = 12
)

gkpts
##       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
# Membuat label bulan
label_bulan <- format(
  seq(
    as.Date("2023-01-01"),
    by = "month",
    length.out = 24
  ),
  "%b-%y"
)

# Plot runtun waktu
plot(
  gkpts,
  xaxt = "n",
  main = "Harga GKP Kabupaten Serang, Jan 2023 - Des 2024",
  xlab = "Bulan",
  ylab = "Harga (Rp/kg)",
  col = "darkblue",
  lwd = 2
)

axis(
  1,
  at = time(gkpts),
  labels = label_bulan,
  las = 2,
  cex.axis = 0.7
)

Dari plot runtun waktu harga Gabah Kering Panen (GKP) Kabupaten Serang periode Januari 2023 sampai Desember 2024, terlihat bahwa harga GKP menunjukkan peningkat dari waktu ke waktu. Pada awal periode, yaitu Januari 2023, harga GKP sebesar Rp5.200/kg, sedangkan pada akhir periode, Desember 2024, harga telah mencapai Rp6.300/kg. Meskipun terdapat beberapa penurunan pada bulan-bulan tertentu, seperti Februari 2023, Mei 2023, September 2023, Mei 2024, dan September 2024, penurunan tersebut bersifat sementara dan diikuti oleh kenaikan kembali pada bulan berikutnya. Maka, dari plot terlihat terdapat tren meningkat pada harga GKP selama periode pengamatan.

2. Lakukan transformasi logaritma, lalu bandingkan plot data asli dan hasil transformasi

# Transformasi logaritma natural
gkplog <- log(gkpts)

gkplog
##           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
# Membandingkan plot data asli dan hasil transformasi
par(mfrow = c(1, 2))

# Plot data asli
plot(
  gkpts,
  xaxt = "n",
  main = "Data Asli Harga GKP",
  xlab = "Bulan",
  ylab = "Harga (Rp/kg)",
  col = "darkblue",
  lwd = 2
)

axis(
  1,
  at = time(gkpts),
  labels = label_bulan,
  las = 2,
  cex.axis = 0.6
)

# Plot data setelah transformasi log
plot(
  gkplog,
  xaxt = "n",
  main = "Data Setelah Transformasi Logaritma",
  xlab = "Bulan",
  ylab = "ln(Harga)",
  col = "pink",
  lwd = 2
)

axis(
  1,
  at = time(gkplog),
  labels = label_bulan,
  las = 2,
  cex.axis = 0.6
)

# Mengembalikan layout grafik
par(mfrow = c(1, 1))

Berdasarkan perbandingan kedua plot, data asli dan data setelah transformasi, hasil menunjukkan pola pergerakan yang relatif sama. Kenaikan maupun penurunan harga terjadi pada periode yang sama karena transformasi logaritma tidak mengubah urutan maupun arah pergerakan data. Perbedaannya terletak pada skala data. Pada data asli, nilai berada pada kisaran Rp5.150/kg sampai Rp6.300/kg, sedangkan setelah transformasi logaritma nilai berada pada kisaran sekitar 8,55 sampai 8,75.

Namun, tren meningkat masih terlihat setelah transformasi logaritma. Jadi transformasi tidak bertujuan menghilangkan tren, melainkan mengubah skala pada kondisi tertentu, dan membantu menstabilkan varians.

3. Lakukan differencing tingkat pertama pada data hasil transformasi. Apakah tren sudah hilang?

# Differencing tingkat pertama pada data log
gkpdiff <- diff(
  gkplog,
  differences = 1
)

gkpdiff
##               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
# Rata-rata hasil differencing
mean(gkpdiff)
## [1] 0.008343087
# Plot hasil differencing
plot(
  gkpdiff,
  xaxt = "n",
  main = "Hasil Differencing Tingkat Pertama dari Data Log",
  xlab = "Bulan",
  ylab = "Selisih ln(Harga)",
  col = "red",
  lwd = 2
)

axis(
  1,
  at = time(gkpdiff),
  labels = label_bulan[-1],
  las = 2,
  cex.axis = 0.7
)

# Garis horizontal pada nol
abline(
  h = 0,
  lty = 2,
  col = "black"
)

Setelah dilakukan differencing tingkat pertama terhadap data yang telah ditransformasi logaritma, pola tren meningkat yang sebelumnya terlihat pada data asli dan data logaritma sudah tidak terlihat secara jelas. Plot hasil differencing menunjukkan nilai yang naik dan turun relatif konstan dan tidak lagi membentuk pola kenaikan berkelanjutan dari awal hingga akhir periode.

Nilai rata-rata hasil differencing \[ \bar{d}=0,008343 \]

Karena differencing dilakukan pada data logaritma, perubahan tersebut juga dapat dipahami sebagai perubahan relatif. Nilai rata-rata sekitar 0,00834 secara kasar setara dengan pertumbuhan harga sekitar 0,83% per bulan. Maka, berdasarkan plot, tren pada data telah banyak berkurang setelah differencing tingkat pertama.

4. Gunakan 21 observasi pertama sebagai data latih dan 3 observasi terakhir sebagai data uji. Hitung ramalan naif untuk 3 bulan tersebut, lalu hitung ME, MAE, MSE, RMSE, dan MAPE-nya

# Menentukan jumlah data latih
n_train <- 21

# 21 observasi pertama sebagai data latih
train_data <- gkpts[1:n_train]

# 3 observasi terakhir sebagai data uji
test_data <- gkpts[(n_train + 1):24]

# Metode naive
naive_value <- train_data[n_train]

naive_forecast <- rep(
  naive_value,
  length(test_data)
)

# Membuat tabel hasil ramalan
hasil <- data.frame(
  Bulan = c(
    "Okt 2024",
    "Nov 2024",
    "Des 2024"
  ),
  Aktual = as.numeric(test_data),
  Ramalan_Naif = naive_forecast
)

hasil
##      Bulan Aktual Ramalan_Naif
## 1 Okt 2024   6050         5900
## 2 Nov 2024   6150         5900
## 3 Des 2024   6300         5900
# Menghitung error
error <- test_data - naive_forecast

# Menghitung ukuran akurasi
ME <- mean(error)

MAE <- mean(abs(error))

MSE <- mean(error^2)

RMSE <- sqrt(MSE)

MAPE <- mean(
  abs(error) / test_data
) * 100

# Menampilkan hasil evaluasi
metrik <- data.frame(
  ME = ME,
  MAE = MAE,
  MSE = MSE,
  RMSE = RMSE,
  MAPE_persen = MAPE
)

metrik
##         ME      MAE      MSE     RMSE MAPE_persen
## 1 266.6667 266.6667 81666.67 285.7738    4.297862

Dengan metode naif, ramalan untuk Oktober, November, dan Desember 2024 menggunakan nilai observasi terakhir pada data latih, yaitu harga GKP September 2024 sebesar Rp5.900/kg. Ketiga periode tersebut memiliki nilai ramalan yang sama sebesar Rp5.900/kg. Nilai aktual ketiga bulan tersebut masing-masing sebesar Rp6.050/kg, Rp6.150/kg, dan Rp6.300/kg. Karena seluruh nilai aktual lebih tinggi daripada hasil ramalan, metode naif pada periode pengujian ini cenderung menghasilkan ramalan yang lebih rendah daripada nilai aktual.

ME sebesar 266,67 menunjukkan bahwa rata-rata selisih antara nilai aktual dengan hasil ramalan adalah sekitar Rp266,67/kg. Karena error didefinisikan sebagai Aktual - Ramalan, nilai ME yang positif menunjukkan bahwa ramalan cenderung lebih rendah dibandingkan nilai aktual. MAE sebesar 266,67 berarti secara absolut, rata-rata kesalahan ramalan adalah sekitar Rp266,67/kg tanpa memperhatikan arah kesalahannya.

MSE sebesar 81.666,67 merupakan rata-rata kuadrat kesalahan ramalan. Karena kesalahan dikuadratkan, ukuran ini memberikan penalti yang lebih besar terhadap kesalahan yang nilainya besar. RMSE sebesar 285,77 menunjukkan bahwa besarnya kesalahan ramalan secara umum berada pada kisaran Rp285,77/kg. Berbeda dengan MSE, RMSE kembali memiliki satuan yang sama dengan data asli, yaitu Rp/kg, sehingga lebih mudah diinterpretasikan. MAPE sebesar 4,30% menunjukkan bahwa rata-rata kesalahan absolut hasil ramalan sekitar 4,30% dari nilai aktual selama tiga bulan data uji.