Model Anda menganggap keberhasilan sebuah sarang dapat dilihat sebagai pertaruhan: Tuhan membalikkan koin yang dimuat dengan sisi berlabel "sukses" dan "gagal." Hasil flip untuk satu sarang tidak tergantung pada hasil flip untuk sarang lainnya.
Burung-burung memang memiliki sesuatu untuk mereka, meskipun: koin mungkin sangat mendukung kesuksesan pada beberapa suhu dibandingkan dengan yang lain. Jadi, ketika Anda memiliki kesempatan untuk mengamati sarang pada suhu tertentu, jumlah keberhasilan sama dengan jumlah keberhasilan membalik dari koin yang sama - satu untuk suhu itu. Distribusi Binomial yang sesuai menggambarkan peluang keberhasilan. Artinya, ia menetapkan probabilitas nol keberhasilan, satu, dua, ... dan seterusnya melalui jumlah sarang.
Satu perkiraan yang masuk akal dari hubungan antara suhu dan bagaimana Tuhan memuat koin diberikan oleh proporsi keberhasilan yang diamati pada suhu itu. Ini adalah taksiran Maximum Likelihood (MLE).
71033/7.3/73
5,10,15,200,3,2,32,7,5,3
Baris atas gambar menunjukkan MLE pada masing-masing dari empat suhu yang diamati. Kurva merah di panel "Fit" melacak bagaimana koin dimuat, tergantung pada suhu. Dengan konstruksi, jejak ini melewati masing-masing titik data. (Apa yang dilakukannya pada suhu menengah tidak diketahui; Saya telah dengan kasar menghubungkan nilai-nilai untuk menekankan titik ini.)
Model "jenuh" ini tidak terlalu berguna, justru karena itu tidak memberi kita dasar untuk memperkirakan bagaimana Allah akan memuat koin pada suhu menengah. Untuk melakukan itu, kita perlu mengira ada semacam kurva "tren" yang menghubungkan muatan koin dengan suhu.
Baris bawah gambar ini cocok dengan tren seperti itu. Tren terbatas pada apa yang dapat dilakukannya: ketika diplot dalam koordinat yang sesuai ("peluang log"), seperti yang ditunjukkan pada panel "Logit Response" di sebelah kiri, tren ini hanya dapat mengikuti garis lurus. Setiap garis lurus seperti itu menentukan pemuatan koin di semua suhu, seperti yang ditunjukkan oleh garis lengkung yang sesuai di panel "Fit". Pemuatan itu, pada gilirannya, menentukan distribusi Binomial di semua suhu. Baris bawah memplot distribusi tersebut untuk suhu di mana sarang diamati. (Garis hitam putus-putus menandai nilai yang diharapkan dari distribusi, membantu mengidentifikasinya dengan tepat. Anda tidak melihat garis-garis di baris atas gambar karena bertepatan dengan segmen merah.)
Sekarang tradeoff harus dibuat: garis mungkin melewati dekat ke beberapa titik data, hanya untuk membelok jauh dari yang lain. Ini menyebabkan distribusi Binomial yang sesuai untuk menetapkan probabilitas yang lebih rendah untuk sebagian besar nilai yang diamati daripada sebelumnya. Anda dapat melihat ini dengan jelas pada 10 derajat dan 15 derajat: probabilitas nilai yang diamati bukan probabilitas tertinggi yang mungkin, juga tidak mendekati nilai yang ditetapkan di baris atas.
Regresi logistik menggeser dan menggoyangkan garis yang mungkin di sekitar (dalam sistem koordinat yang digunakan oleh panel "Logit Response"), mengubah ketinggiannya menjadi probabilitas Binomial (panel "Fit"), menilai peluang yang ditetapkan untuk pengamatan (empat panel kanan) ), dan memilih garis yang memberikan kombinasi terbaik dari peluang tersebut.
Apa yang "terbaik"? Sederhananya, probabilitas gabungan dari semua data adalah sebesar mungkin. Dengan cara ini, tidak ada probabilitas tunggal (segmen merah) yang dibiarkan benar-benar kecil, tetapi biasanya sebagian besar probabilitas tidak akan setinggi mereka dalam model jenuh.
Berikut adalah satu iterasi dari pencarian regresi logistik di mana garis diputar ke bawah:
Pertama, perhatikan apa yang tetap sama: titik abu-abu di sebar "Fit" diperbaiki karena mereka mewakili data. Demikian juga, rentang nilai dan posisi horizontal dari segmen merah di empat plot Binomial juga tetap, karena mereka juga mewakili data. Namun, baris baru ini memuat koin dengan cara yang sangat berbeda. Dengan begitu,1015derajat tetapi pekerjaan yang mengerikan pas data lainnya. (Pada 5 dan 20 derajat probabilitas Binomial yang ditugaskan untuk data sangat kecil sehingga Anda bahkan tidak dapat melihat segmen merah.) Secara keseluruhan, ini jauh lebih buruk daripada yang ditunjukkan pada gambar pertama.
Saya harap diskusi ini telah membantu Anda mengembangkan citra mental probabilitas Binomial yang berubah karena garis bervariasi, sambil menjaga data tetap sama. Garis yang sesuai dengan upaya regresi logistik mencoba membuat garis merah itu secara keseluruhan setinggi mungkin. Dengan demikian, hubungan antara regresi logistik dan keluarga distribusi Binomial sangat dalam dan intim.
Lampiran: R
kode untuk menghasilkan angka
#
# Create example data.
#
X <- data.frame(temperature=c(5,10,15,20),
nests=c(2,7,5,3),
successes=c(0,3,2,3))
#
# A function to plot a Binomial(n,p) distribution and highlight the value `k0`.
#
plot.binom <- function(n, p, k0, highlight="#f02020", ...) {
plot(0:n, dbinom(0:n, n, p), type="h", yaxt="n",
xlab="Trials", ylab="Probability", ...)
abline(v = p*n, lty=3, lwd=2)
if(!missing(k0)) lines(rep(k0,2), c(0, dbinom(k0,n,p)), lwd=2, col=highlight)
}
#
# A function to convert from probability to log odds.
#
logit <- function(p) log(p) - log(1-p)
#
# Fit a saturated model, then the intended model.
#
# Ordinarily the formula for the saturated model would be in the form
# `... ~ factor(temperature)`, but the following method makes it possible to
# plot the predicted values in a visually effective way.
#
fit.0 <- glm(cbind(successes, nests-successes) ~ factor(round(temperature/5)),
data=X, family=binomial)
summary(fit.0)
fit <- glm(cbind(successes, nests-successes) ~ temperature,
data=X, family=binomial)
summary(fit)
#
# Plot both fits, one per row.
#
lfits <- list(fit.0, fit)
par.old <- par(mfrow=c(length(lfits), nrow(X)+2))
for (fit in lfits) {
#
# Construct arrays of plotting points.
#
X$p.hat <- predict(fit, type="response")
Y <- data.frame(temperature = seq(min(X$temperature), max(X$temperature),
length.out=101))
Y$p.hat <- predict(fit, type="response", newdata=Y) # Probability
Y$lambda.hat <- predict(fit, type="link", newdata=Y) # Log odds
#
# Plot the fit in terms of log odds.
#
with(Y, plot(temperature, lambda.hat, type="n",
yaxt="n", bty="n", main="Logit Response",
ylab=expression(hat(lambda))))
if (isTRUE(diff(range(Y$lambda.hat)) < 6)) {
# Draw gridlines and y-axis labels
p <- c( .10, .25, .5, .75, .9)
q <- logit(p)
suppressWarnings(rug(q, side=2))
abline(h=q, col="#d0d0d0")
mtext(signif(p, 2), at=q, side=2, cex=0.6)
}
with(Y, lines(temperature, lambda.hat, lwd=2, col="#f02020"))
#
# Plot the data and the fit in terms of probability.
#
with(X, plot(temperature, successes/nests, ylim=0:1,
cex=sqrt(nests), pch=21, bg="Gray",
main="Fit"))
with(Y, lines(temperature, p.hat, col="#f02020", lwd=2))
#
# Plot the Binomial distributions associated with each row of the data.
#
apply(X, 1, function(x) plot.binom(x[2], x[4], x[3], bty="n", lwd=2, col="Gray",
main=paste(x[1], "Degrees")))
}
par(mfrow=par.old)