# TUGAS KELOMPOK: PENGUJIAN STASIONERITAS
# Memanggil paket
library(readxl)
## Warning: package 'readxl' was built under R version 4.5.3
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.3
library(tseries)
## Warning: package 'tseries' was built under R version 4.5.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
# Membaca file Excel
# Pilih file Excel yang sudah diberikan ketika jendela terbuka
data <- read_excel(
"C:/Users/ASUS/Downloads/Analisis Deret Waktu/curah_hujan_palangka_raya_BPS_terverifikasi_2022_2024.xlsx", sheet = "Data Bulanan")
# Mengubah kolom periode menjadi format tanggal
data$Tanggal <- as.Date(
paste0(data$Periode, "-01")
)
# Memastikan variabel curah hujan berbentuk numerik
data$`Curah Hujan (mm)` <- as.numeric(
data$`Curah Hujan (mm)`
)
# Membuat objek deret waktu
curah_hujan <- ts(
data$`Curah Hujan (mm)`,
start = c(2022, 1),
frequency = 12
)
# 7. Memeriksa struktur dan jumlah data
str(data)
## tibble [36 × 7] (S3: tbl_df/tbl/data.frame)
## $ Periode : chr [1:36] "2022-01" "2022-02" "2022-03" "2022-04" ...
## $ Tahun : num [1:36] 2022 2022 2022 2022 2022 ...
## $ Bulan : chr [1:36] "Januari" "Februari" "Maret" "April" ...
## $ Curah Hujan (mm) : num [1:36] 346 252 301 283 327 244 194 107 270 301 ...
## $ Publikasi BPS / catatan sumber: chr [1:36] "BPS Kota Palangka Raya, tabel statistik “Jumlah Curah Hujan Menurut Bulan di Kota Palangka Raya”, 2022" "BPS Kota Palangka Raya, tabel statistik “Jumlah Curah Hujan Menurut Bulan di Kota Palangka Raya”, 2022" "BPS Kota Palangka Raya, tabel statistik “Jumlah Curah Hujan Menurut Bulan di Kota Palangka Raya”, 2022" "BPS Kota Palangka Raya, tabel statistik “Jumlah Curah Hujan Menurut Bulan di Kota Palangka Raya”, 2022" ...
## $ Link publikasi : chr [1:36] "https://palangkakota.bps.go.id/id/statistics-table/2/MjkxIzI%3D/amount-of-precipitation-by-month-in-palangka-ra"| __truncated__ "https://palangkakota.bps.go.id/id/statistics-table/2/MjkxIzI%3D/amount-of-precipitation-by-month-in-palangka-ra"| __truncated__ "https://palangkakota.bps.go.id/id/statistics-table/2/MjkxIzI%3D/amount-of-precipitation-by-month-in-palangka-ra"| __truncated__ "https://palangkakota.bps.go.id/id/statistics-table/2/MjkxIzI%3D/amount-of-precipitation-by-month-in-palangka-ra"| __truncated__ ...
## $ Tanggal : Date[1:36], format: "2022-01-01" "2022-02-01" ...
cat("Jumlah observasi:", length(curah_hujan), "\n")
## Jumlah observasi: 36
cat("Frekuensi: Bulanan\n")
## Frekuensi: Bulanan
cat("Periode: Januari 2022 - Desember 2024\n")
## Periode: Januari 2022 - Desember 2024
# LANGKAH 2: PENGAMATAN POLA DATA
# Grafik deret waktu dengan garis rata-rata
rata_rata <- mean(curah_hujan, na.rm = TRUE)
ggplot(data, aes(x = Tanggal,
y = `Curah Hujan (mm)`)) +
geom_line(color = "steelblue", linewidth = 0.8) +
geom_hline(
yintercept = rata_rata,
color = "red",
linetype = "dashed"
) +
labs(
title = "Pola Curah Hujan dan Garis Rata-rata",
x = "Periode",
y = "Curah Hujan (mm)"
) +
theme_minimal()

# Membandingkan rata-rata dan varians setiap tahun
ringkasan_tahunan <- aggregate(
`Curah Hujan (mm)` ~ Tahun,
data = data,
FUN = function(x) mean(x, na.rm = TRUE)
)
names(ringkasan_tahunan)[2] <- "Rata_rata"
varians_tahunan <- aggregate(
`Curah Hujan (mm)` ~ Tahun,
data = data,
FUN = function(x) var(x, na.rm = TRUE)
)
names(varians_tahunan)[2] <- "Varians"
perbandingan_tahunan <- merge(
ringkasan_tahunan,
varians_tahunan,
by = "Tahun"
)
print(perbandingan_tahunan)
## Tahun Rata_rata Varians
## 1 2022 266.000 5821.636
## 2 2023 218.850 17489.272
## 3 2024 268.675 21819.851
# Grafik pola bulanan berdasarkan seluruh tahun
data$Bulan <- factor(
data$Bulan,
levels = 1:12,
labels = c("Jan", "Feb", "Mar", "Apr", "Mei", "Jun",
"Jul", "Agu", "Sep", "Okt", "Nov", "Des")
)
ggplot(data, aes(x = Bulan,
y = `Curah Hujan (mm)`)) +
geom_boxplot(fill = "lightblue") +
labs(
title = "Sebaran Curah Hujan Berdasarkan Bulan",
x = "Bulan",
y = "Curah Hujan (mm)"
) +
theme_minimal()

# LANGKAH 3: UJI ADF DAN KPSS
# Uji Augmented Dickey-Fuller (ADF)
hasil_adf <- adf.test(
curah_hujan,
alternative = "stationary"
)
cat("HASIL UJI ADF\n")
## HASIL UJI ADF
print(hasil_adf)
##
## Augmented Dickey-Fuller Test
##
## data: curah_hujan
## Dickey-Fuller = -2.8417, Lag order = 3, p-value = 0.2456
## alternative hypothesis: stationary
# Uji Kwiatkowski-Phillips-Schmidt-Shin (KPSS)
hasil_kpss <- kpss.test(
curah_hujan,
null = "Level"
)
## Warning in kpss.test(curah_hujan, null = "Level"): p-value greater than printed
## p-value
cat("\nHASIL UJI KPSS\n")
##
## HASIL UJI KPSS
print(hasil_kpss)
##
## KPSS Test for Level Stationarity
##
## data: curah_hujan
## KPSS Level = 0.060493, Truncation lag parameter = 3, p-value = 0.1
# Menampilkan statistik uji dan p-value
cat("\nRingkasan pengujian:\n")
##
## Ringkasan pengujian:
cat("Statistik ADF:", unname(hasil_adf$statistic), "\n")
## Statistik ADF: -2.841719
cat("P-value ADF:", hasil_adf$p.value, "\n")
## P-value ADF: 0.2456345
cat("Statistik KPSS:", unname(hasil_kpss$statistic), "\n")
## Statistik KPSS: 0.06049292
cat("P-value KPSS:", hasil_kpss$p.value, "\n")
## P-value KPSS: 0.1
# LANGKAH 4: HIPOTESIS DAN KEPUTUSAN UJI
alpha <- 0.05
# Hipotesis ADF
cat("UJI ADF\n")
## UJI ADF
cat("H0: Data tidak stasioner (memiliki akar unit).\n")
## H0: Data tidak stasioner (memiliki akar unit).
cat("H1: Data stasioner.\n")
## H1: Data stasioner.
cat("Statistik uji:", unname(hasil_adf$statistic), "\n")
## Statistik uji: -2.841719
cat("P-value:", hasil_adf$p.value, "\n")
## P-value: 0.2456345
if (hasil_adf$p.value < alpha) {
cat("Keputusan: Tolak H0.\n")
cat("Interpretasi: ADF menunjukkan data stasioner.\n")
} else {
cat("Keputusan: Gagal menolak H0.\n")
cat("Interpretasi: ADF belum menunjukkan data stasioner.\n")
}
## Keputusan: Gagal menolak H0.
## Interpretasi: ADF belum menunjukkan data stasioner.
# Hipotesis KPSS
cat("\nUJI KPSS\n")
##
## UJI KPSS
cat("H0: Data stasioner pada level.\n")
## H0: Data stasioner pada level.
cat("H1: Data tidak stasioner pada level.\n")
## H1: Data tidak stasioner pada level.
cat("Statistik uji:", unname(hasil_kpss$statistic), "\n")
## Statistik uji: 0.06049292
cat("P-value:", hasil_kpss$p.value, "\n")
## P-value: 0.1
if (hasil_kpss$p.value < alpha) {
cat("Keputusan: Tolak H0.\n")
cat("Interpretasi: KPSS menunjukkan data tidak stasioner.\n")
} else {
cat("Keputusan: Gagal menolak H0.\n")
cat("Interpretasi: KPSS mendukung stasioneritas pada level.\n")
}
## Keputusan: Gagal menolak H0.
## Interpretasi: KPSS mendukung stasioneritas pada level.
# LANGKAH 5: DIFFERENCING ORDE PERTAMA JIKA DIPERLUKAN
# Kondisi stasioner berdasarkan masing-masing pengujian
adf_stasioner <- hasil_adf$p.value < alpha
kpss_stasioner <- hasil_kpss$p.value >= alpha
# Differencing dilakukan jika salah satu pengujian
# mengindikasikan bahwa stasioneritas belum terpenuhi
if (adf_stasioner && kpss_stasioner) {
cat("Data memenuhi indikasi stasioneritas pada level.\n")
cat("Differencing tidak diperlukan.\n")
curah_hujan_analisis <- curah_hujan
} else {
cat("Stasioneritas perlu diperiksa lebih lanjut.\n")
cat("Melakukan differencing orde pertama.\n")
# Differencing orde pertama
curah_hujan_diff <- diff(curah_hujan, differences = 1)
# Uji ulang ADF
hasil_adf_diff <- adf.test(
curah_hujan_diff,
alternative = "stationary"
)
# Uji ulang KPSS
hasil_kpss_diff <- kpss.test(
curah_hujan_diff,
null = "Level"
)
cat("\nHASIL ADF SETELAH DIFFERENCING\n")
print(hasil_adf_diff)
cat("\nHASIL KPSS SETELAH DIFFERENCING\n")
print(hasil_kpss_diff)
# Data untuk analisis lanjutan
curah_hujan_analisis <- curah_hujan_diff
}
## Stasioneritas perlu diperiksa lebih lanjut.
## Melakukan differencing orde pertama.
## Warning in kpss.test(curah_hujan_diff, null = "Level"): p-value greater than
## printed p-value
##
## HASIL ADF SETELAH DIFFERENCING
##
## Augmented Dickey-Fuller Test
##
## data: curah_hujan_diff
## Dickey-Fuller = -2.6889, Lag order = 3, p-value = 0.3056
## alternative hypothesis: stationary
##
##
## HASIL KPSS SETELAH DIFFERENCING
##
## KPSS Test for Level Stationarity
##
## data: curah_hujan_diff
## KPSS Level = 0.10355, Truncation lag parameter = 3, p-value = 0.1
# Memeriksa data yang digunakan untuk analisis lanjutan
cat("\nJumlah observasi setelah pemilihan data:",
length(curah_hujan_analisis), "\n")
##
## Jumlah observasi setelah pemilihan data: 35
# LANGKAH 6: PERBANDINGAN DAN KESIMPULAN
# Statistik data asli
ringkasan_asli <- c(
Rata_rata = mean(curah_hujan, na.rm = TRUE),
Varians = var(curah_hujan, na.rm = TRUE),
Simpangan_baku = sd(curah_hujan, na.rm = TRUE)
)
cat("RINGKASAN DATA ASLI\n")
## RINGKASAN DATA ASLI
print(ringkasan_asli)
## Rata_rata Varians Simpangan_baku
## 251.1750 14722.5596 121.3366
# Memeriksa apakah differencing dilakukan
if (exists("curah_hujan_diff")) {
# Statistik setelah differencing
ringkasan_diff <- c(
Rata_rata = mean(curah_hujan_diff, na.rm = TRUE),
Varians = var(curah_hujan_diff, na.rm = TRUE),
Simpangan_baku = sd(curah_hujan_diff, na.rm = TRUE)
)
cat("\nRINGKASAN SETELAH DIFFERENCING\n")
print(ringkasan_diff)
# Grafik perbandingan
par(mfrow = c(2, 1))
plot(
curah_hujan,
type = "l",
main = "Data Curah Hujan Asli",
xlab = "Waktu (bulan)",
ylab = "Curah hujan (mm)"
)
plot(
curah_hujan_diff,
type = "l",
main = "Data Setelah Differencing Orde Pertama",
xlab = "Waktu (bulan)",
ylab = "Perubahan curah hujan (mm)"
)
par(mfrow = c(1, 1))
# Keputusan berdasarkan hasil kedua uji setelah differencing
adf_akhir <- hasil_adf_diff$p.value < alpha
kpss_akhir <- hasil_kpss_diff$p.value >= alpha
if (adf_akhir && kpss_akhir) {
cat("\nKESIMPULAN:\n")
cat("Kedua uji mendukung stasioneritas setelah differencing.\n")
} else {
cat("\nKESIMPULAN:\n")
cat("Stasioneritas belum didukung secara konsisten oleh kedua uji.\n")
cat("Perlu pemeriksaan lanjutan terhadap tren dan pola musiman.\n")
}
} else {
cat("\nKESIMPULAN:\n")
cat("Differencing tidak diperlukan berdasarkan hasil uji awal.\n")
cat("ADF dan KPSS mendukung stasioneritas pada level.\n")
plot(
curah_hujan,
type = "l",
main = "Data Curah Hujan: Tidak Dilakukan Differencing",
xlab = "Waktu (bulan)",
ylab = "Curah hujan (mm)"
)
}
##
## RINGKASAN SETELAH DIFFERENCING
## Rata_rata Varians Simpangan_baku
## 2.145714 17295.459025 131.512201

##
## KESIMPULAN:
## Stasioneritas belum didukung secara konsisten oleh kedua uji.
## Perlu pemeriksaan lanjutan terhadap tren dan pola musiman.