Daftar Anggota :
Halo!
Di dunia statistik, ada dua tokoh penting yang sering banget kita temui: Distribusi Normal dan Distribusi Eksponensial. Keduanya punya peran besar dalam berbagai analisis dan model.
Distribusi Normal dan Eksponensial adalah dua distribusi kontinu yang paling sering digunakan dalam statistika. Distribusi normal dikenal dengan bentuknya yang seperti lonceng dan simetris, serta digunakan untuk memodelkan data yang cenderung mengumpul di sekitar nilai tengah, seperti tinggi badan atau nilai ujian. Distribusi ini punya dua parameter: rata-rata (mean) dan simpangan baku (standard deviation), yang mengatur pusat dan sebaran datanya.
Sementara itu, distribusi eksponensial digunakan untuk menggambarkan waktu tunggu antar kejadian, misalnya waktu antar kedatangan pelanggan atau kerusakan mesin. Distribusi ini hanya punya satu parameter, yaitu laju kejadian (lambda), dan punya bentuk yang menurun tajam ke kanan. Salah satu ciri khasnya adalah sifat memoryless, artinya peluang suatu kejadian tidak dipengaruhi oleh waktu yang telah berlalu.
Di proyek kali ini, kami bikin sebuah mini-package R bernama DistCont yang isinya fungsi-fungsi kece buat ngitung PDF & CDF dan juga simulasi data semua untuk si Normal dan Eksponensial ini.
Rumus :
\[ f(x) = \frac{1}{\sigma \sqrt{2\pi}} \cdot e^{- \frac{(x - \mu)^2}{2\sigma^2} } \]
Fungsi R :
Rumus :
\[ F(x) = \frac{1}{\sqrt{2\pi}} \int_{-\infty}^{x} e^{ -\frac{(t - \mu)^2}{2\sigma^2} } \, dt \]
Fungsi R :
pnorm_manual <- function(q, mean = 0, sd = 1) {
if (sd <= 0) stop("Standard deviation must be positive")
# Using the Z-score and approximation
z <- (q - mean) / sd
t <- 1 / (1 + 0.2316419 * abs(z))
d <- 0.3989423 * exp(-z * z / 2)
p <- d * t * (0.3193815 + t * (-0.3565638 + t * (1.781478 + t * (-1.821256 + t * 1.330274))))
ifelse(z > 0, 1 - p, p)
}Dalam penelitian pertumbuhan tinggi badan remaja putri usia 16 tahun, diperoleh data bahwa tinggi badan mengikuti distribusi normal dengan rata-rata mean = 158 cm dan standar deviasi sd = 6 cm.
##
## Attaching package: 'DistCont'
## The following objects are masked _by_ '.GlobalEnv':
##
## dnorm_manual, pnorm_manual
## [1] 0.05324133
## [1] 0.7475076
Rumus :
\[ f(x) = \begin{cases} \lambda e^{-\lambda x}, & x \geq 0 \\ 0, & x < 0 \end{cases} \]
Fungsi R :
Rumus :
\[ F(x) = \begin{cases} 1 - e^{-\lambda x}, & x \geq 0 \\ 0, & x < 0 \end{cases} \]
Fungsi R :
Di sebuah ruang pelayanan SIM keliling, rata-rata waktu antar kedatangan pemohon SIM baru adalah 20 menit. Diasumsikan waktu antar kedatangan mengikuti distribusi eksponensial.
## [1] 0.03032653
## [1] 0.3934693
## [1] "dexp_manual" "dnorm_manual" "pexp_manual" "pnorm_manual" "rexp_manual"
## [6] "rnorm_manual"
Distribusi Normal:
rnorm_manual <- function(n, mean = 0, sd = 1) {
if (sd <= 0) stop("Standard deviation must be positive")
# Box-Muller transform
u1 <- runif(n)
u2 <- runif(n)
z0 <- sqrt(-2 * log(u1)) * cos(2 * pi * u2)
return(mean + sd * z0)
}Distribusi Eksponensial:
Seorang peneliti ingin mempelajari kebiasaan tidur mahasiswa Universitas Islam Indonesia. Berdasarkan studi sebelumnya, waktu tidur mahasiswa per malam mengikuti distribusi normal dengan: - Rata-rata (mean) = 6,5 jam - Simpangan baku (sd) = 1 jam Untuk keperluan analisis, peneliti ingin melakukan simulasi data waktu tidur dari 100 mahasiswa kemudian Menghitung proporsi mahasiswa dengan tidur < 6 jam yang di indikasikan sebagai “tidur kurang dari ideal”.
# 1. Simulasi 100 data waktu tidur
set.seed(123) # Untuk hasil yang bisa direplikasi
tidur <- rnorm_manual(n = 100, mean = 6.5, sd = 1)
# 2. Hitung proporsi tidur < 6 jam
prop_kurang_6 <- mean(tidur < 6)
prop_kurang_6## [1] 0.35
Sebuah tempat layanan pelanggan mencatat bahwa rata-rata terdapat satu pelanggan yang datang setiap 3 menit, yang dapat dimodelkan dengan distribusi eksponensial dengan laju kedatangan (rate) λ = 1/3. Berdasarkan informasi tersebut, lakukan simulasi sebanyak 50 waktu antar kedatangan pelanggan menggunakan fungsi distribusi eksponensial. Selain itu, hitunglah peluang bahwa seorang pelanggan akan datang dalam waktu kurang dari atau sama dengan 2 menit.
library(DistCont) # Paket kamu sendiri
set.seed(123)
n <- 50
rate <- 1/3 # 1 pelanggan tiap 3 menit
# Simulasi data waktu antar kedatangan
interarrival <- rexp_manual(n, rate)
# Waktu kedatangan kumulatif
arrival <- cumsum(interarrival)
# Probabilitas pelanggan datang dalam <= 2 menit
prob_2_menit <- pexp_manual(2, rate)
cat("P(Pelanggan datang dalam ≤ 2 menit):", round(prob_2_menit,4),"\n")## P(Pelanggan datang dalam ≤ 2 menit): 0.4866
Jadi, lewat package DistCont ini kita bisa dengan mudah:
Cocok banget buat keperluan belajar, eksplorasi data, sampai penelitian ringan.