KELOMPOK 8
MUHAMMAD SYOFIAN
ANGGIT NUR SAIF
ALI AKBAR QUMAINY
NAUFAL FACHREZI
Dalam statistika inferensial, tujuan utama adalah mengestimasi parameter populasi berdasarkan data sampel yang tersedia. Salah satu pendekatan yang paling umum dan kuat untuk estimasi parameter adalah Maximum Likelihood Estimation (MLE).
MLE adalah metode yang mencari nilai parameter yang memaksimalkan fungsi likelihood, yaitu fungsi yang menggambarkan seberapa besar kemungkinan data yang diamati dapat muncul berdasarkan nilai parameter tertentu. Dengan kata lain, MLE memilih parameter yang membuat data yang kita miliki menjadi yang “paling mungkin” terjadi.
Dua distribusi yang sering digunakan dalam banyak aplikasi statistika dan sains data adalah distribusi Normal dan distribusi Eksponensial. Distribusi Normal sering digunakan untuk memodelkan data yang bersifat simetris dan menyebar di sekitar rata-rata, sementara distribusi Eksponensial banyak digunakan untuk memodelkan waktu antar-kejadian, seperti waktu kegagalan sistem, waktu tunggu pelanggan, dan sebagainya.
Dalam dokumen ini, akan dibahas bagaimana MLE digunakan untuk mengestimasi parameter pada kedua distribusi tersebut menggunakan pendekatan matematis dan implementasi di bahasa pemrograman R.
Maximum Likelihood Estimation (MLE) adalah metode statistik yang digunakan untuk mengestimasi parameter suatu distribusi probabilitas dengan cara memaksimalkan fungsi likelihood berdasarkan data yang diamati.
Dalam konteks distribusi Normal, MLE digunakan untuk mengestimasi dua parameter utama, yaitu: - Rata-rata (\( \)) - Simpangan baku (\( \))
Jika diketahui sebuah sampel acak \( x_1, x_2, , x_n \) berasal dari distribusi Normal \( (, ^2) \), maka fungsi likelihood-nya adalah:
\[ L(\mu, \sigma) = \prod_{i=1}^{n} \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left( -\frac{(x_i - \mu)^2}{2\sigma^2} \right) \]
Untuk memudahkan proses optimasi, digunakan fungsi log-likelihood berikut:
\[ \ell(\mu, \sigma) = -\frac{n}{2} \log(2\pi) - n \log(\sigma) - \frac{1}{2\sigma^2} \sum_{i=1}^n (x_i - \mu)^2 \]
Dari fungsi log-likelihood tersebut, nilai parameter \( \) dan \( \) yang memaksimalkannya dapat dihitung. Hasil estimasi parameter dengan metode MLE adalah:
\[ \hat{\mu} = \frac{1}{n} \sum_{i=1}^n x_i \]
\[ \hat{\sigma} = \sqrt{ \frac{1}{n} \sum_{i=1}^n (x_i - \hat{\mu})^2 } \]
Berbeda dengan estimasi simpangan baku sampel (yang menggunakan pembagi \( n-1 \)), estimasi MLE menggunakan pembagi \( n \), karena diperoleh dari pendekatan likelihood terhadap seluruh populasi.
MLE menjadi metode yang sangat populer karena memiliki sifat konsisten, efisien, dan asimptotik normal ketika jumlah data besar.
Distribusi Eksponensial adalah distribusi probabilitas yang umum digunakan untuk memodelkan waktu antar-kejadian dalam proses Poisson. Distribusi ini hanya memiliki satu parameter, yaitu laju kejadian \( \).
Misalkan diperoleh data sampel \( x_1, x_2, , x_n \) yang diasumsikan berasal dari distribusi Eksponensial dengan fungsi densitas:
\[ f(x; \lambda) = \lambda \exp(-\lambda x), \quad x \geq 0, \lambda > 0 \]
Untuk memperoleh estimasi \( \), digunakan pendekatan Maximum Likelihood Estimation (MLE), yaitu dengan memaksimalkan fungsi likelihood:
\[ L(\lambda) = \prod_{i=1}^{n} \lambda \exp(-\lambda x_i) = \lambda^n \exp\left( -\lambda \sum_{i=1}^{n} x_i \right) \]
Log-likelihood-nya adalah:
\[ \ell(\lambda) = \log L(\lambda) = n \log(\lambda) - \lambda \sum_{i=1}^{n} x_i \]
Turunan pertama dari log-likelihood terhadap \( \) adalah:
\[ \frac{d\ell(\lambda)}{d\lambda} = \frac{n}{\lambda} - \sum_{i=1}^{n} x_i \]
Dengan menyamakan turunan tersebut dengan nol untuk memaksimalkan log-likelihood, diperoleh estimasi \( \) sebagai:
\[ \hat{\lambda} = \frac{n}{\sum_{i=1}^{n} x_i} = \frac{1}{\bar{x}} \]
Artinya, estimasi parameter \( \) pada distribusi Eksponensial dengan MLE adalah kebalikan dari rata-rata sampel.
MLE untuk distribusi Eksponensial sangat efisien dan mudah dihitung, sehingga banyak digunakan untuk menganalisis data waktu kegagalan, lifetime produk, atau waktu antar-kejadian lainnya.
mle_normal <- function(x, na.rm = TRUE) {
# Validasi input
if (!is.numeric(x)) {
stop("Input 'x' harus berupa vektor numerik.")
}
# Menghilangkan nilai NA jika diminta
if (na.rm) {
x <- x[!is.na(x)]
}
# Cek jika data kosong setelah menghilangkan NA
if (length(x) == 0) {
stop("Tidak ada data valid yang tersedia untuk dihitung.")
}
n <- length(x)
# MLE untuk rata-rata adalah rata-rata sampel
mu_hat <- mean(x)
# MLE untuk varians
sigma2_hat <- sum((x - mu_hat)^2) / n
# Mengembalikan hasil dalam bentuk vektor dengan nama
return(c(mu_hat = mu_hat, sigma2_hat = sigma2_hat))
}
mle_exp <- function(x, na.rm = TRUE) {
# Validasi input
if (!is.numeric(x)) {
stop("Input 'x' harus berupa vektor numerik.")
}
# Menghilangkan nilai NA jika diminta
if (na.rm) {
x <- x[!is.na(x)]
}
# Cek nilai non-negatif
if (any(x < 0)) {
stop("Semua nilai dalam 'x' harus non-negatif untuk distribusi Eksponensial.")
}
# Cek jika data kosong setelah menghilangkan NA
if (length(x) == 0) {
stop("Tidak ada data valid yang tersedia untuk dihitung.")
}
# MLE untuk lambda adalah kebalikan dari rata-rata sampel
sample_mean <- mean(x)
# Hindari pembagian dengan nol jika semua observasi adalah 0
if (sample_mean == 0) {
stop("Tidak dapat menghitung lambda: rata-rata sampel adalah nol.")
}
lambda_hat <- 1 / sample_mean
# Mengembalikan hasil dalam bentuk vektor dengan nama
return(c(lambda_hat = lambda_hat))
}
analisis_distribusi <- function(x, na.rm = TRUE) {
# === Validasi Input ===
if (!is.numeric(x)) stop("Input 'x' harus berupa vektor numerik.")
if (na.rm) x <- x[!is.na(x)]
if (length(x) == 0) stop("Tidak ada data valid yang tersedia.")
# === Analisis Distribusi Normal ===
params_norm <- mle_normal(x)
mu_hat <- params_norm["mu_hat"]
sigma_hat <- sqrt(params_norm["sigma2_hat"])
loglik_norm <- sum(dnorm(x, mean = mu_hat, sd = sigma_hat, log = TRUE))
k_norm <- 2 # Jumlah parameter (mu dan sigma^2)
aic_norm <- 2 * k_norm - 2 * loglik_norm
hasil_normal <- list(estimators = params_norm, log_likelihood = loglik_norm, AIC = aic_norm)
# === Analisis Distribusi Eksponensial ===
# Hanya dijalankan jika semua data non-negatif
if (all(x >= 0)) {
params_exp <- mle_exp(x)
lambda_hat <- params_exp["lambda_hat"]
loglik_exp <- sum(dexp(x, rate = lambda_hat, log = TRUE))
k_exp <- 1 # Jumlah parameter (lambda)
aic_exp <- 2 * k_exp - 2 * loglik_exp
hasil_eksponensial <- list(estimators = params_exp, log_likelihood = loglik_exp, AIC = aic_exp)
} else {
# Jika ada data negatif, analisis eksponensial tidak valid
hasil_eksponensial <- list(estimators = NA, log_likelihood = NA, AIC = NA)
aic_exp <- Inf # Set AIC ke tak hingga agar Normal selalu terpilih
}
# === Penentuan Model Terbaik ===
if (aic_norm < aic_exp) {
rekomendasi <- "Normal"
} else if (aic_exp < aic_norm) {
rekomendasi <- "Eksponensial"
} else {
rekomendasi <- "Keduanya memiliki AIC yang sama"
}
# === Membuat Plot ===
hist(x, freq = FALSE, breaks = "Sturges",
main = paste("Rekomendasi Model:", rekomendasi),
xlab = "Nilai Data", ylab = "Densitas",
col = "lightgray", border = "white")
# Kurva Normal
curve(dnorm(x, mean = mu_hat, sd = sigma_hat), col = "blue", lwd = 2, add = TRUE)
# Kurva Eksponensial (jika valid)
if (all(x >= 0)) {
curve(dexp(x, rate = lambda_hat), col = "red", lwd = 2, add = TRUE)
legend_labels <- c("Normal", "Eksponensial")
legend_colors <- c("blue", "red")
} else {
legend_labels <- "Normal"
legend_colors <- "blue"
}
legend("topright", legend = legend_labels, col = legend_colors, lwd = 2, bty = "n")
# === Struktur Output ===
output <- list(
hasil_normal = hasil_normal,
hasil_eksponensial = hasil_eksponensial,
rekomendasi_model = rekomendasi
)
return(invisible(output)) # Mengembalikan output tanpa mencetaknya otomatis
}
Sebuah universitas sedang meneliti ukuran pakaian wisuda berdasarkan tinggi badan mahasiswa. Peneliti menduga bahwa tinggi badan mahasiswa mengikuti distribusi normal. Untuk mendapatkan estimasi parameter distribusi tersebut, mereka menggunakan Maximum Likelihood Estimation (MLE).
Data Tinggi Badan Mahasiswa
tinggi_mahasiswa <- c(165, 170, 168, 172, 169, NA, 167, 171, 166, 173, 168, 170, 169, 172, 167, 170, 174, 159, 161, 169, 173, 163, 154, 179, 176, 159, 164, 151, 170, 178, 152, 159, 160, 162, 184, 185, 164, 157, 149, 169, 156, 183, 158, 166, 195, 156, 167, 156, 168, 158, 166)
Estimasi Parameter Normal
library(mle)
##
## Attaching package: 'mle'
## The following objects are masked _by_ '.GlobalEnv':
##
## analisis_distribusi, mle_exp, mle_normal
Mengecek Distribusi Tinggi Badan Mahasiswa
analisis_distribusi(tinggi_mahasiswa)
Perhitungan MLE
mle_normal(tinggi_mahasiswa, na.rm = TRUE)
## mu_hat sigma2_hat
## 166.7400 83.5924
Sebuah rumah sakit ingin mengetahui rata-rata waktu tunggu pasien di ruang pendaftaran untuk meningkatkan efisiensi pelayanan. Berdasarkan literatur dan data historis, waktu tunggu pasien diduga mengikuti distribusi eksponensial, karena peristiwa kedatangan pasien bersifat acak dan saling bebas.
Data Waktu Tunggu Pasien
waktu_tunggu <- c(5, 3, 4, 2, 6, 7, NA, 6, 1, 16, 4, 5, 1, 12, 2, 3, 0, 10, 4, 4, 2, 2, 19, 1, 6, 9, 6, 1, 2, 19, 2, 2)
Estimasi Parameter Eksponensial
library(mle)
Mengecek Distribusi Waktu Tunggu Pasien
analisis_distribusi(waktu_tunggu)
Perhitungan MLE
mle_exp(waktu_tunggu, na.rm = TRUE)
## lambda_hat
## 0.186747
Untuk memudahkan pengguna dalam melakukan estimasi parameter distribusi Normal dan Eksponensial, dibuatlah aplikasi interaktif berbasis RShiny. Aplikasi ini memungkinkan pengguna untuk memasukkan data mereka sendiri, melakukan estimasi parameter menggunakan MLE, dan melihat hasilnya secara visual.
Aplikasi ini merupakan sebuah program interaktif yang dibuat untuk analisis data statistik. Fungsi utamanya adalah untuk membandingkan sebuah set data numerik dengan dua jenis model distribusi statistik, yaitu Distribusi Normal dan Distribusi Eksponensial. Aplikasi akan menentukan model mana yang paling cocok untuk menggambarkan data tersebut berdasarkan metode Akaike’s Information Criterion (AIC), di mana model dengan nilai AIC yang lebih rendah dianggap lebih baik.
Tujuan dari aplikasi ini adalah untuk menyediakan alat yang mudah digunakan dalam menganalisis data, memberikan rekomendasi model statistik yang paling sesuai, dan menyajikan hasil analisis dalam bentuk grafik agar mudah dipahami.
Cara kerja aplikasi dimulai dari proses masukan data (input) oleh pengguna. Pengguna dapat memasukkan data melalui tiga cara berbeda: pertama dengan mengunggah file berformat CSV, kedua dengan mengetikkan data angka secara langsung, dan ketiga dengan memanfaatkan fitur untuk membuat data contoh secara otomatis.
Setelah data berhasil dimasukkan, aplikasi akan menampilkan keluaran (output) hasil analisisnya. Keluaran utama yang ditampilkan adalah rekomendasi model terbaik (Normal atau Eksponensial), beserta rincian nilai parameter yang telah dihitung untuk setiap model. Selain itu, aplikasi juga menyajikan sebuah histogram dari data pengguna yang dilengkapi dengan dua garis kurva yang mewakili masing-masing model untuk perbandingan visual. Seluruh hasil numerik juga dirangkum dalam sebuah tabel untuk analisis yang lebih mendalam.
Aplikasi dapat diakses melalui tautan berikut: Aplikasi RShiny MLE.
Dokumen ini disusun menggunakan R Markdown, sebuah format penulisan dinamis yang memungkinkan integrasi antara teks naratif, kode R, dan output analisis dalam satu file. Dengan pendekatan ini, proses dokumentasi dan pelaporan hasil analisis metode numerik, seperti metode biseksi, menjadi lebih terstruktur dan reproducible. Penjelasan praktis mengenai R Markdown dapat ditemukan dalam buku R for Data Science di https://r4ds.had.co.nz/r-markdown.html.