Ide dasar dari Multi-stage Maximization of Likelihood (MM) adalah Membagi proses maksimisasi menjadi 2 atau lebih proses dengan dimensi yang lebih kecil.
MM Memiliki berbagai sebutan, diantaranya:
Inference Function for Margins (IFM) (Joe, 1996)
Maximization by Parts (Song, 2005)
Two Stages ML (Shih, 1995)
Penduga bersifat aproksimasi dan konsisten
Fungsi kepadatan peluang (Probability Density Function, PDF) dari distribusi normal diberikan oleh:
\[ f(x; \mu, \sigma) = \frac{1}{\sigma \sqrt{2\pi}} \exp\left(-\frac{(x - \mu)^2}{2\sigma^2}\right), \quad x \in \mathbb{R} \]
dengan: - \(f(x; \mu, \sigma)\) adalah fungsi kepadatan peluang untuk variabel acak \(x\), - \(\mu\) adalah rata-rata (mean), - \(\sigma\) adalah simpangan baku (standard deviation)
Secara analitik, kita dapat menghitung penduga dari sebaran normal pada laman berikut: MLE sebaran normal. Selanjutnya, kita akan belajar untuk menghitung penduga sebaran normal secara simultan maupun secara multi-stage likelihood (likelihood bertahap) menggunakan profiled likelihood.
Misal dipunyai data dengan sebaran normal berukuran 200 dengan rerata (\(\mu\)) = 12 dan ragam 1 (\(\sigma^2 = 1\)).
rm(list=ls()) # Menghapus semua dataset dan variabel
graphics.off() # Menutup semua gambar
library(purrr)
# Simulasi data normal dengan mean 12 dan ragam 1
set.seed(12345)
# Generate data dari distribusi normal
data <- rnorm(n = 200, mean = 12, sd = 1)
n <- length(data)
s <- sqrt(mean((data - mean(data))^2))
x.bar <- mean(data)
hist(data, breaks = 10, probability = TRUE, col = "lightblue", border = "black",
main = "Histogram Data Sebaran Normal (simulasi)", xlab = "Nilai", ylab = "Density")
abline(v = x.bar, col = "red", lwd = 2, lty = 2)
legend("topright", legend = paste("Mean:", round(x.bar, 2)), col = "red", lwd = 2, lty = 2)
Secara analitik, penduga parameter dari \(\mu\) dan \(\sigma^2\) diperoleh dengan menggunakan \(\bar{x}\) dan \(s\)
## [1] 12.14522 1.06362
Selanjutnya, kita akan menduga paremeter secara simultan.
#Pendugaan Simultan
data <- rnorm(n = 200, mean = 12, sd = 1)
means <- seq(10,30,by=0.01)
sds <- seq(0.1, 3, by=0.01)
l.simultan <- function(){
llh_norm <- function(means, sds, y){
llh <- sum(dnorm(y, means, sds, log=TRUE))
return(llh)
}
ll <- sapply(means,function(i) sapply(sds, function(j) llh_norm(i,j,data)))
df <- data.frame(ll=ll)
row.names(df) <- sds
colnames(df) <- means
max = which(df == max(df), arr.ind=TRUE)
#rownames(df[max[1],])
df.colnames = colnames(df)
#df.colnames[max[2]]
tibble::tibble(rownames(df[max[1],]), df.colnames[max[2]])
}
l.simultan()
Visualisasi dari penduga simultan dapat menggunakan sintaks berikut.
# Visualisasi 3 Dimensi
library(plotly)
llh_norm <- function(means, sds, y) {
sum(dnorm(y, means, sds, log=TRUE))
}
ll_matrix <- outer(means, sds, Vectorize(function(m, s) llh_norm(m, s, data))) # Matriks log-likelihood
fig <- plot_ly(x = ~means, y = ~sds, z = ~ll_matrix, type = "surface") %>%
layout(
title = "Log-Likelihood 3D Surface",
scene = list(
xaxis = list(title = "mu"),
yaxis = list(title = "Standar deviasi"),
zaxis = list(title = "Log-Likelihood")
)
)
fig # Tampilkan plot 3D