# Set seed untuk reproduktibilitas
set.seed(123)
# Jumlah observasi
<- 100
n
# Prediktor (X) dari distribusi normal
<- rnorm(n, mean = 2, sd = 1)
X
# Parameter model
<- 0.5 # Intercept
beta0 <- 1.2 # Koefisien untuk X
beta1
# Mean (mu) dari model Poisson
<- exp(beta0 + beta1 * X)
mu
# Menambahkan overdispersi dengan mengalikan varians
<- 2 # Parameter dispersi (overdispersi)
phi <- rpois(n, lambda = mu * phi)
Y
# Gabungkan data ke dalam data frame
<- data.frame(Y = Y, X = X) data
Quasi-Likelihood
Kasus 1: Data Count (Perhitungan Kejadian)
Berikut adalah simulasi untuk Kasus 1: Data Count menggunakan R. Kita akan membuat data count yang menunjukkan overdispersi dan memodelkannya menggunakan quasi-Poisson. Saya akan menjelaskan langkah demi langkahnya:
Langkah 1: Membuat Data Simulasi
Langkah 2: Mengecek Overdispersi
# Hitung mean dan varians dari Y
<- mean(data$Y)
mean_Y <- var(data$Y)
var_Y
# Cek overdispersi
cat("Mean Y:", mean_Y, "\n")
Mean Y: 73.6
cat("Varians Y:", var_Y, "\n")
Varians Y: 9193.758
cat("Rasio Varians/Mean:", var_Y / mean_Y, "\n")
Rasio Varians/Mean: 124.9152
Langkah 3: Fitting Model Quasi-Poisson
Kita akan menggunakan fungsi glm
dengan keluarga quasipoisson
untuk memodelkan data.
# Fitting model quasi-Poisson
<- glm(Y ~ X, family = quasipoisson(link = "log"), data = data)
model
# Ringkasan model
summary(model)
Call:
glm(formula = Y ~ X, family = quasipoisson(link = "log"), data = data)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.19544 0.04229 28.27 <2e-16 ***
X 1.20185 0.01337 89.88 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for quasipoisson family taken to be 0.9223051)
Null deviance: 8359.074 on 99 degrees of freedom
Residual deviance: 89.771 on 98 degrees of freedom
AIC: NA
Number of Fisher Scoring iterations: 4
Output yang perlu diperhatikan \(\beta\) : koeifisien untuk intercept dan prediktor, serta \(\phi\) : Dispersion parameter
berdasarkan output diatas didpat X berpengaruh terhadap log-mean dari Y, dan Dispersipn parameter 0.922 mendekati 1, artinya tidak terjadi overdispersi atau underdispersi.
Langkah 4: Prediksi dan Visualisasi
# Prediksi mean
$predicted <- predict(model, type = "response")
data
# Plot data dan prediksi
plot(data$X, data$Y, pch = 16, col = "blue", xlab = "X", ylab = "Y", main = "Quasi-Poisson Model")
lines(data$X[order(data$X)], data$predicted[order(data$X)], col = "red", lwd = 2)
legend("topright", legend = c("Data", "Predicted"), col = c("blue", "red"), lty = c(NA, 1), pch = c(16, NA))
Langkah 5: Diagnosa Model
Periksa residu untuk memastikan kecocokan model.
# Hitung residu Pearson
<- residuals(model, type = "pearson")
residuals
# Plot residu vs prediksi
plot(data$predicted, residuals, pch = 16, col = "blue", xlab = "Predicted", ylab = "Residuals", main = "Residuals vs Predicted")
abline(h = 0, col = "red", lty = 2)
Langkah 6: Estimasi Parameter Dispersi (\(\phi\) )
Parameter dispersi \(\phi\) dapat diestimasi secara manual.
# Estimasi parameter dispersi
<- sum(residuals^2) / (n - length(coef(model)))
phi_est cat("Estimated Dispersion Parameter (phi):", phi_est, "\n")
Estimated Dispersion Parameter (phi): 0.9223051
Kasus 2: Data Proporsi
Berikut adalah simulasi untuk Kasus 2: Data Proporsi menggunakan R. Kita akan membuat data proporsi yang menunjukkan overdispersi dan memodelkannya menggunakan quasi-Binomial. Saya akan menjelaskan langkah demi langkahnya.
Langkah 1: Membuat Data Simulasi
# Set seed untuk reproduktibilitas
set.seed(123)
# Jumlah observasi
<- 100
n
# Prediktor (X) dari distribusi normal
<- rnorm(n, mean = 0, sd = 1)
X
# Parameter model
<- 0.5 # Intercept
beta0 <- 1.2 # Koefisien untuk X
beta1
# Probabilitas sukses (mu) dari model logit
<- plogis(beta0 + beta1 * X) # Fungsi logit invers
mu
# Menambahkan overdispersi dengan mengalikan varians
<- 2 # Parameter dispersi (overdispersi)
phi
# Menghasilkan data Binomial dengan overdispersi
<- 10 # Jumlah percobaan untuk setiap observasi
size <- rbinom(n, size = size, prob = mu * phi / (1 + mu * (phi - 1)))
Y
# Ubah ke proporsi
<- Y / size
Y_prop
# Gabungkan data ke dalam data frame
<- data.frame(Y = Y_prop, X = X, Size = size) data
Langkah 2: Mengecek Overdispersi/Underdispersi
# Hitung mean dan varians dari Y
<- mean(data$Y)
mean_Y <- var(data$Y)
var_Y
# Cek overdispersi
cat("Mean Y:", mean_Y, "\n")
Mean Y: 0.745
cat("Varians Y:", var_Y, "\n")
Varians Y: 0.05098485
cat("Rasio Varians/Mean:", var_Y / (mean_Y * (1 - mean_Y)), "\n")
Rasio Varians/Mean: 0.2683766
Langkah 3: Fitting Model Quasi-Binomial
Kita akan menggunakan fungsi glm
dengan keluarga quasibinomial
untuk memodelkan data proporsi. Karena respons adalah proporsi, kita perlu menyertakan weights yang sesuai (dalam hal ini, jumlah percobaan size
).
# Fitting model quasi-Binomial
<- glm(Y ~ X, family = quasibinomial(link = "logit"), data = data, weights = Size)
model
# Ringkasan model
summary(model)
Call:
glm(formula = Y ~ X, family = quasibinomial(link = "logit"),
data = data, weights = Size)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.2535 0.0910 13.78 <2e-16 ***
X 1.3443 0.1182 11.38 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for quasibinomial family taken to be 1.083231)
Null deviance: 298.27 on 99 degrees of freedom
Residual deviance: 101.65 on 98 degrees of freedom
AIC: NA
Number of Fisher Scoring iterations: 5
Langkah 4: Prediksi dan Visualisasi
# Prediksi probabilitas
$predicted <- predict(model, type = "response")
data
# Plot data dan prediksi
plot(data$X, data$Y, pch = 16, col = "blue", xlab = "X", ylab = "Y", main = "Quasi-Binomial Model for Proportion Data")
lines(data$X[order(data$X)], data$predicted[order(data$X)], col = "red", lwd = 2)
legend("topright", legend = c("Data", "Predicted"), col = c("blue", "red"), lty = c(NA, 1), pch = c(16, NA))
Langkah 5: Diagnosa Model
Periksa residu untuk memastikan kecocokan model.
# Hitung residu Pearson
<- residuals(model, type = "pearson")
residuals
# Plot residu vs prediksi
plot(data$predicted, residuals, pch = 16, col = "blue", xlab = "Predicted", ylab = "Residuals", main = "Residuals vs Predicted")
abline(h = 0, col = "red", lty = 2)
Langkah 6: Estimasi Parameter Dispersi (\(\phi\))
Parameter dispersi \(\phi\) dapat diestimasi secara manual.
# Estimasi parameter dispersi
<- sum(residuals^2) / (n - length(coef(model)))
phi_est cat("Estimated Dispersion Parameter (phi):", phi_est, "\n")
Estimated Dispersion Parameter (phi): 1.083231