UAS TOPIK STATISTIKA I

SAYYID RAFIF

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