library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)

# Memuat dataset
data <- readxl::read_excel("datamit.xlsx")

data
## # A tibble: 60 × 3
##    Tahun Bulan `Curah Hujan`
##    <dbl> <dbl>         <dbl>
##  1  2019     1           263
##  2  2019     2           236
##  3  2019     3           445
##  4  2019     4           364
##  5  2019     5            60
##  6  2019     6            61
##  7  2019     7             2
##  8  2019     8           238
##  9  2019     9           238
## 10  2019    10           238
## # ℹ 50 more rows
# Menghapus baris dengan nilai nol pada kolom Curah Hujan
data <- data %>% filter(`Curah Hujan` != 0)
# Mengidentifikasi outliers
boxplot(data$`Curah Hujan`, main = "Boxplot Curah Hujan", ylab = "Curah Hujan (mm)")

# Mengidentifikasi outliers
outliers <- boxplot.stats(data$`Curah Hujan`)$out

# Menghapus outliers dari data
data <- data[!data$`Curah Hujan` %in% outliers, ]

identifikasi dan penghapusan outlier

boxplot yang digunakan untuk mengidentifikasi outlier dalam data curah hujan. Sumbu vertikal pada plot ini menunjukkan nilai curah hujan dalam milimeter (mm). Kotak dalam boxplot tersebut mewakili rentang interkuartil (interquartile range, IQR) yang terdiri dari kuartil pertama (Q1) hingga kuartil ketiga (Q3), di mana bagian bawah kotak adalah Q1 (25% dari data) dan bagian atas kotak adalah Q3 (75% dari data). Garis yang berada di dalam kotak menunjukkan median (Q2), yaitu nilai tengah dari data.

Garis vertikal atau whisker yang memanjang dari kotak menunjukkan rentang data yang bukan outlier, dengan batas bawah whisker sebagai nilai minimum yang tidak dianggap outlier dan batas atas whisker sebagai nilai maksimum yang tidak dianggap outlier. Titik-titik yang berada di atas whisker menunjukkan nilai yang dianggap sebagai outlier, yaitu nilai yang lebih tinggi dari Q3 + 1.5IQR atau lebih rendah dari Q1 - 1.5IQR.

Dari boxplot ini, kita dapat melihat beberapa outlier di bagian atas yang menunjukkan adanya periode dengan curah hujan yang sangat tinggi dibandingkan dengan sebagian besar data lainnya. Rentang utama curah hujan berada antara sekitar 0 mm hingga 600 mm, dengan beberapa nilai ekstrem di atas 800 mm. Boxplot ini memberikan gambaran yang jelas tentang distribusi data curah hujan serta mengidentifikasi nilai-nilai yang tidak biasa atau ekstrem

# Transformasi logaritmik
data$`Curah Hujan` <- log(data$`Curah Hujan`)

# Mengonversi dataset menjadi objek time series
Data <- ts(data$`Curah Hujan`, start = c(data$Tahun[1], data$Bulan[1]),frequency = 12)

Data
##            Jan       Feb       Mar       Apr       May       Jun       Jul
## 2019 5.5721540 5.4638318 6.0980743 5.8971539 4.0943446 4.1108739 0.6931472
## 2020 6.2672005 6.2897156 5.5759491 4.6051702 5.2257467 4.2904594 2.1972246
## 2021 6.5250297 6.0684256 4.1896547 4.3438054 3.7376696 4.1588831 4.7449321
## 2022 4.1588831 5.7493930 4.6728288 1.9459101 3.7376696 3.8501476 5.9661467
## 2023 4.2484952 3.6888795 4.2046926 5.4806389 2.0794415 4.6539604 5.0814044
##            Aug       Sep       Oct       Nov       Dec
## 2019 5.4722707 5.4722707 5.4722707 4.3567088 5.6383547
## 2020 2.7725887 3.1354942 3.9889840 5.5174529 6.0730445
## 2021 4.7004804 5.8021184 6.4861608 6.4922398 5.4722707
## 2022 5.8377304 6.6187390 6.5352413 5.0937502 5.4595855
## 2023

transformasi logaritmik dan konversi ke time series

Data yang sudah di import dilakukan modifikasi susunan data agar menjadi time series seperti data di atas. Data dibagi 5 periode dengan setiap periode 12 bulan

library(TSstudio)

# Plot data time series
ts_plot(Data, 
        title = "Data Curah Hujan",
        Xtitle = "Bulan",
        Ytitle = "Curah Hujan (mm)")
# Ringkasan data time series
summary(Data)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.6931  4.1589  5.0938  4.8376  5.7758  6.6187
# Dekomposisi data time series
vis.data <- decompose(Data)
plot(vis.data)

Plot data time series

grafik garis yang menunjukkan data curah hujan dari tahun 2019 hingga 2023. Sumbu vertikal pada grafik menunjukkan curah hujan dalam milimeter (mm), sedangkan sumbu horizontal menunjukkan rentang waktu dari tahun 2019 hingga 2023. Grafik ini memperlihatkan fluktuasi yang signifikan dalam curah hujan dari tahun ke tahun, dengan beberapa periode menunjukkan curah hujan yang sangat tinggi dan periode lainnya dengan curah hujan yang lebih rendah. Terdapat beberapa puncak curah hujan tinggi sekitar tahun 2020 dan 2021, serta beberapa lembah curah hujan rendah di akhir tahun 2019 dan pertengahan 2021. Setiap tahun memiliki pola curah hujan yang berbeda, dengan beberapa tahun menunjukkan variasi yang lebih tajam dibandingkan tahun lainnya. Meskipun terdapat fluktuasi, tidak ada tren umum yang jelas terlihat apakah curah hujan secara keseluruhan meningkat atau menurun selama periode ini. Grafik ini membantu dalam memahami pola curah hujan selama beberapa tahun terakhir dan dapat digunakan untuk analisis lebih lanjut, seperti melihat dampak perubahan iklim atau perencanaan pengelolaan air berdasarkan data historis curah hujan

Ringkasan data time series

ringkasan statistik deskriptif dari data curah hujan. Statistik ini mencakup beberapa metrik penting yang memberikan gambaran umum tentang distribusi data. Nilai minimum curah hujan yang tercatat adalah 0.6931 mm, sementara nilai maksimum adalah 6.6187 mm. Kuartil pertama (1st Qu.) atau persentil ke-25 adalah 4.1589 mm, yang berarti 25% dari data berada di bawah nilai ini. Median, atau nilai tengah dari data, adalah 5.0938 mm, yang menunjukkan bahwa setengah dari data berada di bawah dan setengahnya lagi berada di atas nilai ini. Rata-rata (mean) curah hujan adalah 4.8376 mm, yang merupakan nilai rata-rata dari seluruh data. Kuartil ketiga (3rd Qu.) atau persentil ke-75 adalah 5.7758 mm, menunjukkan bahwa 75% dari data berada di bawah nilai ini. Data ini memberikan gambaran yang jelas tentang distribusi dan rentang curah hujan, serta membantu dalam memahami variasi dan kecenderungan dalam data curah hujan

Dekomposisi data time series

dekomposisi dari seri waktu aditif yang terdiri dari empat komponen: observed, trend, seasonal, dan random. Panel observed menampilkan data asli curah hujan dari tahun 2019 hingga 2023, memperlihatkan fluktuasi curah hujan sepanjang periode tersebut. Panel trend menunjukkan komponen tren, menggambarkan pola jangka panjang dalam data dengan adanya peningkatan dan penurunan yang lambat dari tahun ke tahun. Panel seasonal menggambarkan komponen musiman, menangkap pola berulang yang terjadi pada interval yang konsisten setiap tahun. Panel random menunjukkan komponen acak atau residual yang mencakup variasi acak dan kebisingan dalam data yang tidak memiliki pola yang jelas. Dekomposisi ini membantu dalam memahami berbagai komponen yang berkontribusi terhadap variasi dalam data curah hujan, memisahkan efek tren jangka panjang, pola musiman, dan variasi acak

library(forecast)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
# Menerapkan metode Holt-Winters untuk peramalan
model <- HoltWinters(Data)
model
## Holt-Winters exponential smoothing with trend and additive seasonal component.
## 
## Call:
## HoltWinters(x = Data)
## 
## Smoothing parameters:
##  alpha: 0.0400089
##  beta : 0.01858577
##  gamma: 0.7913545
## 
## Coefficients:
##            [,1]
## a    4.14831124
## b   -0.02512585
## s1   1.13745547
## s2   1.91461565
## s3   1.97923894
## s4   0.92368141
## s5   1.09606023
## s6  -0.01399181
## s7  -0.12277034
## s8   0.06662880
## s9   0.56183124
## s10 -1.76968147
## s11  0.29099056
## s12  0.99243526
# Peramalan untuk 12 bulan ke depan
prediksi <- forecast(object = model, h = 12)
prediksi
##          Point Forecast     Lo 80    Hi 80     Lo 95    Hi 95
## Aug 2023       5.260641 3.4266249 7.094657  2.455755 8.065526
## Sep 2023       6.012675 4.1771369 7.848213  3.205462 8.819889
## Oct 2023       6.052173 4.2150573 7.889288  3.242547 8.861798
## Nov 2023       4.971489 3.1327413 6.810237  2.159367 7.783612
## Dec 2023       5.118742 3.2783052 6.959179  2.304037 7.933448
## Jan 2024       3.983564 2.1413809 5.825748  1.166188 6.800941
## Feb 2024       3.849660 2.0056720 5.693648  1.029524 6.669796
## Mar 2024       4.013933 2.1680817 5.859785  1.190947 6.836920
## Apr 2024       4.484010 2.6362349 6.331785  1.658082 7.309938
## May 2024       2.127371 0.2776123 3.977130 -0.701591 4.956334
## Jun 2024       4.162917 2.3111129 6.014722  1.330827 6.995008
## Jul 2024       4.839236 2.9853240 6.693149  2.003922 7.674550

Menerapkan metode Holt-Winters untuk peramalan

hasil dari pemulusan eksponensial Holt-Winters dengan tren dan komponen musiman aditif untuk data curah hujan. Parameter pemulusan yang digunakan adalah alpha sebesar 0.0400089, beta sebesar 0.01858577, dan gamma sebesar 0.7913545. Koefisien yang dihasilkan meliputi nilai awal a sebesar 4.14831124 dan nilai b sebesar -0.02512585, serta koefisien musiman untuk masing-masing periode: s1 sebesar 1.13745547, s2 sebesar 1.91461565, s3 sebesar 1.97923894, s4 sebesar 0.92368141, s5 sebesar 1.09606023, s6 sebesar -0.01399181, s7 sebesar -0.12277034, s8 sebesar 0.06662880, s9 sebesar 0.56183124, s10 sebesar -1.76968147, s11 sebesar 0.20999056, dan s12 sebesar 0.99245326. Hasil ini menunjukkan bagaimana metode Holt-Winters digunakan untuk menghaluskan data curah hujan dengan mempertimbangkan tren jangka panjang dan pola musiman yang berulang

Peramalan untuk 12 bulan ke depan

perkiraan curah hujan bulanan beserta interval kepercayaan untuk tahun 2024. Berikut adalah data yang telah dikoreksi dengan bulan dimulai dari Januari 2024:

Perkiraan ini memberikan gambaran tentang curah hujan yang diharapkan untuk setiap bulan di tahun 2024, termasuk rentang kemungkinan berdasarkan interval kepercayaan 80% dan 95%.

# Memisahkan data menjadi set pelatihan dan pengujian
train <- head(Data, length(Data) - 12)
test <- tail(Data, 12)

# Plot data peramalan dengan data aktual
library(ggplot2)
autoplot(prediksi) + autolayer(test)

# Menghitung akurasi model
accuracy(model$fitted[,1], Data)
##                 ME     RMSE     MAE       MPE     MAPE      ACF1 Theil's U
## Test set 0.2160142 1.430753 1.08268 -1.105561 26.58261 0.2314613  1.083669

Plot data peramalan dengan data aktual

hasil perkiraan curah hujan menggunakan metode Holt-Winters. Grafik ini menampilkan data historis curah hujan dari tahun 2019 hingga 2023, dengan garis hitam menunjukkan data aktual. Bagian merah dari grafik mewakili data uji, sedangkan bagian biru menunjukkan perkiraan curah hujan untuk tahun 2024. Area berwarna biru muda di sekitar garis perkiraan menunjukkan interval kepercayaan, yang mencerminkan ketidakpastian dalam perkiraan. Semakin lebar area biru muda, semakin tinggi ketidakpastiannya. Grafik ini memberikan visualisasi yang jelas tentang bagaimana metode Holt-Winters digunakan untuk memprediksi curah hujan masa depan berdasarkan tren dan pola musiman dari data historis.

Menghitung akurasi model

metrik evaluasi untuk model prediksi curah hujan menggunakan metode Holt-Winters pada set data uji. Metrik yang disajikan meliputi Mean Error (ME) sebesar 0.2160142, Root Mean Square Error (RMSE) sebesar 1.430753, Mean Absolute Error (MAE) sebesar 1.08268, Mean Percentage Error (MPE) sebesar -1.105561, dan Mean Absolute Percentage Error (MAPE) sebesar 26.58261. Selain itu, metrik ACF1 menunjukkan autokorelasi lag pertama sebesar 0.2314613, dan nilai Theil’s U sebesar 1.083669. Nilai-nilai ini memberikan gambaran tentang akurasi dan performa model prediksi, di mana RMSE dan MAE menunjukkan rata-rata kesalahan dalam satuan asli data, sedangkan MAPE menunjukkan rata-rata kesalahan dalam persentase. Theil’s U yang mendekati 1 menunjukkan bahwa model memiliki performa yang cukup baik dalam memprediksi curah hujan dibandingkan dengan model prediksi naive.