Data
# Membaca data
data <- read_excel("~/topik statistika/UAS TOPIK STAT/data harian bmkg.xlsx")
data$TANGGAL <- as.Date(data$TANGGAL, format = "%d-%m-%Y")
head(data)
## # A tibble: 6 × 2
## TANGGAL jumlah_curah_hujan
## <date> <dbl>
## 1 2025-05-01 0
## 2 2025-05-02 0
## 3 2025-05-03 0
## 4 2025-05-04 0
## 5 2025-05-05 0
## 6 2025-05-06 4
Ubah data ke time series
# Mengubah kolom 'jumlah_curah_hujan' menjadi objek time series
data.ts <- ts(data$jumlah_curah_hujan, frequency = 30)
# Menampilkan hasil time series
print(head(data.ts, 35))
## Time Series:
## Start = c(1, 1)
## End = c(2, 5)
## Frequency = 30
## [1] 0.0 0.0 0.0 0.0 0.0 4.0 7.5 0.0 57.3 4.6 0.1 0.0 8.2 1.2 27.0
## [16] 1.0 5.0 41.2 29.0 0.6 0.0 0.0 24.9 21.6 0.0 27.4 10.8 0.0 0.0 0.0
## [31] 2.8 20.3 2.7 0.0 0.0
Uji Pola Musiman
plot(data$TANGGAL, data.ts,
type = "l",
xaxt = "n",
xlab = "Bulan",
ylab = "Jumlah Curah Hujan (Yt)",
col = "blue",
lwd = 1.5,
main = "Time Series Plot Curah Hujan Harian (Mei 2025 - April 2026)")
titik_bulan <- seq(from = min(data$TANGGAL), to = max(data$TANGGAL), by = "1 month")
axis.Date(side = 1, at = titik_bulan, format = "%b %Y", las = 2, cex.axis = 0.8)
data$Bulan_Tahun <- format(data$TANGGAL, "%Y-%m")
data_bulanan <- aggregate(jumlah_curah_hujan ~ Bulan_Tahun, data = data, FUN = sum)
label_bulan <- format(as.Date(paste0(data_bulanan$Bulan_Tahun, "-01")), "%b %Y")
barplot(data_bulanan$jumlah_curah_hujan,
names.arg = label_bulan,
las = 2,
col = "skyblue",
main = "Distribusi Musiman Jumlah Curah Hujan (Mei 2025 - April 2026)",
ylab = "Jumlah Curah Hujan (Yt)",
cex.names = 0.8)
berdasarkan plot time series dan diagram distribusi musiman jumlah curah
hujan tidak terlihat pola musiman pada data sehingga tidak representatif
jika menggunakan model SARIMA maka analisis selajutnya akan dilakukan
menggunakan model AR,MA,ARMA, dan ARIMA
Splitting data
80% Data Train = 292 Hari, 20% Data Test = 73 Hari
train.ts <- data.ts[1:292]
test.ts <- data.ts[293:365]
Uji kestasioneran varians data
# Stasioneritas Varians (Box-Cox)
lambda_opt <- BoxCox.lambda(train.ts)
## Warning in guerrero(x, lower, upper): Guerrero's method for selecting a Box-Cox
## parameter (lambda) is given for strictly positive data.
cat("Nilai Lambda Box-Cox:", round(lambda_opt, 4), "\n")
## Nilai Lambda Box-Cox: 0.0382
Uji kestasioneran rataan data
Mengidentifikasi kestasioneran data dilakukan dengan uji ADF. Uji Augmented Dickey-Fuller (ADF) adalah salah satu alat identifikasi untuk menguji kestasioneran data dan memiliki hipotesis sebagai berikut:
\(𝐻_0:\)Data tidak stasioner (unit roots mendekati 1)
\(𝐻_1:\)Data stasioner (unit roots tidak mendekati 1)
cat("\n--- Uji ADF Data Train ---\n")
##
## --- Uji ADF Data Train ---
print(adf.test(train.ts))
## Warning in adf.test(train.ts): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: train.ts
## Dickey-Fuller = -5.3971, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
Berdasarkan hasil uji ADF dengan taraf signifikansi \(\alpha = 5\%\) di atas dapat diketahui bersama bahwa \(p-value = 0.01 < \alpha = 0.05\) sehingga keputusan yang diambil adalah Tolak \(H_0\) artinya data yang digunakan merupakan data yang stasioner.
Identifikasi kandidat model ARIMA
Identifikasi kandidat model diperoleh berdasarkan nilai p dan q dimana nilai d=0
acf(train.ts, main="ACF Data Train")
Berdasarkan plot ACF terlihat bahwa plot cuts off setelah lag ke-3
sehingga kandidat model yang diperoleh adalah ARMA(0,0,3)
pacf(train.ts, main="PACF Data Train")
Berdasarkan plot PACF di atas kandidat model yang diperoleh adalah
ARMA(3,0,0)
cat("\n--- Extended ACF (EACF) ---\n")
##
## --- Extended ACF (EACF) ---
eacf(train.ts)
## AR/MA
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 o o x o o o o o o o o o o o
## 1 o o o o o o o o o o o o o o
## 2 x x o o o o o o o o o o o o
## 3 x x x o o o o o o o o o o o
## 4 x x x o o o o o o o o o o o
## 5 x x o x x o o o o o o o o o
## 6 x o x x o x o o o o o o o o
## 7 x x x x x o x o o o o o o o
Berdasarkan hasil EACF di atas kandidat model yang diperoleh adalah ARMA(1,0,2),ARMA(0,0,4), dan ARMA(2,0,2)
Dibandingkan dengan auto.arima
auto.arima(train.ts)
## Series: train.ts
## ARIMA(0,0,0) with non-zero mean
##
## Coefficients:
## mean
## 8.0017
## s.e. 0.8106
##
## sigma^2 = 192.5: log likelihood = -1181.81
## AIC=2367.62 AICc=2367.66 BIC=2374.97