Membangkitkan Distribusi Acak
Ambil sampel dari distribusi normal, seragam, binomial, dan Poisson.
Membangkitkan Distribusi Acak adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.
Fungsi Distribusi R
R menyediakan empat fungsi untuk setiap distribusi: r (acak), d (kepadatan), p (probabilitas kumulatif), q (kuantil). Fungsi r* menghasilkan sampel acak.
# Pattern: r<dist>(n, param1, param2, ...)
# d<dist>(x, ...) -> density/probability
# p<dist>(q, ...) -> cumulative probability
# q<dist>(p, ...) -> quantile
# Example with normal distribution:
rnorm(5, mean = 0, sd = 1) # 5 random draws
dnorm(0, mean = 0, sd = 1) # density at x=0
pnorm(1.96, mean = 0, sd = 1) # P(X <= 1.96)
qnorm(0.975, mean = 0, sd = 1) # z-score for 97.5%
cat('Four functions: r, d, p, q for each distribution')rnorm(): Distribusi Normal
rnorm(n, mean, sd) menghasilkan n sampel dari N(mean, sd²). Nilai bawaannya adalah distribusi normal standar N(0,1). Distribusi normal merupakan andalan statistika—teorema limit pusat menjamin kemunculannya yang luas.
set.seed(42)
# Standard normal (mean=0, sd=1)
z_scores <- rnorm(1000)
mean(z_scores) # ~0
sd(z_scores) # ~1
# Custom normal (IQ scores: mean=100, sd=15)
set.seed(42)
iq_scores <- rnorm(100, mean = 100, sd = 15)
mean(iq_scores) # ~100
sd(iq_scores) # ~15
summary(iq_scores)
# About 68% within 1 sd
mean(abs(iq_scores - 100) < 15) # ~0.68runif(): Distribusi Seragam
runif(n, min, max) menghasilkan n sampel yang terdistribusi seragam antara min dan max. Semua nilai dalam rentang tersebut memiliki peluang yang sama. Nilai bawaan: runif(n) menghasilkan nilai dalam [0, 1].
set.seed(7)
# Default: uniform on [0, 1]
u <- runif(5)
print(u) # values in (0, 1)
# Uniform on [a, b]
temps <- runif(100, min = -10, max = 40) # temperatures
mean(temps) # ~15 (midpoint)
range(temps) # should be within [-10, 40]
# Discrete simulation using floor()
dice_rolls <- floor(runif(10, min = 1, max = 7))
print(dice_rolls) # integers 1-6
table(floor(runif(600, 1, 7))) # roughly equal countsrbinom(): Distribusi Binomial
rbinom(n, size, prob) menyimulasikan n percobaan binomial, yang masing-masing terdiri atas size percobaan Bernoulli dengan probabilitas keberhasilan prob. Gunakan size=1 untuk pengambilan Bernoulli.
set.seed(123)
# 10 coin flips (prob=0.5), repeated 5 times
coin_flips <- rbinom(5, size = 10, prob = 0.5)
print(coin_flips) # number of heads each time
# Bernoulli: single flip (size=1)
flips <- rbinom(20, size = 1, prob = 0.5)
print(flips) # 0s and 1s
mean(flips) # ~0.5
# Biased coin (prob=0.7)
biased <- rbinom(1000, size = 1, prob = 0.7)
mean(biased) # ~0.7
# Many trials: normal approximation kicks in
hundred_flips <- rbinom(1000, size = 100, prob = 0.5)
mean(hundred_flips) # ~50rpois(): Distribusi Poisson
rpois(n, lambda) menghasilkan n sampel dari distribusi Poisson dengan laju λ. Distribusi ini memodelkan data cacahan (peristiwa per interval): kunjungan situs web per menit, cacat per unit, atau panggilan per jam.
set.seed(5)
# Calls received per hour (average 3)
calls <- rpois(24, lambda = 3) # 24 hours
print(calls) # integers, mostly 1-6
mean(calls) # ~3 (expectation = lambda)
var(calls) # ~3 (variance = lambda for Poisson)
# Count the distribution
table(calls)
# Rare events (lambda=0.5)
rare_events <- rpois(100, lambda = 0.5)
table(rare_events) # mostly 0s and 1s
mean(rare_events) # ~0.5rexp(): Distribusi Eksponensial
rexp(n, rate) menghasilkan n sampel dari distribusi eksponensial dengan laju yang ditentukan. Distribusi ini memodelkan waktu antarperistiwa (waktu antarkedatangan). Rata-rata = 1/rate. Memiliki sifat tanpa ingatan.
set.seed(42)
# Time between customer arrivals (rate=2 per minute)
# Mean wait time = 1/2 = 0.5 minutes
arrival_times <- rexp(100, rate = 2)
mean(arrival_times) # ~0.5
sd(arrival_times) # ~0.5 (mean = sd for exponential)
# Simulate a queue
cumulative_arrivals <- cumsum(rexp(10, rate = 3))
print(round(cumulative_arrivals, 3))
# Exponential CDF: P(X <= x) = 1 - exp(-rate*x)
pexp(0.5, rate = 2) # P(wait <= 0.5 min)
mean(arrival_times <= 0.5) # empirical estimatesample(): Pengambilan Sampel Diskret
sample(x, size, replace) mengambil size elemen dari vektor x. replace=FALSE (nilai bawaan) berarti pengambilan sampel tanpa pengembalian; replace=TRUE memungkinkan nilai yang berulang.
set.seed(10)
# Sample without replacement (like drawing cards)
cards <- 1:52
hand <- sample(cards, size = 5, replace = FALSE)
print(hand) # 5 unique cards
# Sample with replacement (bootstrap)
x <- c(10, 20, 30, 40, 50)
bootstrap_sample <- sample(x, size = 5, replace = TRUE)
print(bootstrap_sample) # may have repeats
# Simulate rolling two dice 1000 times
dice <- function() sum(sample(1:6, 2, replace = TRUE))
rolls <- replicate(1000, dice())
table(rolls) / 1000 # empirical probabilitiesPengambilan Sampel Berbobot
sample(x, size, replace, prob) menggunakan bobot probabilitas. Vektor prob menetapkan probabilitas relatif untuk setiap elemen—berguna untuk distribusi diskret yang tidak seragam.
set.seed(99)
# Loaded die: 6 is twice as likely
faces <- 1:6
weights <- c(1, 1, 1, 1, 1, 2) # relative
norm_weights <- weights / sum(weights)
rolls <- sample(faces, size = 1000, replace = TRUE,
prob = norm_weights)
table(rolls) / 1000
# 6 appears ~2/7 ~= 0.286 of the time
# Categorical sampling
categories <- c('A', 'B', 'C')
probs <- c(0.5, 0.3, 0.2)
sample(categories, 10, replace = TRUE, prob = probs)rgeom() dan rnbinom(): Distribusi Cacahan
rgeom(n, prob) menghitung kegagalan sebelum keberhasilan pertama. rnbinom(n, size, prob) menghitung kegagalan sebelum size keberhasilan. Keduanya memodelkan data cacahan yang overdispersi (variansnya lebih besar daripada Poisson).
set.seed(42)
# Geometric: flips until first head (prob=0.3)
# Number of FAILURES before first success
flips_until_head <- rgeom(10, prob = 0.3) + 1 # +1 for the success
print(flips_until_head)
mean(flips_until_head) # ~1/0.3 = 3.33
# Negative binomial: overdispersed count data
# e.g., number of parasites per host
counts <- rnbinom(100, size = 2, prob = 0.4)
mean(counts) # ~3 (theoretical: size*(1-p)/p)
var(counts) # much larger than mean -> overdispersed
# Compare variance to Poisson with same mean
pois_counts <- rpois(100, lambda = mean(counts))
var(counts) / var(pois_counts) # > 1rt() dan rf(): Distribusi t dan F
rt(n, df) menghasilkan sampel yang berdistribusi t dengan derajat kebebasan df. Saat df → ∞, distribusi ini mendekati distribusi normal. rf(n, df1, df2) menghasilkan sampel yang berdistribusi F—rasio variabel khi-kuadrat.
set.seed(1)
# t distribution: heavier tails than normal
t_vals <- rt(1000, df = 5)
mean(t_vals) # ~0
sd(t_vals) # > 1 (inflated by heavy tails)
# Compare to normal
n_vals <- rnorm(1000)
# t has more extreme values (heavy tails)
sum(abs(t_vals) > 3) # e.g., ~30
sum(abs(n_vals) > 3) # e.g., ~3
# F distribution: used in ANOVA F-tests
f_vals <- rf(1000, df1 = 5, df2 = 20)
range(f_vals) # always positive
mean(f_vals) # ~df2/(df2-2) = 20/18 = 1.11Memvisualisasikan Distribusi Acak
Histogram dan plot kepadatan memvisualisasikan bentuk distribusi yang disimulasikan. Bandingkan kepadatan empiris dengan kurva kepadatan teoretis menggunakan hist() dengan pelapisan curve(dnorm(...)).
set.seed(42)
x <- rnorm(10000, mean = 5, sd = 2)
# Quick summary statistics
summary(x)
cat('Mean:', mean(x), '\n')
cat('SD:', sd(x), '\n')
cat('Skewness (should be ~0 for normal):',
mean(((x - mean(x))/sd(x))^3), '\n')
# Empirical quantiles vs theoretical
quantile(x, c(0.025, 0.25, 0.5, 0.75, 0.975))
# Compare to theoretical:
qnorm(c(0.025, 0.25, 0.5, 0.75, 0.975),
mean = 5, sd = 2)Pemeriksaan Singkat
Uji pengetahuan Anda tentang fungsi distribusi acak di R.
Ringkasan: Distribusi Acak
Hal-hal penting: rnorm(n, mean, sd) untuk distribusi normal; runif(n, min, max) untuk distribusi seragam; rbinom(n, size, prob) untuk distribusi binomial; rpois(n, lambda) untuk cacahan Poisson; rexp(n, rate) untuk waktu tunggu eksponensial; sample(x, size, replace) untuk pengambilan sampel diskret. Selalu gunakan set.seed() sebelum menghasilkan bilangan acak dalam analisis yang dapat direproduksi.
set.seed(42)
# Quick reference of common distributions:
rnorm(3, mean = 0, sd = 1) # Normal
runif(3, min = 0, max = 1) # Uniform
rbinom(3, size = 10, prob = 0.5) # Binomial
rpois(3, lambda = 3) # Poisson
rexp(3, rate = 1) # Exponential
rt(3, df = 10) # Student t
rf(3, df1 = 5, df2 = 20) # F distribution
rgeom(3, prob = 0.3) # Geometric
sample(1:10, 3, replace = TRUE) # Discrete uniform
cat('R has 20+ built-in distributions')Pertanyaan yang Sering Diajukan
Apakah pelajaran “Membangkitkan Distribusi Acak” gratis?
Ya — teks lengkap “Membangkitkan Distribusi Acak” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Membangkitkan Distribusi Acak”?
Ambil sampel dari distribusi normal, seragam, binomial, dan Poisson. Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai R Academy?
Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Membangkitkan Distribusi Acak” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?
Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- set.seed() dan Reproduksibilitas
- Membangkitkan Distribusi Acak
- Dasar-Dasar Simulasi Monte Carlo
- Pengambilan Sampel Ulang Bootstrap di R