Distribusi

Mengambil sampel dari normal, uniform, integers, dan choice.

Daftar isi

Topik ini membahas pengambilan sampel dari distribusi yang paling sering digunakan melalui objek Generator, yaitu distribusi seragam, distribusi normal, bilangan bulat seragam, dan pemilihan nilai dari kumpulan yang tersedia. Setelah membacanya, parameter setiap metode dapat dihubungkan dengan sifat statistik sampel yang dihasilkan, dan ringkasan sampel dapat diperiksa terhadap parameter tersebut.

Distribusi seragam dengan uniform#

Distribusi seragam (uniform) memberikan peluang yang sama pada setiap nilai dalam satu rentang. Metode uniform(low, high, size) menghasilkan bilangan real pada rentang [low,high) [low, high) , sehingga batas bawah dapat muncul sedangkan batas atas tidak. Nilai harapan distribusi ini terletak di tengah rentang, yaitu (low+high)/2 (low + high) / 2 . Tidak ada bagian rentang yang diutamakan, sehingga histogram sampelnya mendekati persegi panjang yang datar. Parameter size menerima bilangan bulat maupun tuple, sehingga array dua dimensi dapat dibuat dalam satu pemanggilan, misalnya size=(2, 3). Blok berikut mengambil seratus ribu sampel pada rentang 10 sampai 20, lalu meringkasnya.

python Sampel seragam pada rentang 10 sampai 20
import numpy as np

rng = np.random.default_rng(seed=7)

sampel = rng.uniform(low=10.0, high=20.0, size=100_000)

print(sampel[:5])
print(f"rata-rata sampel : {np.mean(sampel):.4f}")
print(f"minimum          : {np.min(sampel):.4f}")
print(f"maksimum         : {np.max(sampel):.4f}")
text Keluaran
[16.25095467 18.97213801 17.7568569  12.2520719  13.00166285]
rata-rata sampel : 15.0050
minimum          : 10.0002
maksimum         : 19.9999

Rata-rata sampel 15.0050 hampir persis sama dengan nilai teoretis (10+20)/2=15 (10 + 20) / 2 = 15 . Nilai minimum dan maksimum menempel pada kedua batas tanpa melewatinya, sesuai dengan rentang [10,20) [10, 20) . Dengan seratus ribu sampel berseed, ringkasan ini stabil dan dapat diulang persis pada setiap eksekusi.

Distribusi normal dengan normal#

Distribusi normal adalah distribusi lonceng yang datanya terkonsentrasi di sekitar rata-rata. Notasi X∼N(μ,σ2) X \sim \mathcal{N}(\mu, \sigma^2) menyatakan sampel dengan rata-rata μ \mu dan varians σ2 \sigma^2 . Distribusi ini menjadi pilihan baku untuk memodelkan derau pengukuran maupun variasi alami yang mengelompok di sekitar rata-rata, sehingga metodenya muncul di hampir setiap alur statistik. Pada metode normal(loc, scale, size), parameter loc mengisi μ \mu dan parameter scale mengisi simpangan baku σ \sigma . Satu sifat yang sering digunakan untuk memeriksa sampel: sekitar 68% nilai berada dalam satu simpangan baku dari rata-ratanya, yaitu pada rentang [μ−σ,μ+σ] [\mu - \sigma, \mu + \sigma] .

python Sampel normal untuk statistik nilai ujian
import numpy as np

rng = np.random.default_rng(seed=7)

sampel = rng.normal(loc=70.0, scale=8.0, size=100_000)

print(f"rata-rata sampel      : {np.mean(sampel):.4f}")
print(f"simpangan baku sampel : {np.std(sampel):.4f}")
print(f"persentase di 62-78   : {np.mean((sampel >= 62.0) & (sampel <= 78.0)) * 100:.2f}")
text Keluaran
rata-rata sampel      : 69.9894
simpangan baku sampel : 7.9864
persentase di 62-78   : 68.31

Sampel seratus ribu nilai ujian dengan loc=70 dan scale=8 menghasilkan rata-rata 69.9894 serta simpangan baku 7.9864, masing-masing sangat dekat dengan parameternya. Persentase nilai pada rentang 62 sampai 78 tercatat 68.31%, konsisten dengan sifat 68% di atas. Perbandingan semacam ini adalah cara paling langsung untuk memastikan sampel mengikuti parameter yang diberikan.

Bilangan bulat dengan integers#

Metode integers(low, high, size) menghasilkan bilangan bulat yang seragam pada rentang [low,high) [low, high) . Untuk menirukan dadu enam sisi, rentangnya adalah 1 sampai 7, atau gunakan rentang 1 sampai 6 dengan endpoint=True. Parameter size menerima tuple untuk array multidimensi, dan seluruh nilai memiliki peluang yang sama karena distribusinya seragam. Hasilnya bertipe bilangan bulat 64 bit secara default pada lingkungan 64 bit, sehingga array berukuran besar tetap ringan di memori. Frekuensi kemunculan setiap nilai dihitung dengan np.bincount, yang hanya menerima nilai tidak negatif, sehingga rentang yang memuat bilangan negatif perlu digeser terlebih dahulu. Keseragaman dadu kemudian diperiksa langsung dari frekuensinya.

python Frekuensi muka dadu dari 60000 lemparan
import numpy as np

rng = np.random.default_rng(seed=7)

lemparan = rng.integers(low=1, high=7, size=60_000)
frekuensi = np.bincount(lemparan)[1:]

for muka, hitung in enumerate(frekuensi, start=1):
    print(f"muka {muka}: {hitung}")
text Keluaran
muka 1: 9899
muka 2: 9981
muka 3: 9959
muka 4: 9876
muka 5: 10153
muka 6: 10132

Setiap muka dadu muncul sekitar sepuluh ribu kali dari total 60.000 lemparan. Selisih antar muka berada pada kisaran ratusan, dan selisih sebesar itu wajar untuk sampel acak dengan ukuran ini. Apabila jumlah sampel diperbesar, frekuensi antar muka saling mendekat, tetapi selisih kecil terhadap jumlah ideal tidak pernah hilang sepenuhnya.

Memilih sampel dengan choice#

Metode choice(a, size, replace, p) memilih nilai dari kumpulan a. Parameter replace menentukan apakah satu nilai boleh terpilih lebih dari sekali. Pada mode tanpa pengembalian (without replacement), ukuran sampel tidak boleh melebihi banyaknya nilai yang tersedia. Parameter p menerima bobot peluang untuk setiap nilai, dengan jumlah yang harus tepat satu. Keluaran selalu berbentuk array dengan bentuk size, dan pemanggilan tanpa size mengembalikan satu nilai saja. Pola penggunaan yang lazim antara lain memilih indeks baris untuk penarikan contoh ulang (bootstrap) dan memilih langkah berikutnya pada simulasi berbasis peluang.

python Pemilihan nilai dengan dan tanpa pengembalian
import numpy as np

rng = np.random.default_rng(seed=7)

nama = np.array(["Ali", "Budi", "Citra", "Dewi"])

print(rng.choice(nama, size=3, replace=False))
print(rng.choice(nama, size=6, replace=True))
print(rng.choice([10, 20, 30, 40], size=8, p=[0.5, 0.25, 0.125, 0.125]))
text Keluaran
['Budi' 'Citra' 'Dewi']
['Dewi' 'Dewi' 'Ali' 'Ali' 'Budi' 'Budi']
[10 30 30 10 10 10 10 10]

Baris pertama memilih tiga nama berbeda tanpa pengembalian. Baris kedua mengizinkan pengembalian, sehingga nama yang sama muncul berulang. Baris ketiga memberi bobot 0.5 pada nilai 10 dan bobot yang lebih kecil pada nilai lainnya, sehingga nilai 10 mendominasi keluaran. Kumpulan a boleh berupa array string maupun array angka.

Kesalahan umum#

Meminta lebih banyak sampel daripada banyaknya nilai yang tersedia pada mode tanpa pengembalian. Pemanggilan semacam ini memicu ValueError karena tidak ada cukup nilai yang berbeda untuk diambil, dan ukuran populasi yang dimaksud adalah banyaknya elemen kumpulan a, bukan rentang nilainya. Blok berikut menunjukkan pesan errornya.

python Sampel tanpa pengembalian yang melebihi populasi
import numpy as np

rng = np.random.default_rng(seed=7)

try:
    sampel = rng.choice(np.arange(5), size=10, replace=False)
except ValueError as e:
    print(f"{type(e).__name__}: {e}")
text Keluaran
ValueError: Cannot take a larger sample than population when replace is False

Perbaikannya adalah memperbesar kumpulan nilai, mengecilkan size, atau mengatur replace=True apabila pengembalian memang diizinkan. Kesalahan serupa juga muncul apabila bobot p tidak berjumlah tepat satu, misalnya bobot 0.5, 0.2, 0.2, dan 0.2 yang jumlahnya 1.1. NumPy memeriksa jumlah bobot dengan toleransi yang ketat, sehingga bobot perlu diperiksa dengan np.sum terlebih dahulu bila bobotnya dihitung dinamis.

Menggunakan fungsi warisan karena contoh lama memuatnya. Fungsi seperti np.random.randint() bekerja pada state global dan tidak digunakan pada kode baru. Padanannya pada Generator adalah integers, sedangkan np.random.rand() dipetakan ke random dan np.random.randn() dipetakan ke normal. Mengetahui pemetaan ini memudahkan membaca kode lama tanpa menularkannya ke kode baru. Hasil API warisan dan Generator juga tidak dapat dibandingkan langsung meskipun seednya sama, karena algoritma di balik keduanya berbeda.

Ringkasan#

  • Metode uniform, normal, integers, dan choice mencakup sampel seragam real, normal, bulat seragam, dan pemilihan nilai.
  • Parameter distribusi terbaca kembali pada ringkasan sampel: rata-rata mendekati loc atau tengah rentang, dan simpangan baku mendekati scale.
  • Rentang pada uniform dan integers bersifat setengah terbuka, sehingga batas atas tidak ikut diambil.
  • choice mengatur pengembalian melalui replace dan bobot peluang melalui p, dengan jumlah bobot yang harus tepat satu.

Referensi#