1. Pendahuluan

Analisis ini bertujuan memeriksa asumsi-asumsi ANOVA satu arah menggunakan data kesehatan menurut provinsi tahun 2025. Variabel respons adalah angka kesakitan Demam Berdarah Dengue (DBD) per 100.000 penduduk, sedangkan faktor pengelompokan adalah wilayah.

Fokus analisis: memeriksa independensi pengamatan, normalitas residual, homogenitas varians, rataan residual, serta menjelaskan keterbatasan pengujian efek aditif pada model satu faktor.

2. Persiapan Data

file_data <- "C:/Users/Marcella/Downloads/Kasus Penyakit Menurut Provinsi dan Jenis Penyakit, 2025 (3).xlsx"
Penyakit <- read_excel(file_data)

kolom_prov <- "Provinsi"
kolom_dbd <- grep(
  "Angka Kesakitan DBD per 100.000 Penduduk",
  names(Penyakit), fixed = TRUE, value = TRUE
)[1]
if (is.na(kolom_dbd)) stop("Kolom DBD tidak ditemukan. Periksa names(Penyakit).")

dat <- data.frame(
  Provinsi = trimws(as.character(Penyakit[[kolom_prov]])),
  DBD = suppressWarnings(as.numeric(as.character(Penyakit[[kolom_dbd]])))
)

wilayah_list <- list(
  Sumatra = c("Aceh", "Sumatera Utara", "Sumatera Barat", "Riau", "Jambi",
              "Sumatera Selatan", "Bengkulu", "Lampung",
              "Kepulauan Bangka Belitung", "Kepulauan Riau"),
  Jawa = c("DKI Jakarta", "Jawa Barat", "Jawa Tengah", "DI Yogyakarta",
           "Daerah Istimewa Yogyakarta", "Jawa Timur", "Banten"),
  `Bali-Nusa Tenggara` = c("Bali", "Nusa Tenggara Barat", "Nusa Tenggara Timur"),
  Kalimantan = c("Kalimantan Barat", "Kalimantan Tengah", "Kalimantan Selatan",
                 "Kalimantan Timur", "Kalimantan Utara"),
  Sulawesi = c("Sulawesi Utara", "Sulawesi Tengah", "Sulawesi Selatan",
               "Sulawesi Tenggara", "Gorontalo", "Sulawesi Barat"),
  Maluku = c("Maluku", "Maluku Utara"),
  Papua = c("Papua", "Papua Barat", "Papua Barat Daya", "Papua Selatan",
            "Papua Tengah", "Papua Pegunungan")
)
wilayah_prov <- setNames(rep(names(wilayah_list), lengths(wilayah_list)),
                         unlist(wilayah_list))
dat$Wilayah <- unname(wilayah_prov[dat$Provinsi])
dat <- dat[!is.na(dat$Wilayah) & !is.na(dat$DBD), ]
dat$Wilayah <- factor(dat$Wilayah, levels = names(wilayah_list))

knitr::kable(head(dat, 10),
  col.names = c("Provinsi", "Angka Kesakitan DBD", "Wilayah"),
  digits = 2, caption = "Cuplikan 10 observasi pertama yang dianalisis")
Cuplikan 10 observasi pertama yang dianalisis
Provinsi Angka Kesakitan DBD Wilayah
Aceh 37.08 Sumatra
Sumatera Utara 27.91 Sumatra
Sumatera Barat 41.63 Sumatra
Riau 54.07 Sumatra
Jambi 37.87 Sumatra
Sumatera Selatan 45.57 Sumatra
Bengkulu 41.35 Sumatra
Lampung 69.21 Sumatra
Kepulauan Bangka Belitung 104.72 Sumatra
Kepulauan Riau 91.31 Sumatra
ringkasan <- data.frame(
  Keterangan = c("Jumlah observasi valid", "Jumlah provinsi unik",
                 "Jumlah nama provinsi ganda"),
  Hasil = c(nrow(dat), length(unique(dat$Provinsi)), sum(duplicated(dat$Provinsi)))
)
knitr::kable(ringkasan, caption = "Ringkasan data")
Ringkasan data
Keterangan Hasil
Jumlah observasi valid 36
Jumlah provinsi unik 36
Jumlah nama provinsi ganda 0

3. Pemeriksaan Independensi

Independensi berarti satu pengamatan tidak dipengaruhi oleh pengamatan lainnya. Pemeriksaan awal dilakukan dengan mengecek apakah nama provinsi muncul lebih dari satu kali.

cat("Jumlah provinsi unik:", length(unique(dat$Provinsi)), "\n")
## Jumlah provinsi unik: 36
cat("Jumlah provinsi ganda:", sum(duplicated(dat$Provinsi)), "\n")
## Jumlah provinsi ganda: 0
dat$Provinsi[duplicated(dat$Provinsi)]
## character(0)
Interpretasi: tidak adanya nama provinsi ganda berarti tidak ditemukan duplikasi nama. Namun, hal ini tidak membuktikan independensi secara statistik. Karena data berbasis wilayah geografis, keterkaitan kondisi antarprovinsi tetap perlu dipertimbangkan.

4. Model ANOVA Satu Arah

model <- aov(DBD ~ Wilayah, data = dat)
hasil_anova <- summary(model)
knitr::kable(as.data.frame(hasil_anova[[1]]), digits = 4,
             caption = "Hasil ANOVA satu arah")
Hasil ANOVA satu arah
Df Sum Sq Mean Sq F value Pr(>F)
Wilayah 6 20877.20 3479.533 2.3023 0.0612
Residuals 29 43827.93 1511.308 NA NA

Model ini membandingkan rata-rata angka kesakitan DBD antarwilayah.

5. Uji Normalitas Residual

Uji normalitas dilakukan terhadap residual model menggunakan uji Shapiro-Wilk.

res <- residuals(model)
uji_normal <- shapiro.test(res)
uji_normal
## 
##  Shapiro-Wilk normality test
## 
## data:  res
## W = 0.86979, p-value = 0.0005624

Berdasarkan hasil uji Shapiro-Wilk, diperoleh nilai W sebesar 0,86979 dan p-value sebesar 0,0005624. Karena p-value lebih kecil dari taraf signifikansi 0,05, maka H₀ ditolak. Artinya, residual model ANOVA tidak berdistribusi normal sehingga asumsi normalitas belum terpenuhi.

qqnorm(res, main = "Q-Q Plot Residual ANOVA", pch = 19, col = warna_ungu)
qqline(res, col = warna_pink, lwd = 2)
Q-Q Plot untuk memeriksa normalitas residual

Q-Q Plot untuk memeriksa normalitas residual

hist(res, main = "Histogram Residual", xlab = "Residual", ylab = "Frekuensi",
     col = warna_biru, border = "white")
Distribusi residual model ANOVA

Distribusi residual model ANOVA

Kriteria pada taraf signifikansi 5%: p-value > 0,05 berarti tidak ada bukti yang cukup untuk menolak normalitas; p-value ≤ 0,05 berarti normalitas residual tidak terpenuhi berdasarkan uji tersebut.

6. Uji Homogenitas Varians

Uji homogenitas dilakukan dengan pendekatan Brown-Forsythe, yaitu membandingkan deviasi absolut dari median setiap kelompok menggunakan ANOVA.

median_kelompok <- ave(dat$DBD, dat$Wilayah, FUN = median)
dat$Deviasi <- abs(dat$DBD - median_kelompok)
uji_bf <- aov(Deviasi ~ Wilayah, data = dat)
hasil_bf <- summary(uji_bf)
knitr::kable(as.data.frame(hasil_bf[[1]]), digits = 4,
             caption = "Hasil uji Brown-Forsythe")
Hasil uji Brown-Forsythe
Df Sum Sq Mean Sq F value Pr(>F)
Wilayah 6 7877.426 1312.904 1.2216 0.3239
Residuals 29 31168.693 1074.783 NA NA

Kriteria pada taraf signifikansi 5%: p-value > 0,05 berarti tidak ada bukti yang cukup bahwa varians berbeda; p-value ≤ 0,05 menunjukkan bukti bahwa varians antarkelompok berbeda.

7. Pemeriksaan Rataan Residual

knitr::kable(
  data.frame(
    Ukuran = c("Rataan residual", "Jumlah residual"),
    Nilai = c(mean(res), sum(res))
  ),
  digits = 12, caption = "Pemeriksaan residual"
)
Pemeriksaan residual
Ukuran Nilai
Rataan residual 0
Jumlah residual 0

Pada model ANOVA yang memuat rata-rata kelompok, rataan residual seharusnya mendekati nol. Nilai sangat kecil dapat muncul akibat ketelitian numerik komputer.

8. Pemeriksaan Efek Aditif

Model yang digunakan hanya memiliki satu faktor, yaitu wilayah. Karena itu, efek aditif antardua faktor tidak dapat diuji secara terpisah dengan model ini. Pemeriksaan interaksi membutuhkan model faktorial dan data yang sesuai.

9. Hasil dan Kesimpulan

p_normal <- uji_normal$p.value
p_homogen <- hasil_bf[[1]][["Pr(>F)"]][1]
p_anova <- hasil_anova[[1]][["Pr(>F)"]][1]

cat("**Uji normalitas residual:** p-value = ", format.pval(p_normal, digits=4), ". ", sep="")

Uji normalitas residual: p-value = 0.0005624.

if (p_normal > 0.05) {
  cat("Tidak ada bukti yang cukup untuk menolak normalitas residual.\n\n")
} else {
  cat("Normalitas residual tidak terpenuhi berdasarkan uji Shapiro-Wilk.\n\n")
}

Normalitas residual tidak terpenuhi berdasarkan uji Shapiro-Wilk.

cat("**Uji homogenitas Brown-Forsythe:** p-value = ", format.pval(p_homogen, digits=4), ". ", sep="")

Uji homogenitas Brown-Forsythe: p-value = 0.3239.

if (p_homogen > 0.05) {
  cat("Tidak ada bukti yang cukup bahwa varians antarkelompok berbeda.\n\n")
} else {
  cat("Terdapat bukti bahwa varians antarkelompok berbeda.\n\n")
}

Tidak ada bukti yang cukup bahwa varians antarkelompok berbeda.

cat("**Uji ANOVA:** p-value = ", format.pval(p_anova, digits=4), ". ", sep="")

Uji ANOVA: p-value = 0.0612.

if (p_anova < 0.05) {
  cat("Terdapat bukti perbedaan rata-rata angka kesakitan DBD antarwilayah pada taraf 5%.\n\n")
} else {
  cat("Belum terdapat bukti yang cukup untuk menyatakan perbedaan rata-rata angka kesakitan DBD antarwilayah pada taraf 5%.\n\n")
}

Belum terdapat bukti yang cukup untuk menyatakan perbedaan rata-rata angka kesakitan DBD antarwilayah pada taraf 5%.

cat("**Catatan:** hasil ANOVA perlu ditafsirkan hati-hati karena normalitas residual tidak terpenuhi. Independensi tidak dapat dipastikan hanya dari pemeriksaan duplikasi, dan efek aditif antarfaktor tidak dapat diuji dalam model satu faktor.")

Catatan: hasil ANOVA perlu ditafsirkan hati-hati karena normalitas residual tidak terpenuhi. Independensi tidak dapat dipastikan hanya dari pemeriksaan duplikasi, dan efek aditif antarfaktor tidak dapat diuji dalam model satu faktor.

10. Daftar Pustaka

Sumber data:

Badan Pusat Statistik. (2026, 16 Februari). Kasus penyakit menurut provinsi dan jenis penyakit, 2025. https://www.bps.go.id/id/statistics-table/3/YTA1Q1ptRmhUMEpXWTBsQmQyZzBjVzgwUzB4aVp6MDkjMw%3D%3D/kasus-penyakit-menurut-provinsi-dan-jenis-penyakit.html