Teorema Limit Pusat

Mengapa distribusi normal muncul di mana-mana, dibuktikan lewat simulasi.

Daftar isi

Teorema limit pusat (central limit theorem, CLT) menjelaskan mengapa kurva normal muncul hampir di seluruh analisis data, bahkan ketika datanya sendiri tidak normal. Topik ini membuktikan teorema tersebut lewat simulasi pada populasi yang jelas tidak normal, yaitu waktu tunggu loket berdistribusi eksponensial, dengan ukuran sampel 2, 10, dan 50. Rata-rata dan lebar distribusi hasil simulasinya diverifikasi terhadap teori, beserta batas penafsiran yang sering keliru.

Populasi yang jauh dari normal#

Waktu tunggu di loket menjadi contoh populasi yang jauh dari normal. Model yang lazim untuk waktu tunggu adalah distribusi eksponensial (exponential distribution) dengan rata-rata 2 menit, yang kepadatannya menurun tajam sejak nol dan berekor panjang ke kanan. Sebaran seperti ini adalah kebalikan kurva lonceng yang simetris, sehingga tidak ada alasan menganggap rata-rata sampelnya normal sejak awal. Justru karena populasinya tidak normal, keberhasilan CLT pada populasi ini menjadi bukti yang meyakinkan.

Sifat eksponensial yang perlu dicatat ada dua. Kemencengan (skewness) populasinya bernilai tetap sebesar 2 pada ukuran apa pun, sedangkan rata-rata dan simpangan bakunya sama besar, yaitu 2 menit. Pada loket yang melayani secara acak, waktu tunggu pendek paling sering terjadi, sedangkan waktu tunggu panjang jarang namun tetap mungkin. Model sejenis tidak terbatas pada loket, karena data tunggu dan umur pakai di banyak bidang juga menurun tajam dan berekor panjang. Bentuk data seperti inilah yang membuat rata-rata dari sedikit pelanggan masih menceng ke kanan.

Simulasi tiga panel#

Skrip berikut menarik 10000 sampel untuk setiap ukuran n=2,10,50n = 2, 10, 50 dari populasi eksponensial tersebut, menghitung rata-rata tiap sampel secara vektor, lalu menggambar tiga histogram kepadatan. Setiap panel memakai jendela horizontal sekitar ±4.5σ/n\pm 4.5\sigma/\sqrt{n} di sekitar 2 menit agar bentuk kurvanya terbaca. Kurva normal teoretis berparameter μ=2\mu = 2 dan σ/n\sigma/\sqrt{n} digambar berwarna merah sebagai pembanding pada ketiga panel.

python bukti-clt.py
"""Bukti simulasi teorema limit pusat pada populasi eksponensial."""
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

rng = np.random.default_rng(42)

MU = 2.0        # rata-rata waktu tunggu loket (menit)
N_ULANG = 10_000

fig, axes = plt.subplots(1, 3, figsize=(10, 3.5), constrained_layout=True)
for ax, n in zip(axes, (2, 10, 50)):
    sampel = rng.exponential(MU, size=(N_ULANG, n))
    rata = sampel.mean(axis=1)
    sigma_n = MU / np.sqrt(n)
    print(f"n = {n:>2}: rata-rata x-bar = {rata.mean():.4f} (teori {MU:.4f}), "
          f"std x-bar = {rata.std(ddof=1):.4f} (teori {sigma_n:.4f})")
    lo = max(0.0, MU - 4.5 * sigma_n)
    hi = MU + 4.5 * sigma_n
    ax.hist(rata, bins=40, range=(lo, hi), density=True,
            color="#a5b4fc", edgecolor="white")
    xs = np.linspace(lo, hi, 300)
    ax.plot(xs, stats.norm(MU, sigma_n).pdf(xs), "r-", linewidth=2,
            label="Normal teoretis")
    ax.set_title(f"n = {n}")
    ax.set_xlabel("Rata-rata sampel (menit)")
    ax.set_xlim(lo, hi)
axes[0].set_ylabel("Kepadatan")
axes[0].legend()
fig.savefig("bukti-clt-tiga-panel.png", dpi=110)
text Keluaran
n =  2: rata-rata x-bar = 1.9943 (teori 2.0000), std x-bar = 1.4211 (teori 1.4142)
n = 10: rata-rata x-bar = 2.0074 (teori 2.0000), std x-bar = 0.6363 (teori 0.6325)
n = 50: rata-rata x-bar = 1.9967 (teori 2.0000), std x-bar = 0.2813 (teori 0.2828)

Histogram rata-rata sampel dari populasi eksponensial bergeser dari menceng pada n = 2 menjadi lonceng yang menutupi kurva normal pada n = 50
Histogram rata-rata sampel dari populasi eksponensial bergeser dari menceng pada n = 2 menjadi lonceng yang menutupi kurva normal pada n = 50

Panel n=2n = 2 masih menceng ke kanan sebagaimana populasi asalnya. Panel n=10n = 10 sudah kehilangan sebagian besar kemencangannya, sedangkan panel n=50n = 50 berbentuk lonceng yang menutupi kurva normal merahnya. Keluaran numerik menguatkan gambar tersebut, yaitu rata-rata xˉ\bar{x} berkumpul di sekitar 2.0000 pada ketiga ukuran, sedangkan simpangan bakunya mengikuti 2/n2/\sqrt{n}, dari 1.4211 pada n=2n = 2 menjadi 0.2813 pada n=50n = 50.

Pola itulah isi teorema limit pusat. Untuk sampel acak berukuran nn yang anggotanya saling bebas dan berasal dari populasi dengan variansi hingga, distribusi rata-rata sampel mendekati normal dengan rata-rata μ\mu dan standard error σ/n\sigma/\sqrt{n} ketika nn membesar:

Xˉ≈Normal ⁣(μ,σn). \bar{X} \approx \text{Normal}\!\left(\mu, \frac{\sigma}{\sqrt{n}}\right).

Kondisi teoremanya ringkas, yaitu observasi saling bebas, berasal dari populasi yang sama, dan populasinya memiliki variansi hingga. Sebaran waktu tunggu pada simulasi ini memenuhi ketiganya. Ekor panjang eksponensial tidak menghalangi, karena yang mendekati normal adalah rata-ratanya, bukan datanya.

Rata-rata yang normal, data yang tidak#

CLT berbicara tentang rata-rata sampel, bukan tentang data individual. Populasi eksponensial tetap menceng berapa pun banyak sampel yang diambil, karena membentuk rata-rata tidak mengubah populasi asalnya. Yang berubah hanyalah statistik yang dihitung dari setiap sampel. Perbedaan ini mudah terlewat ketika histogram rata-rata sudah berbentuk lonceng.

Skrip berikut mengukur kemencengan kedua objek tersebut pada keluaran yang sama, yaitu 10000 data individual dan 10000 rata-rata sampel berukuran 50. Sebagai acuan pembacaan, kemencengan bernilai 0 menandakan sebaran yang simetris, sedangkan nilai positif menandakan ekor kanan yang lebih panjang.

python kemencengan.py
"""Kemencengan data individual dibandingkan dengan kemencengan rata-rata."""
import numpy as np
from scipy import stats

rng = np.random.default_rng(42)

data = rng.exponential(2.0, size=10_000)
rata_50 = rng.exponential(2.0, size=(10_000, 50)).mean(axis=1)

print(f"Kemencengan data individual  : {stats.skew(data):.4f}")
print(f"Kemencengan rata-rata n = 50 : {stats.skew(rata_50):.4f}")
print(f"Perkiraan teori 2/akar(50)   : {2 / np.sqrt(50):.4f}")
text Keluaran
Kemencengan data individual  : 1.9891
Kemencengan rata-rata n = 50 : 0.2642
Perkiraan teori 2/akar(50)   : 0.2828

Kemencengan 10000 data individual tercetak 1.9891, berdekatan dengan nilai teoretis eksponensial yaitu 2. Kemencengan 10000 rata-rata berukuran 50 turun menjadi 0.2642, berdekatan dengan perkiraan 2/50=0.28282/\sqrt{50} = 0.2828. Dua angka itu berada pada keluaran yang sama tetapi menggambarkan dua objek berbeda, yaitu data dan rata-rata sampelnya. Pencampuran keduanya menjadi penyebab utama salah tafsir CLT.

Kesalahan umum#

  • Menunggu data individual menjadi normal. CLT bekerja pada rata-rata sampel, sedangkan datanya tetap mengikuti populasinya. Perbaikannya, terapkan klaim normal hanya pada statistik seperti xˉ\bar{x}.
  • Memakai CLT pada sampel yang sangat kecil. Panel n=2n = 2 pada simulasi masih jelas menceng, sehingga pendekatan normalnya kasar. Perbaikannya, perlakukan CLT sebagai pendekatan yang membaik seiring nn dan periksa ukuran sampelnya lebih dahulu.
  • Mencampur ukuran sampel dengan jumlah pengulangan. Angka 10000 pada simulasi adalah banyaknya rata-rata yang dikumpulkan, sedangkan nn adalah isi setiap rata-rata. Yang mengendalikan bentuk lonceng adalah nn, bukan 10000.
  • Mengira CLT berlaku pada semua populasi tanpa kecuali. Distribusi dengan variansi tak hingga, misalnya Cauchy, tidak menghasilkan rata-rata yang menemukan bentuk lonceng. Perbaikannya, pastikan variansi populasinya hingga sebelum mengandalkan CLT.

Ringkasan#

  • Populasi eksponensial dengan rata-rata 2 menit menceng tajam, sehingga menjadi ujian yang tepat bagi CLT.
  • Histogram rata-rata sampel bergeser dari menceng pada n=2n = 2 menjadi lonceng pada n=50n = 50, dan menutupi kurva normal teoretisnya.
  • Rata-rata xˉ\bar{x} berkumpul di sekitar μ=2\mu = 2, sedangkan simpangan bakunya mengikuti σ/n\sigma/\sqrt{n} pada ketiga ukuran sampel.
  • CLT berbicara tentang rata-rata sampel, sedangkan data individual tetap menceng sebagaimana populasinya.

Referensi#