Votre modèle suppose que le succès d'un nid peut être considéré comme un pari: Dieu lance une pièce chargée avec des côtés étiquetés «succès» et «échec». Le résultat du retournement pour un nid est indépendant du résultat du retournement pour tout autre nid.
Les oiseaux ont quelque chose pour eux: la pièce pourrait largement favoriser le succès à certaines températures par rapport à d'autres. Ainsi, lorsque vous avez la possibilité d'observer des nids à une température donnée, le nombre de succès est égal au nombre de tours réussis d'une même pièce - celui pour cette température. La distribution binomiale correspondante décrit les chances de succès. C'est-à-dire qu'il établit la probabilité de succès nuls, d'un, de deux, ... et ainsi de suite à travers le nombre de nids.
Une estimation raisonnable de la relation entre la température et la façon dont Dieu charge les pièces est donnée par la proportion de succès observés à cette température. Il s'agit de l'estimation du maximum de vraisemblance (MLE).
septdix3Trois / 7.3 / 73
5 , 10 , 15 , 200 , 3 , 2 , 32 , 7 , 5 , 3
La ligne supérieure de la figure montre les MLE à chacune des quatre températures observées. La courbe rouge dans le panneau "Fit" indique comment la pièce est chargée, en fonction de la température. Par construction, cette trace passe par chacun des points de données. (Ce qu'il fait à des températures intermédiaires est inconnu; j'ai grossièrement connecté les valeurs pour souligner ce point.)
Ce modèle "saturé" n'est pas très utile, précisément parce qu'il ne nous donne aucune base pour estimer comment Dieu chargera les pièces à des températures intermédiaires. Pour ce faire, nous devons supposer qu'il existe une sorte de courbe de "tendance" qui relie les charges de pièces à la température.
La ligne du bas de la figure correspond à une telle tendance. La tendance est limitée dans ce qu'elle peut faire: lorsqu'elle est tracée dans les coordonnées appropriées ("log odds"), comme indiqué dans les panneaux "Logit Response" à gauche, elle ne peut que suivre une ligne droite. Une telle ligne droite détermine le chargement de la pièce à toutes les températures, comme indiqué par la ligne courbe correspondante dans les panneaux "Fit". Ce chargement, à son tour, détermine les distributions binomiales à toutes les températures. La rangée du bas représente ces distributions pour les températures où les nids ont été observés. (Les lignes noires en pointillés marquent les valeurs attendues des distributions, ce qui permet de les identifier assez précisément. Vous ne voyez pas ces lignes dans la ligne supérieure de la figure car elles coïncident avec les segments rouges.)
Maintenant, un compromis doit être fait: la ligne peut passer étroitement à certains des points de données, pour s'éloigner loin des autres. Cela fait que la distribution binomiale correspondante attribue des probabilités plus faibles à la plupart des valeurs observées qu'auparavant. Vous pouvez le voir clairement à 10 degrés et 15 degrés: la probabilité des valeurs observées n'est pas la probabilité la plus élevée possible, ni proche des valeurs attribuées dans la rangée supérieure.
La régression logistique glisse et agite les lignes possibles autour (dans le système de coordonnées utilisé par les panneaux "Logit Response"), convertit leurs hauteurs en probabilités binomiales (les panneaux "Fit"), évalue les chances attribuées aux observations (les quatre panneaux de droite ) et choisit la ligne qui donne la meilleure combinaison de ces chances.
Quel est le "meilleur"? Simplement que la probabilité combinée de toutes les données est aussi grande que possible. De cette façon, aucune probabilité unique (les segments rouges) ne peut être vraiment minuscule, mais généralement la plupart des probabilités ne seront pas aussi élevées qu'elles l'étaient dans le modèle saturé.
Voici une itération de la recherche de régression logistique où la ligne a été tournée vers le bas:
1015degrés, mais un travail terrible d'adapter les autres données. (À 5 et 20 degrés, les probabilités binomiales attribuées aux données sont si minuscules que vous ne pouvez même pas voir les segments rouges.) Dans l'ensemble, c'est un ajustement bien pire que ceux montrés dans la première figure.
J'espère que cette discussion vous a aidé à développer une image mentale des probabilités binomiales changeant à mesure que la ligne varie, tout en gardant les données identiques. La ligne ajustée par régression logistique tente de rendre ces barres rouges aussi hautes que possible. Ainsi, la relation entre la régression logistique et la famille de distributions binomiales est profonde et intime.
Annexe: R
code pour produire les figures
#
# 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)