Tugas 2 - Analisis Deret Waktu

Berikut data harga Gabah Kering Panen (GKP) di tingkat petani Kabupaten Serang periode Januari 2023 - Desember 2024 (Rp/kg):

library(knitr)
## Warning: package 'knitr' was built under R version 4.4.3
data_GKP <- data.frame(
  Tahun = rep(c(2023, 2024), each = 12),
  Bulan = rep(month.abb, 2),
  GKP = c(
    5.200, 5.150, 5.300, 5.400, 5.250, 5.350, 5.450, 5.500, 5.400, 5.550, 5.600, 5.700,
    5.650, 5.700, 5.800, 5.900, 5.750, 5.850, 5.950, 6.000, 5.900, 6.050, 6.150, 6.300
    )
)

kable(data_GKP)
Tahun Bulan GKP
2023 Jan 5.20
2023 Feb 5.15
2023 Mar 5.30
2023 Apr 5.40
2023 May 5.25
2023 Jun 5.35
2023 Jul 5.45
2023 Aug 5.50
2023 Sep 5.40
2023 Oct 5.55
2023 Nov 5.60
2023 Dec 5.70
2024 Jan 5.65
2024 Feb 5.70
2024 Mar 5.80
2024 Apr 5.90
2024 May 5.75
2024 Jun 5.85
2024 Jul 5.95
2024 Aug 6.00
2024 Sep 5.90
2024 Oct 6.05
2024 Nov 6.15
2024 Dec 6.30

1. Objek Time Series dan Plot Runtun Waktu dari Data Harga GKP

a. Objek Time Series

data_ts <- ts(data_GKP$GKP,
              start = c(2023,1),
              frequency = 12)
data_ts
##       Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
## 2023 5.20 5.15 5.30 5.40 5.25 5.35 5.45 5.50 5.40 5.55 5.60 5.70
## 2024 5.65 5.70 5.80 5.90 5.75 5.85 5.95 6.00 5.90 6.05 6.15 6.30

b. Plot Runtun Waktu

plot(data_ts, 
     main = "Harga Gabah Kering Panen (GKP) Kabupaten Serang",
     xlab = "Tahun",
     ylab = "Harga per Kilo (Rp/kg)",
     col = "darkgreen",
     lwd = 2
     )

text(time(data_ts), data_ts,
     labels = data_ts,
     pos = 3, 
     cex = 0.7
     )

Berdasarkan plot runtun waktu, secara keseluruhan harga Gabah Kering Panen (GKP) Kabupaten Serang selama Januari 2023 - Desember 2024 menunjukkan adanya tren naik, meskipun terdapat penurunan harga dibulan tertentu. Harga GKP terendah berada di bulan Februari 2023, yaitu Rp5.150/kg, kemudian harga GKP tertinggi berada di bulan Desember 2024, yaitu Rp6.300/kg. Dengan demikian, data belum dapat dianggap stasioner sehingga perlu dilakukan transformasi dan differencing data.

2. Transformasi Logaritma

(log_gkp <- log(data_ts))
##           Jan      Feb      Mar      Apr      May      Jun      Jul      Aug
## 2023 1.648659 1.638997 1.667707 1.686399 1.658228 1.677097 1.695616 1.704748
## 2024 1.731656 1.740466 1.757858 1.774952 1.749200 1.766442 1.783391 1.791759
##           Sep      Oct      Nov      Dec
## 2023 1.686399 1.713798 1.722767 1.740466
## 2024 1.774952 1.800058 1.816452 1.840550
# Plot
plot(data_ts, 
     main = "Data Harga Gabah Kering Panen (GKP) Kabupaten Serang",
     xlab = "Tahun",
     ylab = "Harga per Kilo (Rp/kg)",
     col = "darkgreen",
     lwd = 2
     )

text(time(data_ts), data_ts,
     labels = data_ts,
     pos = 3, 
     cex = 0.7
     )

plot(log_gkp,
     main = "Data Harga GKP Setelah Transformasi Log",
     xlab = "Tahun",
     ylab = "Log Harga GKP",
     col = "orange",
     lwd = 2)

text(time(log_gkp), log_gkp,
     labels = round(log_gkp, 2),
     pos = 3, 
     cex = 0.7
     )

Setelah data dilakukan transformasi logaritma, harga menjadi lebih rendah dari sebelumnya, namun masih menunjukkan pola tren naik. Hal ini dikarenakan transformasi logaritma tidak secara langsung menghilangkan tren, sehingga masih diperlukan differencing data.

3. Differencing Tingkat Pertama Pada Data Hasil Transformasi

(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
sd(data_ts)
## [1] 0.3141514
sd(log_gkp)
## [1] 0.05539227
sd(diff_log_gkp)
## [1] 0.01725887
# Plot
plot(diff_log_gkp,
     main = "Differencing Tingkat Pertama Data Log Harga GKP",
     xlab = "Tahun",
     ylab = "Differenced Log GKP",
     col = "orange",
     lwd = 2)
abline(h = 0, lty = 2)

text(time(diff_log_gkp), diff_log_gkp,
     labels = round(diff_log_gkp, 2),
     pos = 3, 
     cex = 0.7
     )

Berdasarkan hasil standar deviasi, data asli memiliki nilai SD 0.3141514. Setelah ditransformasi logaritma, nilai SD turun menjadi 0.05539227. Kemudian menjadi 0.01725887 setelah differencing tingkat pertama. Hal ini menunjukkan bahwa setelah dilakukan transformasi dan differencing, variasi data semakin kecil.

Plot differencing tingkat pertama pada data hasil transformasi logaritma, sudah tidak menunjukkan adanya tren naik seperti pada plot sebelumnya. Pada hasil differencing, nilai berfluktuasi di sekitar garis nol dan relatif stabil sepanjang periode. Dengan demikian, data dapat dianggap stasioner.

4. Gunakan 21 Observasi Pertama Sebagai Data Latih dan 3 Observasi Terakhir Sebagai Data Uji

a. Ramalan Naif untuk 3 Bulan

# Data uji : 21 observasi 
(train <- head(data_GKP, 21))
##    Tahun Bulan  GKP
## 1   2023   Jan 5.20
## 2   2023   Feb 5.15
## 3   2023   Mar 5.30
## 4   2023   Apr 5.40
## 5   2023   May 5.25
## 6   2023   Jun 5.35
## 7   2023   Jul 5.45
## 8   2023   Aug 5.50
## 9   2023   Sep 5.40
## 10  2023   Oct 5.55
## 11  2023   Nov 5.60
## 12  2023   Dec 5.70
## 13  2024   Jan 5.65
## 14  2024   Feb 5.70
## 15  2024   Mar 5.80
## 16  2024   Apr 5.90
## 17  2024   May 5.75
## 18  2024   Jun 5.85
## 19  2024   Jul 5.95
## 20  2024   Aug 6.00
## 21  2024   Sep 5.90
# Data latih : 3 observasi
(test <- tail(data_GKP, 3))
##    Tahun Bulan  GKP
## 22  2024   Oct 6.05
## 23  2024   Nov 6.15
## 24  2024   Dec 6.30
# Ramalan naif
library(forecast)
## Warning: package 'forecast' was built under R version 4.4.3
naive_forecast <- rep(tail(train$GKP, 1), 3)

# Perbandingan 
(hasil_forecast <- data.frame(
  Bulan = c("Oktober 2024", "November 2024", "Desember 2024"),
  Aktual = as.numeric(test$GKP),
  Ramalan = as.numeric(naive_forecast)
))
##           Bulan Aktual Ramalan
## 1  Oktober 2024   6.05     5.9
## 2 November 2024   6.15     5.9
## 3 Desember 2024   6.30     5.9

Berdasarkan hasil perbandingan antara nilai aktual dan ramalan naif, nilai aktual GKP untuk 3 bulan pengujian lebih tinggi daripada hasil ramalan naif. Hasil ini menunjukkan bahwa metode naif menghasilkan ramalan yang cenderung lebih rendah dibandingkan nilai aktual. Dampaknya, metode naif kurang mampu mengikuti kenaikan harga GKP pada periode pengujian.

b. Hitung ME, MAE, MSE, RMSE, dan MAPE

(error <- test$GKP - naive_forecast)
## [1] 0.15 0.25 0.40
# ME 
ME <- mean(error)

# MAE
MAE <- mean(abs(error))

# MSE 
MSE <- mean(error^2)

# RMSE 
RMSE <- sqrt(MSE)

# MAPE 
MAPE <- mean(abs(error/test$GKP)) * 100

(evaluasi <- data.frame(
   ME = ME,
  MAE = MAE,
  MSE = MSE, 
  RMSE = RMSE,
  MAPE = MAPE
))
##          ME       MAE        MSE      RMSE     MAPE
## 1 0.2666667 0.2666667 0.08166667 0.2857738 4.297862
  1. ME = 0.2666667

Rata-rata nilai aktual lebih tinggi daripada hasil ramalan, yaitu Rp266,67/Kg. Artinya, metode naive cenderung menghasilkan ramalan yang lebih rendah dari nilai aktual pada tiga bulan pengujian.

  1. MAE = 0.2666667

Rata-rata kesalahan absolut ramalan adalah Rp266,67/Kg.

  1. MSE = 0.08166667

Nilai MSE menunjukkan rata-rata kuadrat kesalahan ramalan, yaitu sekitar 81.666,67 (Rp/kg)².

  1. RMSE = 0.2857738

RMSE menunjukkan besarnya kesalahan ramalan dalam satuan yang sama (Rp/Kg) dengan data asli, yaitu sebesar Rp285,77/Kg.

  1. MAPE = 4.297862

Secara rata-rata persentase kesalahan absolut ramalan terhadap nilai aktual adalah sekitar 4.29%.