Ваша модель предполагает, что успех гнезда можно рассматривать как азартную игру: Бог подбрасывает нагруженную монету сторонами, обозначенными как «успех» и «провал». Результат броска для одного гнезда не зависит от результата броска для любого другого гнезда.
Однако у птиц есть что-то для них: монета может сильно способствовать успеху при одних температурах по сравнению с другими. Таким образом, когда у вас есть возможность наблюдать за гнездами при данной температуре, количество успехов равно количеству успешных бросков одной и той же монеты - той, что для этой температуры. Соответствующее биномиальное распределение описывает шансы на успех. То есть он устанавливает вероятность нулевого успеха, одного, двух, ... и т. Д. По количеству гнезд.
Одна разумная оценка взаимосвязи между температурой и тем, как Бог загружает монеты, определяется долей успехов, наблюдаемых при этой температуре. Это оценка максимального правдоподобия (MLE).
71033/7.3/73
5,10,15,200,3,2,32,7,5,3
В верхнем ряду рисунка показаны MLE при каждой из четырех наблюдаемых температур. Красная кривая на панели «Fit» показывает, как монета загружается, в зависимости от температуры. По построению этот след проходит через каждую точку данных. (Что он делает при промежуточных температурах, неизвестно; я грубо связал значения, чтобы подчеркнуть этот момент.)
Эта «насыщенная» модель не очень полезна именно потому, что она не дает нам оснований оценивать, как Бог будет загружать монеты при промежуточных температурах. Для этого мы должны предположить, что есть какая-то «трендовая» кривая, которая связывает нагрузки монет с температурой.
Нижний ряд рисунка соответствует такой тенденции. Тенденция ограничена в том, что она может делать: при построении в соответствующих («log odds») координатах, как показано на панелях «Logit Response» слева, она может следовать только по прямой линии. Любая такая прямая линия определяет загрузку монеты при всех температурах, как показано соответствующей изогнутой линией на панелях «Подгонка». Эта нагрузка, в свою очередь, определяет биномиальные распределения при всех температурах. В нижнем ряду приведены распределения для температур, в которых наблюдались гнезда. (Пунктирные черные линии отмечают ожидаемые значения распределений, помогая идентифицировать их довольно точно. Эти линии не отображаются в верхнем ряду рисунка, поскольку они совпадают с красными сегментами.)
Теперь необходимо найти компромисс: линия может проходить близко к некоторым точкам данных только для того, чтобы отклониться от других. Это заставляет соответствующее биномиальное распределение назначать более низкие вероятности большинству наблюдаемых значений, чем раньше. Это можно ясно увидеть при 10 и 15 градусах: вероятность наблюдаемых значений не является максимально возможной и не близка к значениям, назначенным в верхнем ряду.
Логистическая регрессия скользит и покачивает возможные линии вокруг (в системе координат, используемой панелями «Logit Response»), преобразует их высоты в биномиальные вероятности (панели «Fit»), оценивает шансы, назначенные для наблюдений (четыре правые панели ) и выбирает линию, которая дает наилучшую комбинацию этих шансов.
Что такое "лучший"? Просто, что суммарная вероятность всех данных настолько велика, насколько это возможно. Таким образом, ни одна из вероятностей (красные сегменты) не может быть действительно крошечной, но обычно большая часть вероятностей не будет такой высокой, как в насыщенной модели.
Вот одна итерация поиска логистической регрессии, где линия была повернута вниз:
1015градусов, но ужасная работа по подгонке других данных. (При 5 и 20 градусах биномиальные вероятности, назначенные данным, настолько малы, что даже красные сегменты не видны.) В целом, это намного хуже, чем те, которые показаны на первом рисунке.
Я надеюсь, что это обсуждение помогло вам сформировать мысленное представление о биномиальных вероятностях, изменяющихся при изменении линии, в то же время сохраняя данные одинаковыми. Линия, соответствующая логистической регрессии, пытается сделать эти красные столбцы как можно выше. Таким образом, связь между логистической регрессией и семейством биномиальных распределений является глубокой и тесной.
Приложение: R
код для изготовления фигур
#
# 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)