Su modelo asume que el éxito de un nido puede verse como una apuesta: Dios lanza una moneda cargada con lados etiquetados como "éxito" y "fracaso". El resultado del lanzamiento de un nido es independiente del resultado del lanzamiento de cualquier otro nido.
Sin embargo, las aves sí tienen algo que hacer: la moneda podría favorecer en gran medida el éxito a algunas temperaturas en comparación con otras. Por lo tanto, cuando tiene la oportunidad de observar nidos a una temperatura dada, el número de éxitos es igual al número de lanzamientos exitosos de la misma moneda, el de esa temperatura. La distribución binomial correspondiente describe las posibilidades de éxito. Es decir, establece la probabilidad de cero éxitos, de uno, de dos, ... y así sucesivamente a través del número de nidos.
Una estimación razonable de la relación entre la temperatura y cómo Dios carga las monedas está dada por la proporción de éxitos observados a esa temperatura. Esta es la estimación de máxima verosimilitud (MLE).
71033/7.3/73
5,10,15,200,3,2,32,7,5,3
La fila superior de la figura muestra los MLE en cada una de las cuatro temperaturas observadas. La curva roja en el panel "Ajustar" traza cómo se carga la moneda, dependiendo de la temperatura. Por construcción, esta traza pasa a través de cada uno de los puntos de datos. (Se desconoce qué hace a temperaturas intermedias; he conectado crudamente los valores para enfatizar este punto).
Este modelo "saturado" no es muy útil, precisamente porque no nos da una base para estimar cómo Dios cargará las monedas a temperaturas intermedias. Para hacer eso, debemos suponer que hay algún tipo de curva de "tendencia" que relaciona las cargas de monedas con la temperatura.
La fila inferior de la figura se ajusta a esa tendencia. La tendencia es limitada en lo que puede hacer: cuando se traza en coordenadas apropiadas ("probabilidades de registro"), como se muestra en los paneles de "Respuesta de Logit" a la izquierda, solo puede seguir una línea recta. Cualquiera de estas líneas rectas determina la carga de la moneda a todas las temperaturas, como se muestra en la línea curva correspondiente en los paneles "Ajustar". Esa carga, a su vez, determina las distribuciones binomiales a todas las temperaturas. La fila inferior traza esas distribuciones para las temperaturas donde se observaron los nidos. (Las líneas negras discontinuas marcan los valores esperados de las distribuciones, lo que ayuda a identificarlas con bastante precisión. No ve esas líneas en la fila superior de la figura porque coinciden con los segmentos rojos).
Ahora se debe hacer una compensación: la línea puede pasar de cerca a algunos de los puntos de datos, solo para alejarse de otros. Esto hace que la distribución binomial correspondiente asigne probabilidades más bajas a la mayoría de los valores observados que antes. Puede ver esto claramente a 10 grados y 15 grados: la probabilidad de los valores observados no es la probabilidad más alta posible, ni está cerca de los valores asignados en la fila superior.
La regresión logística desliza y mueve las posibles líneas (en el sistema de coordenadas utilizado por los paneles "Logit Response"), convierte sus alturas en probabilidades binomiales (los paneles "Fit"), evalúa las posibilidades asignadas a las observaciones (los cuatro paneles de la derecha) ), y elige la línea que ofrece la mejor combinación de esas posibilidades.
¿Qué es "mejor"? Simplemente que la probabilidad combinada de todos los datos es lo más grande posible. De esta manera, no se permite que ninguna probabilidad única (los segmentos rojos) sea realmente pequeña, pero generalmente la mayoría de las probabilidades no serán tan altas como en el modelo saturado.
Aquí hay una iteración de la búsqueda de regresión logística donde la línea se rotó hacia abajo:
1015grados pero un trabajo terrible de ajustar los otros datos. (A 5 y 20 grados, las probabilidades binomiales asignadas a los datos son tan pequeñas que ni siquiera puede ver los segmentos rojos). En general, este ajuste es mucho peor que los que se muestran en la primera figura.
Espero que esta discusión le haya ayudado a desarrollar una imagen mental de las probabilidades binomiales que cambian a medida que la línea varía, todo mientras mantiene los datos iguales. El ajuste de línea por regresión logística intenta hacer que esas barras rojas en general sean lo más altas posible. Por lo tanto, la relación entre la regresión logística y la familia de distribuciones binomiales es profunda e íntima.
Apéndice: R
código para producir las figuras
#
# 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)