Praktikum: Ukuran Pemusatan dan Sebaran

Praktikum 05:Introduction to Statistics (SDT-11012)

Bayu Fachri

LinkedIn | GitHub | Email

Mahasiswa Sains Data di Institut Teknologi Sains Bandung dengan rasa ingin tahu yang tinggi dan semangat untuk terus berkembang. Tertarik pada teknologi, data, dan berbagai hal baru. Percaya bahwa setiap proses adalah bagian dari perjalanan untuk menjadi versi terbaik dari diri sendiri.


1 Pendahuluan

Program Studi: Data Science Konteks Sesi: Pertemuan 5 – Statistika Deskriptif: Ukuran Pemusatan dan Penyebaran

Bayangkan dua kelas dengan rata-rata nilai ujian yang sama-sama 80. Apakah kualitas kedua kelas itu sama? Belum tentu: di kelas pertama hampir semua mahasiswa bernilai 75–85, sedangkan di kelas kedua nilainya berserakan dari 50 sampai 100. Rata-rata saja tidak cukup untuk menceritakan sebuah data. Kita membutuhkan dua jenis ringkasan yang selalu berpasangan:

• Ukuran pemusatan (central tendency) – di mana “pusat” data berada? • Ukuran penyebaran (dispersion) – seberapa jauh data menyebar dari pusatnya?

Pada Pertemuan 4 kita sudah melihat pusat dan sebaran data lewat tabel frekuensi dan histogram. Praktikum ini mengubah kesan visual tersebut menjadi angka yang tepat, secara berjenjang dari perhitungan manual sampai implementasi di R. Ukuran posisi (kuartil, persentil), IQR, boxplot, dan deteksi outlier secara formal dibahas pada Pertemuan 6.

1.1 Tujuan Pembelajaran

Setelah menyelesaikan praktikum ini, mahasiswa mampu:

  1. Menghitung dan menafsirkan mean, median, dan modus (termasuk rata-rata tertimbang dan trimmed mean), serta memilih ukuran yang sesuai dengan skala pengukuran dan bentuk distribusi data.

  2. Menghitung dan menafsirkan rentang, varians, dan simpangan baku, termasuk alasan pembagi n − 1 pada varians sampel.

  3. Menghitung dan menafsirkan koefisien variasi untuk membandingkan variabilitas relatif.

  4. Menafsirkan pusat dan sebaran secara bersamaan, termasuk hubungan mean–median den- gan bentuk distribusi dan pengaruh nilai ekstrem.

  5. Memakai z-score, aturan empiris, dan teorema Chebyshev untuk menafsirkan simpan- gan baku.

  6. Menghitung ukuran pemusatan dan penyebaran dari data terkelompok (tabel distribusi frekuensi Pertemuan 4).

  7. Melaporkan ringkasan statistik deskriptif secara jujur dan informatif.

1.2 Peta Alur Belajar

Tahap Bagian Fokus
1 Prasyarat dan Notasi Skala pengukuran, notasi populasi vs sampel
2 Ukuran Pemusatan Mean, rata-rata tertimbang, trimmed mean, median, modus
3 Ukuran Penyebaran Rentang, varians, simpangan baku
4 Variasi Relatif Koefisien variasi
5 Interpretasi: Bentuk Distribusi Mean vs median; koefisien kemencengan Pearson
6 Interpretasi: Nilai Ekstrem Ukuran yang tahan dan tidak tahan nilai ekstrem
7 Interpretasi: Menafsirkan SD z-score, aturan empiris, Chebyshev
8 Data Terkelompok Statistik dari tabel distribusi frekuensi
9 Etika Pelaporan Rata-rata yang menyesatkan
10–11 Studi Kasus & Latihan Mandiri Penerapan menyeluruh
12–14 Referensi Praktis Kesalahan umum, cheat sheet R, glosarium
Praktikum ini hanya menggunakan base R (tidak memerlukan instalasi paket tambahan).

2 Prasyarat dan Notasi

2.1 Skala Pengukuran Menentukan Ukuran yang Valid

Ingat kembali skala pengukuran dari Pertemuan 2. Skala data menentukan ukuran mana yang bermakna untuk dihitung:

Skala Modus Median Mean Ukuran Penyebaran
Nominal Ya Tidak Tidak Tidak berlaku
Ordinal Ya Ya Kurang tepat Kuartil / IQR
Interval Ya Ya Ya Rentang, IQR, varians, simpangan baku
Rasio Ya Ya Ya Semua ukuran, termasuk koefisien variasi

Contoh: “rata-rata golongan darah” tidak bermakna (nominal), sedangkan “rata-rata tinggi badan” bermakna (rasio).

2.2 Populasi vs Sampel: Notasi

Karena statistik dari sampel dipakai untuk menduga parameter populasi, notasinya dibedakan:

library(knitr)
library(kableExtra)

tabel_notasi <- data.frame(
  Ukuran    = c("Banyaknya data", "Rata-rata", "Varians", "Simpangan baku"),
  Populasi  = c("$N$", "$\\mu$", "$\\sigma^2$", "$\\sigma$"),
  Sampel    = c("$n$", "$\\bar{x}$", "$s^2$", "$s$")
)

kable(tabel_notasi, escape = FALSE, align = "c", booktabs = TRUE,
      col.names = c("Ukuran", "Populasi (Parameter)", "Sampel (Statistik)")) %>%
  kable_styling(latex_options = c("hold_position"), full_width = FALSE,
                position = "center")
Ukuran Populasi (Parameter) Sampel (Statistik)
Banyaknya data \(N\) \(n\)
Rata-rata \(\mu\) \(\bar{x}\)
Varians \(\sigma^2\) \(s^2\)
Simpangan baku \(\sigma\) \(s\)

Simbol ∑ (sigma besar) berarti “jumlahkan”: \(\sum_{i=1}^{n} x_i = x_1 + x_2 + \cdots + x_n.\)

2.3 Data Utama yang Dipakai

Sepanjang praktikum, kita memakai nilai ujian Statistika 30 mahasiswa dari Pertemuan 4. Pengelompokan kelasnya (Aturan Sturges: 6 kelas, lebar 6, batas nyata dimulai dari 62,5) sudah kita peroleh dan dipakai ulang pada bagian data terkelompok.

nilai_ujian <- c(78, 65, 82, 90, 74, 68, 95, 88, 72, 80,
91, 77, 63, 85, 79, 92, 70, 84, 76, 89,
81, 67, 93, 75, 86, 71, 94, 83, 69, 87)

n <- length(nilai_ujian)
# Batas nyata kelas hasil pengelompokan pada Pertemuan 4
batas_nyata_u <- seq(62.5, by = 6, length.out = 7)
f_ujian <- as.numeric(table(cut(nilai_ujian, breaks = batas_nyata_u)))
n
## [1] 30
sort(nilai_ujian)
##  [1] 63 65 67 68 69 70 71 72 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
## [26] 91 92 93 94 95
library(plotly)
## Loading required package: ggplot2
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
# Data (berdasarkan gambar/histogram)
batas <- c(62.5, 68.5, 74.5, 80.5, 86.5, 92.5, 98.5)
frek  <- c(4, 5, 6, 6, 6, 3)

lebar  <- diff(batas)
tengah <- batas[-length(batas)] + lebar / 2
kelas  <- paste0(batas[-length(batas)], " - ", batas[-1])

# Gradasi hijau: pudar (terendah) -> tebal (tertinggi)
ramp  <- colorRamp(c("#C8E6C9", "#1B5E20"))
skala <- (frek - min(frek)) / (max(frek) - min(frek))
warna <- rgb(ramp(skala), maxColorValue = 255)

fig <- plot_ly() %>%
  add_bars(
    x = tengah, y = frek, width = lebar,
    marker = list(color = warna,
                  line = list(color = "white", width = 1.5)),
    text = frek, textposition = "outside",
    textfont = list(size = 14),
    customdata = kelas,
    hovertemplate = "Kelas: <b>%{customdata}</b><br>Frekuensi: %{y}<extra></extra>"
  ) %>%
  layout(
    title = list(text = "<b>Nilai Ujian Statistika (n = 30)</b>",
                 x = 0.5, xanchor = "center"),
    showlegend = FALSE,
    bargap = 0,
    xaxis = list(title = "",   # Judul sumbu x dihapus
                 tickvals = seq(65, 95, 5), ticktext = seq(65, 95, 5),
                 range = c(61, 100),
                 ticks = "outside",
                 showgrid = FALSE, zeroline = FALSE),
    yaxis = list(title = "Frekuensi",
                 range = c(0, max(frek) * 1.2),
                 showticklabels = FALSE,   # Angka sumbu y di kiri dihapus
                 ticks = "",
                 showgrid = FALSE, zeroline = FALSE),
    margin = list(t = 80, b = 40, l = 70, r = 40)
  )

fig

Dari histogram, kita bisa memperkirakan “pusat” data ada di sekitar 80 dan sebarannya kira-kira dari 63 sampai 95. Praktikum ini mengubah perkiraan visual tersebut menjadi angka yang tepat.


3 Ukuran Pemusatan Data

3.1 Rata-rata Hitung (Mean)

Mean adalah jumlah seluruh nilai dibagi banyaknya data:

\[ \mu = \frac{\sum_{i=1}^{N} x_i}{N} \qquad\qquad\qquad \bar{x} = \frac{\sum_{i=1}^{n} x_i}{n} \]

# Manual: jumlahkan lalu bagi n
sum(nilai_ujian) / n
## [1] 80.13333
# Fungsi bawaan R
mean(nilai_ujian)
## [1] 80.13333

Sifat penting mean:

  1. Memakai seluruh nilai data.
  2. Jumlah selisih (deviasi) semua data terhadap mean selalu nol: ∑(xi − ̄x) = 0. Karena itu mean disebut titik keseimbangan data.
  3. Sensitif terhadap outlier – satu nilai ekstrem dapat menggeser mean secara drastis.
round(sum(nilai_ujian - mean(nilai_ujian)), 10) # selalu 0
## [1] 0
library(plotly)

# Data tiruan untuk nilai ujian (n = 30) dengan rata-rata sekitar 80
set.seed(42)
nilai <- rnorm(30, mean = 80, sd = 6)
nilai <- pmin(pmax(nilai, 63), 95)
nilai <- round(nilai, 1)

# Hitung nilai Mean
rata_rata <- mean(nilai)

# Berikan sedikit variasi vertikal (jitter) agar titik-titik tidak bertumpuk
set.seed(123)
y_pos <- runif(length(nilai), 0.2, 0.8)

fig <- plot_ly() %>%
  # Titik-titik sebaran data
  add_trace(
    x = nilai, y = y_pos, type = "scatter", mode = "markers",
    marker = list(color = "#2b7bba", size = 10, opacity = 0.8),
    hovertemplate = "Nilai Ujian: <b>%{x}</b><extra></extra>"
  ) %>%
  layout(
    title = list(text = "<b>Mean sebagai Titik Keseimbangan</b>",
                 x = 0.5, xanchor = "center"),
    showlegend = FALSE,
    xaxis = list(title = "Nilai Ujian",
                 range = c(60, 98),
                 tickvals = seq(65, 95, 5),
                 ticks = "outside",
                 showgrid = FALSE, zeroline = FALSE,
                 showline = TRUE, mirror = TRUE),
    yaxis = list(title = "",
                 range = c(0, 1),
                 showticklabels = FALSE, ticks = "",
                 showgrid = FALSE, zeroline = FALSE,
                 showline = TRUE, mirror = TRUE),
    shapes = list(
      # Garis vertikal merah untuk menunjukkan posisi Mean
      list(type = "line", xref = "x", x0 = rata_rata, x1 = rata_rata,
           yref = "paper", y0 = 0, y1 = 1,
           line = list(color = "#C0392B", width = 2))
    ),
    annotations = list(
      # Label keterangan Mean di area kiri atas grafik
      list(text = paste0("<b>Mean</b> (", round(rata_rata, 1), ")"),
           x = 0.05, y = 0.85, xref = "paper", yref = "paper",
           showarrow = FALSE,
           font = list(size = 13, color = "#C0392B"))
    ),
    margin = list(t = 80, b = 60, l = 50, r = 40)
  )

fig

3.1.1 Rata-rata Tertimbang (Weighted Mean)

Jika setiap nilai memiliki bobot yang berbeda, gunakan rata-rata tertimbang:

\[ \bar{x}_w = \frac{\sum_{i=1}^{n} w_i x_i}{\sum_{i=1}^{n} w_i} \]

Contoh: IPK semester dihitung dari nilai mutu yang dibobot dengan jumlah SKS.

library(knitr)
library(kableExtra)

tabel_frekuensi <- data.frame(
  Kolom = c("Frekuensi ($f$)", "Frekuensi relatif", "Persentase"),
  Rumus = c("hitung", "$\\dfrac{f}{n}$", "$\\dfrac{f}{n} \\times 100\\%$"),
  Arti  = c("Banyaknya data pada kategori",
            "Proporsi (0 sampai 1)",
            "Proporsi dalam persen")
)

kable(tabel_frekuensi,
      format = "html",
      escape = FALSE,
      align = "lcl",
      col.names = c("Kolom", "Rumus", "Arti")) %>%
  kable_styling(full_width = FALSE, position = "center")
Kolom Rumus Arti
Frekuensi (\(f\)) hitung Banyaknya data pada kategori
Frekuensi relatif \(\dfrac{f}{n}\) Proporsi (0 sampai 1)
Persentase \(\dfrac{f}{n} \times 100\%\) Proporsi dalam persen
nilai_mutu <- c(4.0, 3.0, 3.5, 2.0)
sks        <- c(3, 4, 3, 2)

mean(nilai_mutu)                  # rata-rata biasa (mengabaikan bobot SKS)
## [1] 3.125
weighted.mean(nilai_mutu, sks)    # rata-rata berbobot SKS (IPK)
## [1] 3.208333
weighted.mean(nilai_mutu, w = sks) # IPK sebenarnya
## [1] 3.208333

Rata-rata biasa (3,125) mengabaikan fakta bahwa Kalkulus (4 SKS) lebih “berat” daripada Algo- ritma (2 SKS). IPK yang benar adalah rata-rata tertimbang, yaitu 3.208.

3.2 Median

Median adalah nilai tengah setelah data diurutkan. Median membagi data menjadi dua bagian sama banyak: 50% data berada di bawahnya dan 50% di atasnya.

  • Jika \(n\) ganjil: median = data ke-\(\frac{n+1}{2}\).
  • Jika \(n\) genap: median = rata-rata data ke-\(\frac{n}{2}\) dan ke-\(\left(\frac{n}{2}+1\right)\).
# n = 30 (genap): rata-rata data ke-15 dan ke-16
urut <- sort(nilai_ujian)
urut[c(15, 16)]
## [1] 80 81
mean(urut[c(15, 16)])
## [1] 80.5
median(nilai_ujian)
## [1] 80.5

Sekarang perhatikan data yang berbeda: gaji bulanan 7 karyawan sebuah perusahaan rintisan (juta rupiah), di mana salah satunya adalah pendiri perusahaan.

gaji <- c(4.5, 4.8, 5.0, 5.2, 5.5, 5.8, 45)
# n = 7 (ganjil): median = data ke-4
sort(gaji)[4]
## [1] 5.2
median(gaji)
## [1] 5.2
mean(gaji)
## [1] 10.82857

Mean (10,83 juta) jauh lebih besar dari gaji enam dari tujuh karyawan, karena tertarik oleh satu nilai ekstrem (45 juta). Median (5,2 juta) tidak terpengaruh besarnya nilai ekstrem tersebut – median hanya peduli pada urutan, bukan besar nilainya. Inilah sebabnya median disebut ukuran yang tahan (robust) terhadap outlier.

3.2.1 Trimmed Mean: Jalan Tengah

Trimmed mean membuang sebagian persentase data terkecil dan terbesar sebelum menghitung rata- rata, sehingga tetap memakai banyak data tetapi lebih tahan terhadap outlier.

mean(gaji) # mean biasa
## [1] 10.82857
mean(gaji, trim = 0.2) # buang 20% terkecil & 20% terbesar (1 data tiap ujung)
## [1] 5.26
median(gaji) # trimmed mean ekstrem (trim = 0.5)
## [1] 5.2

3.3 Modus

Modus adalah nilai yang paling sering muncul. Berbeda dengan mean dan median, modus juga valid untuk data nominal. R tidak menyediakan fungsi bawaan untuk modus statistik (fungsi mode() di R menunjukkan tipe data, bukan modus), sehingga kita membuatnya sendiri:

hitung_modus <- function(x) {
tabel <- table(x)
maks <- max(tabel)
if (maks == 1) return(NA) # semua nilai unik -> tidak ada modus
hasil <- names(tabel)[tabel == maks] # bisa lebih dari satu modus
if (is.numeric(x)) as.numeric(hasil) else hasil
}
hitung_modus(c(2, 3, 3, 4, 4, 4, 5)) # satu modus (unimodal)
## [1] 4
hitung_modus(c(1, 2, 2, 3, 3, 4)) # dua modus (bimodal)
## [1] 2 3
hitung_modus(nilai_ujian) # tidak ada modus (semua nilai unik)
## [1] NA
# Modus pada data nominal
metode_bayar <- c("Tunai", "Debit", "Debit", "E-Wallet", "Debit", "Kredit", "Tunai")
hitung_modus(metode_bayar)
## [1] "Debit"

Catatan: untuk data kontinu (seperti nilai ujian di atas) yang hampir tidak pernah berulang persis, modus dari data mentah tidak informatif. Solusinya adalah mencari kelas modus dari data yang sudah dikelompokkan (dibahas pada bagian Data Terkelompok).

3.4 Membandingkan dan Memilih Ukuran Pemusatan

Ukuran Kelebihan Kelemahan Paling cocok untuk
Mean Memakai semua data; dasar bagi banyak metode statistik lanjutan Sensitif terhadap outlier dan data menceng Data numerik simetris tanpa outlier
Median Tahan terhadap outlier; selalu ada Tidak memakai besar nilai semua data Data numerik menceng (misalnya pendapatan, harga rumah), atau data ordinal
Modus Bisa untuk data nominal; mudah dipahami Bisa tidak ada atau lebih dari satu Data nominal/kategorik; mencari nilai terpopuler
library(plotly)

# Data simulasi gaji bulanan (dalam juta rupiah) dengan nilai outlier di kanan
set.seed(42)
gaji <- c(4.5, 5.0, 5.2, 5.5, 5.8, 6.0, 45.0) # 45.0 adalah outlier

# Hitung statistik
mean_val <- mean(gaji)
median_val <- median(gaji)

# Fungsi trimmed mean 20% manual (membuang 20% data dari masing-masing ujung)
trimmed_mean <- function(x, prop = 0.2) {
  n <- length(x)
  k <- floor(n * prop)
  x_sorted <- sort(x)
  mean(x_sorted[(k + 1):(n - k)])
}
trim_val <- trimmed_mean(gaji, 0.2)

# Berikan sedikit variasi vertikal (jitter) agar titik-titik tidak bertumpuk
set.seed(123)
y_pos <- runif(length(gaji), 0.3, 0.7)

fig <- plot_ly() %>%
  # Titik-titik sebaran data (termasuk outlier di kanan)
  add_trace(
    x = gaji, y = y_pos, type = "scatter", mode = "markers",
    marker = list(color = "#2b7bba", size = 11, opacity = 0.85),
    hovertemplate = "Gaji: <b>%{x} Juta Rupiah</b><extra></extra>"
  ) %>%
  layout(
    title = list(text = "<b>Mean Tertarik ke Arah Outlier, Median Tidak</b>",
                 x = 0.5, xanchor = "center"),
    showlegend = FALSE,
    xaxis = list(title = "Gaji Bulanan (Juta Rupiah)",
                 range = c(-2, 52),
                 tickvals = seq(0, 50, 10),
                 ticks = "outside",
                 showgrid = FALSE, zeroline = FALSE,
                 showline = TRUE, mirror = TRUE),
    yaxis = list(title = "",
                 range = c(0, 1),
                 showticklabels = FALSE, ticks = "",
                 showgrid = FALSE, zeroline = FALSE,
                 showline = TRUE, mirror = TRUE),
    shapes = list(
      # Garis vertikal Mean (Merah)
      list(type = "line", xref = "x", x0 = mean_val, x1 = mean_val,
           yref = "paper", y0 = 0, y1 = 1,
           line = list(color = "#C0392B", width = 2)),
      # Garis vertikal Median (Hijau putus-putus)
      list(type = "line", xref = "x", x0 = median_val, x1 = median_val,
           yref = "paper", y0 = 0, y1 = 1,
           line = list(color = "#1E8449", width = 2, dash = "dash")),
      # Garis vertikal Trimmed Mean (Oranye titik-titik)
      list(type = "line", xref = "x", x0 = trim_val, x1 = trim_val,
           yref = "paper", y0 = 0, y1 = 1,
           line = list(color = "#D35400", width = 2, dash = "dot"))
    ),
    annotations = list(
      # Keterangan Legenda Manual di Kanan Atas
      list(text = "<b>Mean</b>", x = 0.82, y = 0.88, xref = "paper", yref = "paper", showarrow = FALSE, font = list(size = 12, color = "#C0392B"), xanchor = "left"),
      list(text = "<b>Median</b>", x = 0.82, y = 0.78, xref = "paper", yref = "paper", showarrow = FALSE, font = list(size = 12, color = "#1E8449"), xanchor = "left"),
      list(text = "<b>Trimmed mean (20%)</b>", x = 0.82, y = 0.68, xref = "paper", yref = "paper", showarrow = FALSE, font = list(size = 12, color = "#D35400"), xanchor = "left"),
      
      # Garis kecil ikon legenda
      list(type = "line", x0 = 0.77, x1 = 0.80, y0 = 0.88, y1 = 0.88, xref = "paper", yref = "paper", line = list(color = "#C0392B", width = 2)),
      list(type = "line", x0 = 0.77, x1 = 0.80, y0 = 0.78, y1 = 0.78, xref = "paper", yref = "paper", line = list(color = "#1E8449", width = 2, dash = "dash")),
      list(type = "line", x0 = 0.77, x1 = 0.80, y0 = 0.68, y1 = 0.68, xref = "paper", yref = "paper", line = list(color = "#D35400", width = 2, dash = "dot"))
    ),
    margin = list(t = 80, b = 60, l = 50, r = 40)
  )

fig

Panduan memilih:

• Data nominal -> gunakan modus. • Data ordinal -> gunakan median (dan modus). • Data numerik simetris, tanpa outlier -> mean. • Data numerik menceng atau mengandung outlier -> median (laporkan mean sebagai pe- lengkap jika perlu).


4 Catatan: Median sebagai Ukuran Letak

Median membagi data terurut menjadi dua bagian sama banyak. Gagasan yang sama dapat diper- luas menjadi kuartil (empat bagian), desil (sepuluh bagian), dan persentil (seratus bagian), be- serta rentang antarkuartil (IQR) sebagai ukuran sebaran yang tahan nilai ekstrem. Semua ukuran

letak tersebut dibahas lengkap pada Pertemuan 6. Untuk saat ini, cukup diingat bahwa median adalah persentil ke-50.

5 Ukuran Penyebaran Data

5.1 Mengapa Ukuran Pusat Saja Tidak Cukup?

Dua loket pelayanan mencatat waktu tunggu (menit) enam pelanggan. Keduanya memiliki mean dan median yang persis sama:

loket_1 <- c(9, 10, 10, 10, 10, 11)
loket_2 <- c(1, 4, 10, 10, 16, 19)
rbind(Loket_1 = c(Mean = mean(loket_1), Median = median(loket_1)),
Loket_2 = c(Mean = mean(loket_2), Median = median(loket_2)))
##         Mean Median
## Loket_1   10     10
## Loket_2   10     10
library(plotly)

# Data waktu tunggu (menit) untuk kedua loket
waktu_loket1 <- c(9, 10, 10, 10, 10, 11)
waktu_loket2 <- c(1, 4, 10, 10, 16, 19)

# Fungsi pembuat panel scatter/dot plot dengan jitter vertikal
buat_panel_loket <- function(data_waktu, warna_titik) {
  # Memberikan sedikit variasi vertikal agar titik bertumpuk rapi
  set.seed(42)
  y_pos <- jitter(rep(0.5, length(data_waktu)), amount = 0.25)
  
  plot_ly() %>%
    add_trace(
      x = data_waktu, y = y_pos, type = "scatter", mode = "markers",
      marker = list(color = warna_titik, size = 11, opacity = 0.85),
      hovertemplate = "Waktu Tunggu: <b>%{x} menit</b><extra></extra>"
    ) %>%
    layout(
      xaxis = list(title = "Waktu Tunggu (menit)",
                   range = c(-1, 21),
                   tickvals = seq(0, 20, 5),
                   ticks = "outside",
                   showgrid = FALSE, zeroline = FALSE,
                   showline = TRUE, mirror = TRUE),
      yaxis = list(title = "",
                   range = c(-0.2, 1.2),
                   showticklabels = FALSE, ticks = "",
                   showgrid = FALSE, zeroline = FALSE,
                   showline = TRUE, mirror = TRUE),
      shapes = list(
        # Garis vertikal merah untuk nilai rata-rata (mean)
        list(type = "line", xref = "x", x0 = mean(data_waktu), x1 = mean(data_waktu),
             yref = "paper", y0 = 0, y1 = 1,
             line = list(color = "#C0392B", width = 2))
      )
    )
}

# Membuat panel untuk masing-masing loket
p1 <- buat_panel_loket(waktu_loket1, "#2b7bba") # Warna biru untuk Loket 1
p2 <- buat_panel_loket(waktu_loket2, "#E67E22") # Warna oranye untuk Loket 2

# ---------- Gabungkan Subplot ----------
fig <- subplot(p1, p2, nrows = 1, margin = 0.1, titleX = TRUE, titleY = FALSE) %>%
  layout(
    showlegend = FALSE,
    margin = list(t = 90, b = 50, l = 50, r = 40)
  )

# Mengambil domain sumbu X untuk menempatkan judul panel di tengah masing-masing sub-grafik
b      <- plotly_build(fig)
pusat1 <- mean(b$x$layout$xaxis$domain)
pusat2 <- mean(b$x$layout$xaxis2$domain)

fig <- fig %>%
  layout(
    annotations = list(
      list(text = "<b>Loket 1</b>", x = pusat1, y = 1.08,
           xref = "paper", yref = "paper", xanchor = "center",
           showarrow = FALSE, font = list(size = 15)),
      list(text = "<b>Loket 2</b>", x = pusat2, y = 1.08,
           xref = "paper", yref = "paper", xanchor = "center",
           showarrow = FALSE, font = list(size = 15))
    )
  )

fig
par(mfrow = c(1, 1))

Kedua loket “rata-rata 10 menit”, tetapi pengalaman pelanggannya sangat berbeda: Loket 1 kon- sisten, Loket 2 tidak dapat diprediksi (ada yang hanya menunggu 1 menit, ada yang 19 menit). Perbedaan inilah yang ditangkap oleh ukuran penyebaran.

5.2 Rentang (Range)

\[ \text{Rentang} = x_{\max} - x_{\min} \]

range(nilai_ujian)           # R mengembalikan nilai min dan max, BUKAN selisihnya
## [1] 63 95
diff(range(nilai_ujian))     # rentang sebenarnya
## [1] 32
diff(range(loket_1))
## [1] 2
diff(range(loket_2))
## [1] 18

Rentang mudah dihitung, tetapi hanya memakai dua nilai (terkecil dan terbesar) sehingga sangat dipengaruhi nilai ekstrem dan mengabaikan sebaran data di antaranya. Ukuran sebaran yang memakai seluruh data adalah varians dan simpangan baku.

5.3 Deviasi, Varians, dan Simpangan Baku

Untuk mengukur “rata-rata jarak data dari meannya”, langkah pertama yang terpikir adalah merata-ratakan deviasi (xi − ̄x). Namun sudah kita lihat bahwa jumlah deviasi selalu nol (yang positif dan negatif saling meniadakan), sehingga tidak informatif. Ada dua jalan keluar: memakai

nilai mutlak (menghasilkan mean absolute deviation) atau mengkuadratkan deviasi (meng- hasilkan varians). Cara kedua lebih umum karena sifat matematisnya yang baik.

Rumus varians:

\[ \sigma^2 = \frac{\sum_{i=1}^{N} (x_i - \mu)^2}{N} \qquad\qquad\qquad s^2 = \frac{\sum_{i=1}^{n} (x_i - \bar{x})^2}{n-1} \]

Simpangan baku (standar deviasi): akar dari varians, sehingga satuannya kembali sama dengan data asli.

\[ \sigma = \sqrt{\sigma^2} \qquad\qquad\qquad s = \sqrt{s^2} \]

5.3.1 Langkah Perhitungan Manual

Contoh: skor kuis 8 mahasiswa (sampel).

library(knitr)
library(kableExtra)

x <- c(6, 8, 7, 9, 5, 10, 7, 8)
rata <- mean(x)   # 7.5

tabel_deviasi <- data.frame(
  x = x,
  Deviasi = x - rata,
  Deviasi_Kuadrat = (x - rata)^2
)

kable(tabel_deviasi,
      format = "html",
      align = "rrr",
      caption = paste0("Tabel Deviasi (mean = ", rata, ")")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"),
                full_width = FALSE,
                position = "center")
Tabel Deviasi (mean = 7.5)
x Deviasi Deviasi_Kuadrat
6 -1.5 2.25
8 0.5 0.25
7 -0.5 0.25
9 1.5 2.25
5 -2.5 6.25
10 2.5 6.25
7 -0.5 0.25
8 0.5 0.25
colSums(tabel_deviasi) # jumlah deviasi = 0; jumlah kuadrat deviasi = 18
##               x         Deviasi Deviasi_Kuadrat 
##              60               0              18
kuis <- c(80, 75, 90, 85, 70)   # ganti dengan data kuis dari soal Anda
mean(kuis)
## [1] 80
n_k <- length(kuis)
JKD <- sum((kuis - mean(kuis))^2) # jumlah kuadrat deviasi
c(Varians_Sampel = JKD / (n_k - 1), # s^2 (dibagi n - 1)
Varians_Populasi = JKD / n_k, # sigma^2 (dibagi N)
SD_Sampel = sqrt(JKD / (n_k - 1)))
##   Varians_Sampel Varians_Populasi        SD_Sampel 
##        62.500000        50.000000         7.905694
var(kuis) # fungsi bawaan R
## [1] 62.5
sd(kuis) # fungsi bawaan R
## [1] 7.905694
# Rumus komputasi (setara): [sum(x^2) - (sum(x))^2 / n] / (n - 1)
(sum(kuis^2) - sum(kuis)^2 / n_k) / (n_k - 1)
## [1] 62.5

Jadi \[ s^2 = \frac{18}{7} \approx 2{,}571 \quad \text{dan} \quad s = \sqrt{2{,}571} \approx 1{,}604. \] Secara sederhana, skor kuis rata-rata menyimpang sekitar 1,6 poin dari meannya.

Awas: fungsi var() dan sd() di R selalu membagi dengan n−1 (versi sampel). Jika data Anda adalah seluruh populasi, gunakan mean((x - mean(x))^2) untuk varians populasi.

5.3.2 Mengapa Dibagi n − 1?

Deviasi dihitung terhadap ̄x (bukan μ yang sebenarnya), dan ̄x selalu “menyesuaikan diri” dengan sampel sehingga jumlah kuadrat deviasinya cenderung terlalu kecil. Pembagian dengan n − 1 (disebut koreksi Bessel, terkait derajat bebas) mengoreksi bias tersebut. Simulasi berikut membuk- tikannya:

library(knitr)
library(kableExtra)

hasil <- data.frame(
  Metode = c("Varians populasi sebenarnya",
             "Rata-rata s^2 dibagi n",
             "Rata-rata s^2 dibagi n - 1"),
  Nilai = c(100.28, 79.45, 99.31)
)

kable(hasil, format = "html", digits = 2, align = "lr",
      caption = "Rata-rata dari 5000 varians sampel (n = 5)") %>%
  kable_styling(full_width = FALSE, position = "center")
Rata-rata dari 5000 varians sampel (n = 5)
Metode Nilai
Varians populasi sebenarnya 100.28
Rata-rata s^2 dibagi n 79.45
Rata-rata s^2 dibagi n - 1 99.31

Pembagian dengan n rata-rata menduga terlalu rendah (sekitar 80% dari nilai sebenarnya untuk n = 5), sedangkan pembagian dengan n − 1 rata-rata tepat mendekati varians populasi sebenarnya. Inilah sebab n − 1 dipakai untuk sampel.

5.3.3 Menerapkan pada Data Nilai Ujian

c(Varians = var(nilai_ujian), SD = sd(nilai_ujian))
##   Varians        SD 
## 87.016092  9.328242

Simpangan baku nilai ujian sekitar 9.33 poin: secara umum, nilai seorang mahasiswa menyimpang sekitar 9.3 poin dari rata-rata kelas (80.1).

5.4 Koefisien Variasi (CV)

Simpangan baku bergantung pada satuan dan besar data, sehingga tidak adil untuk memband- ingkan variabilitas dua variabel yang skalanya berbeda. Koefisien variasi menyatakan simpangan baku relatif terhadap meannya:

\[CV = \frac{s}{\bar{x}} \times 100\%\]

Contoh: manakah yang lebih bervariasi, tinggi badan atau berat badan mahasiswa?

tinggi <- c(mean = 165, sd = 8) # cm
berat <- c(mean = 60, sd = 9) # kg
cv <- function(rata, simpangan) simpangan / rata * 100
c(CV_Tinggi_persen = cv(tinggi[["mean"]], tinggi[["sd"]]),
CV_Berat_persen = cv(berat[["mean"]], berat[["sd"]]))
## CV_Tinggi_persen  CV_Berat_persen 
##         4.848485        15.000000

Simpangan baku berat badan (9 kg) memang hanya sedikit lebih besar daripada tinggi badan (8 cm), tetapi dalam kaitannya dengan meannya, berat badan jauh lebih bervariatif (CV sekitar 15% vs 4,8%). Perbandingan SD langsung antara “cm” dan “kg” tidak bermakna; CV tidak memiliki satuan sehingga dapat dibandingkan.

Syarat CV: hanya valid untuk data skala rasio (nol mutlak) dengan mean positif dan tidak mendekati nol. Jangan gunakan CV untuk suhu dalam °C (skala interval).

5.5 Ringkasan Ukuran Penyebaran

Ukuran Rumus Satuan Tahan Outlier? Berpasangan dengan
Rentang \(x_{\text{max}} - x_{\text{min}}\) Sama dengan data Tidak (Min, Maks)
Varians \(\frac{\sum(x_i - \bar{x})^2}{n - 1}\) Kuadrat satuan data Tidak Mean
Simpangan baku \(\sqrt{s^2}\) Sama dengan data Tidak Mean
Koefisien variasi \(\frac{s}{\bar{x}} \times 100\%\) Tanpa satuan (%) Tidak Membandingkan variabilitas relatif

Kaidah pasangan: mean dilaporkan bersama simpangan baku; median dilaporkan bersama rentang atau – setelah Pertemuan 6 – bersama IQR (kuartil).


6 Interpretasi: Bentuk Distribusi dari Pusat dan Sebaran

Posisi relatif mean, median, dan modus mengungkap bentuk distribusi:

Bentuk Ciri Hubungan Mean–Median–Modus
Simetris Sisi kiri dan kanan saling mencerminkan \(\text{Mean} \approx \text{Median} \approx \text{Modus}\)
Menjulur kanan (skewed right) Ekor panjang ke arah nilai besar \(\text{Mean} > \text{Median} > \text{Modus}\)
Menjulur kiri (skewed left) Ekor panjang ke arah nilai kecil \(\text{Mean} < \text{Median} < \text{Modus}\)
Bimodal Dua puncak berbeda (kemungkinan dua sub-populasi) Satu ukuran pusat tidak cukup mewakili data

Mean paling “tertarik” ke arah ekor, sedangkan median lebih bertahan. Karena itu selisih mean dan median dapat dijadikan petunjuk kemencengan. Salah satu ukuran yang membakukannya adalah koefisien kemencengan Pearson:

\[ Sk = \frac{3(\bar{x} - \text{Median})}{s} \]

Aturan praktis: Sk > 0 menjulur kanan, Sk < 0 menjulur kiri, dan |Sk| yang kecil (kurang dari sekitar 0,5) dianggap hampir simetris.

library(plotly)

# Data (SIMULASI, ganti dengan data asli Anda)
set.seed(42)
d_simetris <- rnorm(1000, mean = 50, sd = 10)
d_kanan    <- rgamma(1000, shape = 3, scale = 6.5)
d_kiri     <- 100 - rgamma(1000, shape = 3.5, scale = 5.5)
d_bimodal  <- c(rnorm(500, 30, 6), rnorm(500, 70, 6))

# Gradasi hijau: muda (frekuensi rendah) -> tua (frekuensi tinggi)
ramp <- colorRamp(c("#D5F5E3", "#145A32"))

# Fungsi pembuat satu panel histogram + garis mean dan median
buat_hist <- function(x, rentang_x, tampil_legenda = FALSE, lebar_kelas = 5) {
  brk <- seq(floor(min(x) / lebar_kelas) * lebar_kelas,
             ceiling(max(x) / lebar_kelas) * lebar_kelas, by = lebar_kelas)
  h      <- hist(x, breaks = brk, plot = FALSE)
  frek   <- h$counts
  tengah <- h$mids
  lebar  <- diff(h$breaks)
  ymax   <- max(frek) * 1.25

  # Pengaman jika semua frekuensi sama
  rng   <- max(frek) - min(frek)
  skala <- if (rng == 0) rep(0.5, length(frek)) else (frek - min(frek)) / rng
  warna <- rgb(ramp(skala), maxColorValue = 255)

  rata <- mean(x)
  med  <- median(x)

  plot_ly() %>%
    add_bars(
      x = tengah, y = frek, width = lebar,
      marker = list(color = warna, line = list(color = "white", width = 1)),
      text = ifelse(frek > 0, frek, ""), textposition = "outside",
      textfont = list(size = 11), cliponaxis = FALSE,
      showlegend = FALSE,
      hovertemplate = "Nilai: %{x}<br>Frekuensi: %{y}<extra></extra>"
    ) %>%
    add_trace(
      x = c(rata, rata), y = c(0, ymax), type = "scatter", mode = "lines",
      line = list(color = "black", width = 3), name = "Mean",
      legendgroup = "Mean", showlegend = tampil_legenda,
      hovertemplate = paste0("Mean: ", round(rata, 1), "<extra></extra>")
    ) %>%
    add_trace(
      x = c(med, med), y = c(0, ymax), type = "scatter", mode = "lines",
      line = list(color = "#1F4E9E", width = 3, dash = "dash"), name = "Median",
      legendgroup = "Median", showlegend = tampil_legenda,
      hovertemplate = paste0("Median: ", round(med, 1), "<extra></extra>")
    ) %>%
    layout(
      xaxis = list(title = "", range = rentang_x,
                   showgrid = FALSE, zeroline = FALSE),
      yaxis = list(title = "Frekuensi", range = c(0, ymax),
                   showticklabels = FALSE, ticks = "",
                   showgrid = FALSE, zeroline = FALSE)
    )
}

p1 <- buat_hist(d_simetris, c(20, 80))
p2 <- buat_hist(d_kanan,    c(0, 70), tampil_legenda = TRUE)
p3 <- buat_hist(d_kiri,     c(20, 100))
p4 <- buat_hist(d_bimodal,  c(10, 90))

# ---------- Gabungkan (2 x 2) ----------
fig <- subplot(p1, p2, p3, p4, nrows = 2, margin = c(0.07, 0.07, 0.12, 0.12),
               titleY = TRUE, shareY = FALSE) %>%
  layout(
    showlegend = TRUE,
    legend = list(x = 0.93, y = 0.97, xanchor = "right", yanchor = "top",
                  bgcolor = "rgba(255,255,255,0)"),
    bargap = 0,
    margin = list(t = 60, b = 40, l = 70, r = 40)
  )

# Ambil domain sebenarnya dari tiap panel, lalu hitung posisi tengah judul
b  <- plotly_build(fig)
cx <- c(mean(b$x$layout$xaxis$domain),  mean(b$x$layout$xaxis2$domain),
        mean(b$x$layout$xaxis3$domain), mean(b$x$layout$xaxis4$domain))
ay <- c(b$x$layout$yaxis$domain[2],  b$x$layout$yaxis2$domain[2],
        b$x$layout$yaxis3$domain[2], b$x$layout$yaxis4$domain[2]) + 0.04
judul <- c("Simetris", "Menjulur Kanan", "Menjulur Kiri", "Bimodal")

fig <- fig %>%
  layout(
    annotations = lapply(1:4, function(i) {
      list(text = paste0("<b>", judul[i], "</b>"), x = cx[i], y = ay[i],
           xref = "paper", yref = "paper", xanchor = "center",
           showarrow = FALSE, font = list(size = 15))
    })
  )

fig
library(knitr)
library(kableExtra)

tabel10 <- data.frame(
  Mean   = c(50.16, 20.63, 80.24, 49.91),
  Median = c(50.09, 18.50, 82.07, 50.26),
  SD     = c(9.92, 12.32, 11.59, 20.53),
  Kemencengan_Pearson = c(0.02, 0.52, -0.47, -0.05),
  row.names = c("Simetris", "Menjulur_Kanan", "Menjulur_Kiri", "Bimodal")
)

kable(tabel10, format = "html", digits = 2, row.names = TRUE,
      align = "lrrrr",
      caption = "Table 10: Ukuran Pusat dan Kemencengan pada Empat Bentuk Distribusi") %>%
  kable_classic(full_width = FALSE, position = "center")
Table 10: Ukuran Pusat dan Kemencengan pada Empat Bentuk Distribusi
Mean Median SD Kemencengan_Pearson
Simetris 50.16 50.09 9.92 0.02
Menjulur_Kanan 20.63 18.50 12.32 0.52
Menjulur_Kiri 80.24 82.07 11.59 -0.47
Bimodal 49.91 50.26 20.53 -0.05

Interpretasi:

• Simetris: mean dan median hampir sama; Sk ≈ 0. • Menjulur kanan: mean lebih besar dari median (ekor panjang di sisi nilai besar menarik mean); Sk > 0. • Menjulur kiri: mean lebih kecil dari median; Sk < 0. • Bimodal: mean dan median jatuh di antara dua puncak – di wilayah yang hampir tidak ada datanya. Pada kasus ini, melaporkan “rata-rata” saja menyesatkan; sebaiknya pisahkan data menjadi dua kelompok atau laporkan kedua puncaknya.

Latihan reflektif: Bagaimana bentuk distribusi nilai ujian Statistika (nilai_ujian)? Jawab dengan membandingkan mean dan median-nya:

c(Mean = mean(nilai_ujian), Median = median(nilai_ujian),
Kemencengan_Pearson = 3 * (mean(nilai_ujian) - median(nilai_ujian)) /  sd(nilai_ujian))
##                Mean              Median Kemencengan_Pearson 
##          80.1333333          80.5000000          -0.1179215

Jawaban: mean (80.13) dan median (80.5) hampir sama dan Sk mendekati nol, sehingga dis- tribusinya relatif simetris – konsisten dengan bentuk histogram pada awal praktikum.


7 Interpretasi: Pengaruh Nilai Ekstrem

Kita sudah melihat pada data gaji bahwa satu nilai ekstrem dapat menarik mean jauh dari “ke- banyakan” data. Bagaimana dengan ukuran penyebaran?

7.1 Ukuran Mana yang Tahan Nilai Ekstrem?

Bandingkan seluruh ukuran pada data gaji dengan dan tanpa outlier:

library(knitr)
library(kableExtra)

tabel11 <- data.frame(
  Mean   = c(10.83, 5.13),
  Median = c(5.2, 5.1),
  SD     = c(15.07, 0.47),
  Rentang = c(40.5, 1.3),
  CV_persen = c(139.21, 9.19),
  row.names = c("Dengan outlier", "Tanpa outlier")
)

kable(tabel11, format = "html", digits = 2, row.names = TRUE,
      align = "lrrrrr",
      caption = "Table 11: Pengaruh Satu Nilai Ekstrem terhadap Ukuran Pusat dan Sebaran") %>%
  kable_classic(full_width = FALSE, position = "center")
Table 11: Pengaruh Satu Nilai Ekstrem terhadap Ukuran Pusat dan Sebaran
Mean Median SD Rentang CV_persen
Dengan outlier 10.83 5.2 15.07 40.5 139.21
Tanpa outlier 5.13 5.1 0.47 1.3 9.19

Satu data ekstrem mengubah mean, SD, rentang, dan CV secara dramatis, sedangkan median hampir tidak berubah. Ringkasnya:

Tidak tahan outlier Tahan outlier (robust)
Ukuran pusat Mean Median, trimmed mean
Ukuran sebaran Rentang, varians, simpangan baku, CV IQR (Pertemuan 6)

Cara mendeteksi outlier secara formal (pagar IQR, boxplot, modified z-score) dibahas pada Pertemuan 6. Satu prinsip yang perlu dipegang sejak sekarang – jangan menghapus nilai ekstrem secara otomatis. Selidiki dahulu penyebabnya: (1) kesalahan input/pengukuran -> perbaiki atau hapus; (2) nilai ekstrem yang sah (seperti gaji pendiri perusahaan) -> pertahankan, dan gunakan ukuran yang robust; (3) berasal dari populasi yang berbeda -> analisis terpisah. Selalu laporkan keputusan Anda.


8 Interpretasi: Menafsirkan Simpangan Baku

8.1 Z-Score

Z-score menyatakan berapa simpangan baku sebuah nilai berada di atas (+) atau di bawah (-) mean:

\[z = \frac{x - \bar{x}}{s}\]

Karena tanpa satuan, z-score memungkinkan membandingkan nilai dari skala yang berbeda.

z_ujian <- (nilai_ujian - mean(nilai_ujian)) / sd(nilai_ujian) # setara scale(nilai_ujian)
round(c(Nilai_63 = z_ujian[nilai_ujian == 63],
Nilai_80 = z_ujian[nilai_ujian == 80],
Nilai_95 = z_ujian[nilai_ujian == 95]), 2)
## Nilai_63 Nilai_80 Nilai_95 
##    -1.84    -0.01     1.59
round(c(Mean_z = mean(z_ujian), SD_z = sd(z_ujian)), 10) # z-score selalu bermean 0 dan SD 1
## Mean_z   SD_z 
##      0      1

Contoh perbandingan: Andi mendapat 85 pada Statistika (mean kelas 80, SD 5) dan 78 pada Kalkulus (mean kelas 65, SD 10). Di mata pelajaran mana prestasi relatifnya lebih baik?

z_stat <- (85 - 80) / 5
z_kalk <- (78 - 65) / 10
c(z_Statistika = z_stat, z_Kalkulus = z_kalk)
## z_Statistika   z_Kalkulus 
##          1.0          1.3

Meskipun nilai mentah Statistika lebih tinggi, prestasi relatif Andi lebih baik di Kalkulus (1,3 SD di atas rata-rata kelas, dibanding 1,0 SD pada Statistika).

Nilai dengan |z| yang sangat besar berada jauh dari pusat data. Kapan nilai seperti itu layak disebut outlier – dan mengapa aturan “|z| > 3” punya kelemahan – dibahas pada Pertemuan 6.

8.2 Aturan Empiris (68-95-99.7)

Untuk data yang berbentuk lonceng dan simetris (mendekati distribusi normal):

Rentang Proporsi data
\(\bar{x} \pm 1s\) sekitar 68%
\(\bar{x} \pm 2s\) sekitar 95%
\(\bar{x} \pm 3s\) sekitar 99,7%

8.3 Teorema Chebyshev

Untuk sembarang bentuk distribusi (termasuk yang menceng atau bimodal), minimal proporsi data dalam k simpangan baku dari mean (k > 1) adalah:

\[ \text{Proporsi} \geq 1 - \frac{1}{k^2} \]

Chebyshev berlaku umum, tetapi batasnya lebih longgar dibanding aturan empiris.

Table 14: Persentase Data dalam k Simpangan Baku dari Mean
k Data_Nilai_Ujian_pct Aturan_Empiris_pct Chebyshev_Minimal_pct
1 60 68.0 0.0
2 100 95.0 75.0
3 100 99.7 88.9

Data nilai ujian (bentuk relatif simetris, tetapi n hanya 30) cukup mendekati aturan empiris dan selalu memenuhi batas minimal Chebyshev. Untuk k = 1, Chebyshev tidak memberikan informasi (1−1/12 = 0%). Aturan empiris tidak boleh dipakai pada data yang sangat menceng atau bimodal; gunakan Chebyshev.


9 Statistik dari Data Terkelompok

Pada laporan atau publikasi, data sering hanya tersedia dalam bentuk tabel distribusi frekuensi, sehingga nilai aslinya tidak diketahui. Ukuran pemusatan dan penyebaran tetap dapat diaproksi- masi dengan menganggap setiap data dalam suatu kelas bernilai sama dengan titik tengah kelas (m).

9.1 Rumus Data Terkelompok

Dengan f = frekuensi kelas, m = titik tengah, n = ∑ f, w = lebar kelas:

Ukuran Rumus
Mean \(\bar{x} = \frac{\sum f \cdot m}{n}\)
Median \(\text{Median} = L + \left( \frac{\frac{n}{2} - F}{f_{\text{med}}} \right) w\)
Modus \(\text{Modus} = L + \left( \frac{d_1}{d_1 + d_2} \right) w\)
Varians \(s^2 = \frac{\sum f \cdot (m - \bar{x})^2}{n - 1}\)
Simpangan baku \(s = \sqrt{s^2}\)

Keterangan:

• Median: L = batas nyata bawah kelas median (kelas pertama yang frekuensi kumulatifnya mencapai n/2 ); F = frekuensi kumulatif sebelum kelas median; fmed = frekuensi kelas median.

• Modus: L = batas nyata bawah kelas modus (kelas dengan frekuensi terbesar); d1 = selisih frekuensi kelas modus dengan kelas sebelumnya; d2 = selisih dengan kelas sesudahnya.

9.2 Studi Kasus: Pendapatan Mingguan 100 Karyawan

Data: pendapatan mingguan (USD) dari 100 karyawan, dikelompokkan ke dalam 6 kelas (data yang sama dengan Pertemuan 4).

9.2.1 Langkah 1: Mean

Table 16: Tabel Bantu: Mean dan Median
Kelas f m f_kali_m Kumulatif_F
801-1000 9 900.5 8104.5 9
1001-1200 22 1100.5 24211.0 31
1201-1400 39 1300.5 50719.5 70
1401-1600 15 1500.5 22507.5 85
1601-1800 9 1700.5 15304.5 94
1801-2000 6 1900.5 11403.0 100
## [1] 1322.5

9.2.2 Langkah 2: Median

## [1] 50
## [1] "1201-1400"
## [1] 1297.936

Kelas median adalah 1201–1400 karena frekuensi kumulatifnya (70) pertama kali melampaui 50. Dengan L = 1200,5, F = 31, fmed = 39, dan w = 200:

\[ \text{Median} = 1200{,}5 + \left(\frac{50 - 31}{39}\right) 200 \approx 1297{,}94 \]

9.2.3 Langkah 3: Modus

## d1 d2 
## 17 24
## [1] 1283.427

\[\text{Modus} = 1200{,}5 + \left(\frac{17}{17 + 24}\right) 200 \approx 1283{,}43\]

9.2.4 Langkah 4: Varians dan Simpangan Baku

Table 17: Tabel Bantu: Varians
m f Deviasi f_Deviasi_Kuadrat
900.5 9 -422 1602756
1100.5 22 -222 1084248
1300.5 39 -22 18876
1500.5 15 178 475260
1700.5 9 378 1285956
1900.5 6 578 2004504
##    Varians         SD  CV_persen 
## 65369.6970   255.6750    19.3327

Data ini diperlakukan sebagai sampel sehingga pembaginya n − 1 = 99.

9.2.5 Fungsi Bantu Gabungan

Karena langkah-langkah di atas akan dipakai berulang, kita bungkus dalam satu fungsi yang mener- ima batas nyata dan frekuensi:

##         n      Mean    Median     Modus   Varians        SD CV_persen 
##    100.00   1322.50   1297.94   1283.43  65369.70    255.67     19.33

9.2.6 Visualisasi dan Interpretasi

Selisihnya kecil, tetapi tidak nol, karena pengelompokan membuang informasi nilai asli tiap data. Selalu gunakan data mentah jika tersedia; gunakan rumus data terkelompok hanya jika data mentah tidak ada.


10 Etika Pelaporan: Ketika Rata-rata Menyesatkan

Sama seperti grafik, ukuran statistik dapat menyesatkan – disengaja atau tidak – bila dipilih atau dilaporkan secara keliru.

10.1 Contoh 1: Rata-rata pada Data Menceng

“Rata-rata gaji di perusahaan kami mencapai 10,8 juta rupiah per bulan!” Kalimat ini benar secara perhitungan untuk data gaji, tetapi menyesatkan: enam dari tujuh karyawan bergaji di bawah 6 juta. Untuk data menceng atau beroutlier, laporkan median.

##   Mean Median 
##   11.0    5.5
## [1] 6

10.2 Contoh 2: Rata-rata dari Rata-rata

Kelas A (30 mahasiswa) memiliki rata-rata 80, dan Kelas B (10 mahasiswa) memiliki rata-rata 70. Berapa rata-rata gabungan?

## [1] 75
## [1] 77.5

Rata-rata sederhana (75) salah karena memperlakukan kedua kelas sama penting; rata-rata gabun- gan yang benar adalah 77,5 karena Kelas A memiliki lebih banyak mahasiswa.

10.3 Contoh 3: Rata-rata pada Data Bimodal

Pada data data_bimodal (bagian Bentuk Distribusi), mean sekitar 50, padahal hampir tidak ada data di sekitar nilai tersebut. Mean di sini “merata-ratakan” dua kelompok berbeda dan tidak mewakili siapa pun.

10.4 Contoh 4: Pusat Tanpa Sebaran

Pelaporan sederhana Pelaporan lebih baik
“Rata-rata nilai ujian adalah 80.” “Rata-rata nilai ujian 80.1 (SD 9.3; median 80.5; rentang 63–95; n = 30).”

Pelaporan yang lebih baik memungkinkan pembaca menilai apakah “rata-rata 80” mewakili kelas secara wajar atau tidak.

10.5 Daftar Periksa (Checklist) Pelaporan Statistik yang Jujur

□ Ukuran pusat selalu disertai ukuran sebaran (mean dengan SD; median dengan rentang atau IQR) □ Ukuran sesuai dengan skala pengukuran (tidak ada “rata-rata” untuk data nominal) □ Data menceng atau beroutlier dilaporkan dengan median □ Ukuran sampel (n) dicantumkan □ Rata-rata gabungan memakai bobot yang tepat □ Keputusan menghapus/mempertahankan outlier dijelaskan □ Perbandingan variabilitas antarvariabel berbeda skala memakai koefisien variasi


11 Studi Kasus Komprehensif: Membandingkan Dua Kelas

Konteks: Dosen Statistika membandingkan nilai ujian dua kelas paralel, masing-masing 30 maha- siswa. Kelas A adalah data nilai_ujian yang sudah kita pakai. Kelas B dicatat berikut ini.

11.1 Langkah 1: Ringkasan Statistik Lengkap

Table 20: Ringkasan Statistik Deskriptif Kelas A dan Kelas B
Kelas_A Kelas_B
n 30.00 30.00
Mean 80.13 80.00
Median 80.50 82.00
Modus NA 56.00
Min 63.00 54.00
Maks 95.00 100.00
Rentang 32.00 46.00
Varians 87.02 207.72
SD 9.33 14.41
CV_persen 11.64 18.02

11.2 Langkah 2: Visualisasi Berdampingan




## Langkah 3: Posisi Relatif Seorang Mahasiswa

Seorang mahasiswa mendapat nilai **90.** Seberapa baik posisinya jika ia berada di Kelas A diband-
ingkan Kelas B?

<table class=" lightable-classic" style='font-family: "Arial Narrow", "Source Sans Pro", sans-serif; width: auto !important; margin-left: auto; margin-right: auto;'>
<caption>Table 21: Posisi Relatif Nilai 90</caption>
 <thead>
  <tr>
   <th style="text-align:left;"> Kelas </th>
   <th style="text-align:right;"> Mean </th>
   <th style="text-align:right;"> SD </th>
   <th style="text-align:right;"> z_score </th>
  </tr>
 </thead>
<tbody>
  <tr>
   <td style="text-align:left;"> A </td>
   <td style="text-align:right;"> 80.13 </td>
   <td style="text-align:right;"> 9.33 </td>
   <td style="text-align:right;"> 1.06 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> B </td>
   <td style="text-align:right;"> 80.00 </td>
   <td style="text-align:right;"> 14.41 </td>
   <td style="text-align:right;"> 0.69 </td>
  </tr>
</tbody>
</table>

## Pertanyaan Diskusi dan Jawaban

**1. Kelas mana yang berprestasi lebih baik berdasarkan ukuran pusat?**

Mean kedua kelas hampir identik (80.1 vs 80), sehingga berdasarkan mean saja keduanya “sama”.
Namun median Kelas B (82) lebih tinggi daripada mean-nya (80), yang mengindikasikan distribusi
**menjulur kiri:** mayoritas mahasiswa Kelas B bernilai relatif tinggi, tetapi ditarik turun oleh
segelintir nilai rendah (54–61). Kelas A hampir simetris (mean ≈ median).

**2. Kelas mana yang lebih homogen?**

**Kelas A.** Rentangnya lebih sempit (32 vs 46), simpangan bakunya lebih kecil (9.3 vs 14.4), dan
CV-nya lebih rendah (11.6% vs 18%). Kelas B jauh lebih beragam: ada mahasiswa yang sangat
unggul sekaligus yang tertinggal.

**3. Mengapa nilai 90 tampak “lebih istimewa” di Kelas A?**

Karena sebaran Kelas A lebih kecil, nilai 90 berada 1.06 SD di atas mean Kelas A, tetapi hanya 0.69
SD di atas mean Kelas B. Nilai yang sama menempati posisi relatif berbeda tergantung sebaran
kelasnya.

**4. Apa rekomendasi bagi dosen?**

Kelas A cukup ditangani dengan pengajaran standar. Kelas B membutuhkan **pendekatan**
**berlapis:** pendampingan tambahan bagi kelompok bernilai rendah, dan materi pengayaan bagi
kelompok bernilai tinggi. Kesimpulan ini **tidak akan terlihat** bila hanya membandingkan mean.

<hr style="border: 2px solid black; width: 50%; margin: 50px auto;">

# Latihan Mandiri

## Latihan Utama (Exercise 2.14 Lanjutan): Kepemilikan Kartu Kredit

**Konteks:** Sebuah sampel acak dari 80 orang dewasa ditanya mengenai jumlah kartu kredit yang
mereka miliki. Data sudah disajikan dalam kelas (data terkelompok):



### Tugas 1: Klasifikasi variabel dan pemilihan ukuran

Variabel yang diamati adalah **jumlah kartu kredit yang dimiliki.** Karena berupa hasil **hitun-**
**gan** (bilangan bulat non-negatif) dengan nol mutlak, variabelnya **kuantitatif diskrit berskala**
**rasio.** Dengan skala rasio, **semua** ukuran pemusatan dan penyebaran (termasuk koefisien variasi)
valid untuk dihitung.

### Tugas 2: Hitung titik tengah kelas (m) untuk interval “4 to 7”

11.3 [1] 5.5


Titik tengah kelas "4 to 7" adalah **5.5**, diperoleh dari $\dfrac{4+7}{2}$ (sama dengan menggunakan batas nyata: $\dfrac{3{,}5+7{,}5}{2}$).

### Tugas 3: Hitung mean, median, dan modus

11.4 n Mean Median Modus

11.5 80.00 7.10 6.88 6.17


Kelas median dan kelas modus keduanya adalah “4 to 7” (frekuensi terbesar = 26; frekuensi kumu-
latif melampaui 40 di kelas ini).

### Tugas 4: Hitung varians, simpangan baku, dan koefisien variasi

11.6 Varians SD CV_persen

11.7 16.85 4.10 57.82


### Tugas 5: Interpretasikan bentuk distribusi dan variabilitasnya

11.8 Mean

11.9 0.16



```{=html}
<div class="plotly html-widget html-fill-item" id="htmlwidget-494c6bbfceedb9bdba15" style="width:768px;height:480px;"></div>
<script type="application/json" data-for="htmlwidget-494c6bbfceedb9bdba15">{"x":{"visdat":{"140413ac210c":["function () ","plotlyVisDat"]},"cur_data":"140413ac210c","attrs":{"140413ac210c":{"alpha_stroke":1,"sizes":[10,100],"spans":[1,20],"x":[1.5,5.5,9.5,13.5],"y":[18,26,22,14],"type":"bar","width":[4,4,4,4],"marker":{"color":["#91C2A6","#0B5D2E","#4E8F6A","#D5F5E3"],"line":{"color":"white","width":1.5}},"text":[18,26,22,14],"textposition":"outside","textfont":{"size":14},"showlegend":false,"customdata":["0 - 3","4 - 7","8 - 11","12 - 15"],"hovertemplate":"Kelas: <b>%{customdata}<\/b> kartu<br>Frekuensi: %{y}<extra><\/extra>","inherit":true},"140413ac210c.1":{"alpha_stroke":1,"sizes":[10,100],"spans":[1,20],"x":[7.0999999999999996,7.0999999999999996],"y":[0,31.199999999999999],"type":"scatter","mode":"lines","name":"Mean","line":{"color":"black","width":3},"hovertemplate":"Mean: 7.1<extra><\/extra>","inherit":true},"140413ac210c.2":{"alpha_stroke":1,"sizes":[10,100],"spans":[1,20],"x":[6.884615384615385,6.884615384615385],"y":[0,31.199999999999999],"type":"scatter","mode":"lines","name":"Median","line":{"color":"#E67E22","width":3,"dash":"dash"},"hovertemplate":"Median: 6.88<extra><\/extra>","inherit":true},"140413ac210c.3":{"alpha_stroke":1,"sizes":[10,100],"spans":[1,20],"x":[6.1666666666666661,6.1666666666666661],"y":[0,31.199999999999999],"type":"scatter","mode":"lines","name":"Modus","line":{"color":"#1F4E9E","width":3,"dash":"dot"},"hovertemplate":"Modus: 6.17<extra><\/extra>","inherit":true}},"layout":{"margin":{"b":40,"l":70,"t":80,"r":40},"title":{"text":"<b>Distribusi Kepemilikan Kartu Kredit (n = 80)<\/b>","x":0.5,"xanchor":"center"},"bargap":0,"xaxis":{"domain":[0,1],"automargin":true,"title":"","tickvals":[0,5,10,15],"range":[-1,16],"showgrid":false,"zeroline":false,"showline":true,"mirror":true},"yaxis":{"domain":[0,1],"automargin":true,"title":"Frekuensi","range":[0,31.199999999999999],"showticklabels":false,"ticks":"","showgrid":false,"zeroline":false,"showline":true,"mirror":true},"legend":{"x":0.96999999999999997,"y":0.96999999999999997,"xanchor":"right","yanchor":"top","bgcolor":"rgba(255,255,255,0.7)"},"hovermode":"closest","showlegend":true},"source":"A","config":{"modeBarButtonsToAdd":["hoverclosest","hovercompare"],"showSendToCloud":false},"data":[{"x":[1.5,5.5,9.5,13.5],"y":[18,26,22,14],"type":"bar","width":[4,4,4,4],"marker":{"color":["#91C2A6","#0B5D2E","#4E8F6A","#D5F5E3"],"line":{"color":"white","width":1.5}},"text":[18,26,22,14],"textposition":["outside","outside","outside","outside"],"textfont":{"size":14},"showlegend":false,"customdata":["0 - 3","4 - 7","8 - 11","12 - 15"],"hovertemplate":["Kelas: <b>%{customdata}<\/b> kartu<br>Frekuensi: %{y}<extra><\/extra>","Kelas: <b>%{customdata}<\/b> kartu<br>Frekuensi: %{y}<extra><\/extra>","Kelas: <b>%{customdata}<\/b> kartu<br>Frekuensi: %{y}<extra><\/extra>","Kelas: <b>%{customdata}<\/b> kartu<br>Frekuensi: %{y}<extra><\/extra>"],"error_y":{"color":"rgba(31,119,180,1)"},"error_x":{"color":"rgba(31,119,180,1)"},"xaxis":"x","yaxis":"y","frame":null},{"x":[7.0999999999999996,7.0999999999999996],"y":[0,31.199999999999999],"type":"scatter","mode":"lines","name":"Mean","line":{"color":"black","width":3},"hovertemplate":["Mean: 7.1<extra><\/extra>","Mean: 7.1<extra><\/extra>"],"marker":{"color":"rgba(255,127,14,1)","line":{"color":"rgba(255,127,14,1)"}},"error_y":{"color":"rgba(255,127,14,1)"},"error_x":{"color":"rgba(255,127,14,1)"},"xaxis":"x","yaxis":"y","frame":null},{"x":[6.884615384615385,6.884615384615385],"y":[0,31.199999999999999],"type":"scatter","mode":"lines","name":"Median","line":{"color":"#E67E22","width":3,"dash":"dash"},"hovertemplate":["Median: 6.88<extra><\/extra>","Median: 6.88<extra><\/extra>"],"marker":{"color":"rgba(44,160,44,1)","line":{"color":"rgba(44,160,44,1)"}},"error_y":{"color":"rgba(44,160,44,1)"},"error_x":{"color":"rgba(44,160,44,1)"},"xaxis":"x","yaxis":"y","frame":null},{"x":[6.1666666666666661,6.1666666666666661],"y":[0,31.199999999999999],"type":"scatter","mode":"lines","name":"Modus","line":{"color":"#1F4E9E","width":3,"dash":"dot"},"hovertemplate":["Modus: 6.17<extra><\/extra>","Modus: 6.17<extra><\/extra>"],"marker":{"color":"rgba(214,39,40,1)","line":{"color":"rgba(214,39,40,1)"}},"error_y":{"color":"rgba(214,39,40,1)"},"error_x":{"color":"rgba(214,39,40,1)"},"xaxis":"x","yaxis":"y","frame":null}],"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.20000000000000001,"selected":{"opacity":1},"debounce":0},"shinyEvents":["plotly_hover","plotly_click","plotly_selected","plotly_relayout","plotly_brushed","plotly_brushing","plotly_clickannotation","plotly_doubleclick","plotly_deselect","plotly_afterplot","plotly_sunburstclick"],"base_url":"https://plot.ly"},"evals":[],"jsHooks":[]}</script>

Jawaban: Mean (7.1) sedikit di atas median (6.88) dan modus (6.17), dengan Sk = 0.16, sehingga distribusinya hampir simetris dengan sedikit kemencengan ke kanan. Rata-rata orang dalam sampel memiliki sekitar 7 kartu kredit. CV sebesar 57.8% menunjukkan variabilitas yang tinggi (simpangan baku mencapai lebih dari separuh mean-nya) – kepemilikan kartu kredit sangat beragam antarindividu.

11.9.1 Tugas 6 (Tantangan): Sensitivitas terhadap Kelas Terbuka

Bagaimana jika kelas “12 or more” ternyata mencakup orang dengan hingga 19 kartu (batas atas 19, bukan 15)?

Mean Median Modus SD
Asumsi batas atas 15 7.10 6.88 6.17 4.10
Asumsi batas atas 19 7.45 6.88 6.17 4.69

Jawaban: Median dan modus tidak berubah (keduanya berada di kelas “4 to 7”), tetapi mean dan simpangan baku meningkat karena titik tengah kelas terakhir bergeser. Ini contoh nyata bahwa median dan modus lebih tahan terhadap ketidakjelasan kelas terbuka dibanding mean. Karena itu, asumsi batas kelas terbuka harus selalu dinyatakan secara eksplisit.

11.9.2 Latihan Tambahan (Self-Check)

Kerjakan soal-soal berikut secara mandiri sebelum melihat kunci jawaban pada komentar kode.

Soal A. Data waktu tempuh (menit) 12 karyawan menuju kantor: 15, 22, 18, 30, 25, 20, 35, 28, 19, 24, 27, 33. Hitung mean, median, modus, rentang, varians, simpangan baku, dan koefisien variasi. Waktu tempuh berapa yang memiliki z-score terbesar?

Soal B. Dua reksa dana memiliki statistik imbal hasil tahunan berikut: Reksa Dana X (mean 12%, SD 3%) dan Reksa Dana Y (mean 25%, SD 5%). Manakah yang risikonya (variabilitas) relatif lebih kecil?

Soal C. Harga (miliar rupiah) 8 rumah di suatu perumahan: 0,85; 0,90; 0,95; 0,90; 1,05; 1,10; 0,98; 9,5. (a) Hitung mean, median, dan simpangan baku. (b) Hitung ulang ketiganya tanpa rumah termahal. (c) Ukuran pusat mana yang sebaiknya dilaporkan? Mengapa?

Soal D. Rina mendapat nilai 72 pada ujian yang mean-nya 65 dengan SD 5. Dewi mendapat nilai 80 pada ujian lain yang mean-nya 70 dengan SD 10. Siapa yang prestasi relatifnya lebih baik?


12 Kesalahan Umum dalam Ukuran Pemusatan dan Penyebaran

Ringkasan kesalahan yang paling sering dijumpai, berdasarkan contoh-contoh pada praktikum ini:

  1. Memakai mean untuk data menceng atau beroutlier tanpa memeriksa median – hasil- nya tidak mewakili “kebanyakan” data (contoh: gaji, harga rumah).

  2. Menghitung mean untuk data nominal atau ordinal – misalnya “rata-rata jenis ke- lamin” atau merata-ratakan peringkat kepuasan seolah jaraknya sama.

  3. Lupa bahwa var() dan sd() di R memakai pembagi n − 1 – untuk data populasi, hasilnya sedikit berbeda dari σ 2 dan σ.

  4. Menyangka range()di R mengembalikan selisih – fungsi itu mengembalikan nilai min- imum dan maksimum; gunakan diff(range(x)).

  5. Membandingkan simpangan baku antarvariabel berbeda skala (cm vs kg) tanpa koefisien variasi.

  6. Menggunakan koefisien variasi pada skala interval (misalnya suhu °C) atau pada data dengan mean mendekati nol.

  7. Merata-ratakan rata-rata tanpa bobot – rata-rata gabungan harus tertimbang menurut ukuran kelompok.

  8. Melaporkan ukuran pusat tanpa ukuran sebaran (dan tanpa n) – pembaca tidak bisa menilai keterwakilan pusat data.

  9. Menghapus outlier otomatis tanpa menyelidiki penyebabnya.

  10. Menerapkan aturan empiris pada distribusi yang tidak berbentuk lonceng – gu- nakan Chebyshev untuk bentuk sembarang.

  11. Menganggap hasil data terkelompok sebagai nilai eksak – itu hanya aproksimasi, dan hasilnya (terutama mean dan SD) sensitif terhadap asumsi kelas terbuka.

  12. Mencari modus pada data kontinu mentah – nilai hampir tidak pernah berulang; kelom- pokkan dahulu dan gunakan kelas modus.


13 Cheat Sheet: Fungsi R yang Digunakan

Fungsi Kegunaan
mean(x) Rata-rata hitung; mean(x, trim = 0.1) untuk trimmed mean
weighted.mean(x, w) Rata-rata tertimbang dengan bobot w
median(x) Median
table(x) Menghitung frekuensi tiap nilai (dasar mencari modus)
which.max(f) Indeks nilai terbesar (mencari kelas modus)
summary(x) Min, Q1, median, mean, Q3, maks
range(x) Nilai minimum dan maksimum (bukan selisih)
diff(range(x)) Rentang
var(x) Varians sampel (pembagi \(n - 1\))
sd(x) Simpangan baku sampel
scale(x) Menghitung z-score
hist(x, breaks = ...) Histogram
stripchart(x, method = ...) Diagram titik untuk data kecil
abline(v = ...) Menambahkan garis vertikal (mean, median, dst.) pada grafik
cumsum(x) Frekuensi kumulatif (mencari kelas median)
cut(x, breaks = ...) Mengelompokkan data numerik ke dalam kelas
sapply(list, fungsi) Menerapkan fungsi ke beberapa dataset sekaligus
layout() / par(mfrow = ...) Mengatur beberapa grafik dalam satu tampilan
kable(df) Menampilkan data.frame sebagai tabel rapi (paket knitr)

14 Glosarium Istilah

Istilah Definisi Singkat
Ukuran Pemusatan Nilai tunggal yang menggambarkan “pusat” atau nilai tipikal data
Mean Jumlah semua nilai dibagi banyaknya data
Rata-rata Tertimbang Mean dengan bobot berbeda untuk tiap nilai
Trimmed Mean Mean setelah membuang persentase tertentu data terkecil dan terbesar
Median Nilai tengah data terurut; membagi data menjadi dua bagian sama banyak
Modus Nilai yang paling sering muncul
Istilah Definisi Singkat
Ukuran Penyebaran Ukuran seberapa jauh data menyebar dari pusatnya
Rentang (Range) Selisih nilai terbesar dan terkecil
Deviasi Selisih sebuah nilai dengan mean: \(x_i - \bar{x}\)
Varians Rata-rata kuadrat deviasi (pembagi \(n - 1\) untuk sampel)
Simpangan Baku Akar varians; ukuran sebaran dengan satuan sama seperti data
Koefisien Variasi (CV) Simpangan baku relatif terhadap mean, dalam persen
Derajat Bebas Banyaknya nilai yang bebas bervariasi; pada varians sampel sebesar \(n - 1\)
Skewness (Kemencengan) Ukuran ketidaksimetrisan suatu distribusi
Bimodal Distribusi dengan dua puncak (modus) berbeda
Outlier Data yang nilainya jauh menyimpang dari mayoritas data
Robust (Tahan) Ukuran yang tidak banyak berubah oleh keberadaan outlier
Z-Score Jarak sebuah nilai dari mean dalam satuan simpangan baku
Aturan Empiris Aturan 68-95-99,7 untuk data berbentuk lonceng
Teorema Chebyshev Batas minimal proporsi data dalam \(k\) simpangan baku, berlaku untuk sembarang distribusi
Titik Tengah Kelas (\(m\)) Nilai representatif kelas pada perhitungan data terkelompok
Kelas Median / Kelas Modus Kelas yang memuat median / kelas dengan frekuensi terbesar

15 Rangkuman dan Kesimpulan

  1. Pusat dan sebaran berpasangan. Ukuran pemusatan menjawab “di mana pusat data?”, ukuran penyebaran menjawab “seberapa menyebar?”. Melaporkan salah satunya saja tidak lengkap.

  2. Skala data menentukan ukuran yang valid. Modus untuk nominal; median untuk ordi- nal; mean untuk interval/rasio; koefisien variasi khusus rasio.

  3. Mean vs median. Mean memakai seluruh data tetapi sensitif terhadap outlier; median tahan outlier. Selisih keduanya menandakan kemencengan: mean > median (menjulur kanan), mean < median (menjulur kiri).

  4. Varians dan simpangan baku mengukur rata-rata jarak data dari mean. Untuk sampel, pembaginya n − 1. Simpangan baku berpasangan dengan mean.

  5. Koefisien variasi dan z-score memungkinkan perbandingan yang adil lintas skala: CV untuk variabilitas, z-score untuk posisi relatif individu.

  6. Nilai ekstrem menarik mean, SD, rentang, dan CV, tetapi hampir tidak memengaruhi median. Nilai ekstrem harus diselidiki, bukan dibuang otomatis.

  7. Data terkelompok memberi aproksimasi. Rumus titik tengah, kelas median, dan kelas modus berguna ketika data mentah tidak tersedia, tetapi hasilnya tidak eksak.

  8. Pelaporan yang jujur mencantumkan ukuran pusat, sebaran, dan ukuran sampel, serta memilih ukuran yang sesuai dengan bentuk data.

Jembatan ke sesi berikutnya: ukuran pusat dan sebaran meringkas data dengan dua angka, tetapi menyembunyikan detail seperti “di mana 25% data terbawah?” atau “nilai mana yang terlalu jauh?”. Pertemuan 6 membahas ukuran posisi (kuartil, desil, persentil), IQR dan boxplot, bentuk distribusi, serta deteksi dan penanganan outlier secara formal.


16 Referensi Pendukung

Materi ini merangkum topik ukuran pemusatan dan penyebaran data (measures of central tendency and dispersion) yang umum dibahas pada bab statistika deskriptif buku teks pengantar statistika bisnis/data science. Mahasiswa disarankan melengkapi pemahaman dengan merujuk pada:

• Modul/slide perkuliahan “Introduction to Statistics (SDT-1102)” – Pertemuan 5: Statistika Deskriptif (Measures of Central Tendency and Dispersion).

• Dokumentasi resmi R: ?mean, ?median, ?var, ?sd, ?weighted.mean, ?scale (dapat diakses langsung di R/RStudio).

• Buku teks pengantar statistika deskriptif pada bab Ukuran Pemusatan dan Ukuran Penye- baran.