당신의 모델은 둥지의 성공을 도박으로 볼 수 있다고 가정합니다 : 신은 "성공"과 "실패"라고 적힌면으로 동전을 뒤집습니다. 한 둥지에 대한 뒤집기의 결과는 다른 둥지에 대한 뒤집기의 결과와 무관합니다.
새들은 그들을 위해 무언가를 가지고 있습니다 : 동전은 다른 온도에 비해 어떤 온도에서 성공을 선호합니다. 따라서 주어진 온도에서 둥지를 관찰 할 수있는 경우 성공 횟수 는 동일한 동전 의 성공적인 뒤집기 횟수와 해당 온도의 성공 횟수와 같습니다 . 해당 이항 분포는 성공 확률을 나타냅니다. 즉, 중첩 수를 통해 성공 확률 1, 1, 2 등을 설정합니다.
온도와 하나님이 동전을 적재하는 방법 사이의 관계에 대한 합리적인 추정치는 그 온도에서 관찰 된 성공 비율에 의해 제공됩니다. 이것이 최대 가능성 추정치 (MLE)입니다.
예를 들어, 온도가 도인 곳 에서 둥지가 있고 그 둥지 중 개가 성공적 이라고 가정합니다 . MLE는 즉, 우리는 하느님의 동전이 성공할 확률이 것으로 추정합니다 . 해당 이항 분포는 그림의 첫 번째 행 (아래 참조)에 "10도"제목으로 표시됩니다. 세로 선분의 높이에 따른 기회를 나타냅니다. 빨간색 세그먼트는 성공한 성공 값에 해당합니다 .71033/7.3/73
데이터의 온도는 다양해야합니다. 실행중인 예로서, 온도에서 둥지 중 성공 을 관찰 가정 해 봅시다 . 이 데이터 세트는 그림의 "맞춤"패널에 회색 원으로 표시됩니다. 원의 높이는 성공률을 나타냅니다. 원 영역은 네스트 수에 비례하므로 더 많은 네스트가있는 데이터를 강조합니다.5,10,15,200,3,2,32,7,5,3
그림의 맨 윗줄은 관찰 된 4 가지 온도 각각의 MLE를 보여줍니다. "맞춤"패널의 빨간색 곡선은 온도에 따라 동전이 어떻게 적재되는지 추적합니다. 구성에 의해이 추적은 각 데이터 포인트를 통과합니다. (중간 온도에서 무엇을하는지는 알려지지 않았으며,이 점을 강조하기 위해 값을 대략적으로 연결했습니다.)
이 "포화"모델은 그다지 유용하지 않습니다. 정확하게 말해서 하나님이 중간 온도에서 동전을 어떻게 넣을지 추정 할 근거가 없기 때문입니다. 그러기 위해서는 동전 로딩과 온도를 연결하는 일종의 "추세"곡선이 있다고 가정해야합니다.
그림의 맨 아래 줄은 이러한 추세에 맞습니다. 왼쪽의 "Logit Response"패널에 표시된 것처럼 적절한 ( "log odds") 좌표로 플롯 할 경우 추세는 직선을 따를 수 있습니다. 이러한 직선은 "맞춤"패널에서 해당 곡선으로 표시된 것처럼 모든 온도에서 동전의 하중을 결정합니다. 그 하중은 모든 온도에서 이항 분포를 결정합니다. 맨 아래 줄은 둥지가 관찰 된 온도에 대한 분포를 나타냅니다. (검은 파선은 분포의 예상 값을 표시하여 분포를 상당히 정확하게 식별하는 데 도움이됩니다. 그림의 맨 윗줄에는 해당 선이 빨간색 세그먼트와 일치하므로 표시되지 않습니다.)
이제 트레이드 오프가 이루어져야합니다. 라인은 일부 데이터 포인트에 밀접하게 전달 될 수 있으며 다른 포인트와는 거리가 멀어 질 수 있습니다. 이로 인해 해당 이항 분포가 이전보다 대부분의 관측 값에 낮은 확률을 할당합니다. 이를 10도 및 15도에서 명확하게 볼 수 있습니다. 관측 된 값의 확률은 가능한 최대 확률이 아니며 위의 행에 지정된 값과 비슷하지도 않습니다.
로지스틱 회귀 분석 은 "Logit Response"패널에서 사용하는 좌표계에서 가능한 선을 슬라이드 및 흔들고 높이를 이항 확률 ( "Fit"패널)로 변환하고 관측치에 지정된 확률 (오른쪽 4 개의 패널)을 평가합니다. )를 선택하고 해당 기회를 가장 잘 조합 한 줄을 선택합니다.
"최고"는 무엇입니까? 모든 데이터의 결합 확률이 가능한 한 크다는 것입니다. 이러한 방식으로 단일 확률 (빨간색 세그먼트)이 실제로 작을 수는 없지만 일반적으로 대부분의 확률은 포화 모형 에서처럼 높지 않습니다.
다음은 선이 아래쪽으로 회전 된 로지스틱 회귀 검색의 반복입니다.
먼저, 무엇이 동일하게 유지되었는지 확인 하십시오. "Fit"산점도의 회색 점은 데이터를 나타내므로 고정되어 있습니다. 마찬가지로, 4 개의 이항 그림에서 빨간색 세그먼트 의 값 범위 와 가로 위치 도 데이터를 나타 내기 때문에 고정됩니다. 그러나이 새로운 라인은 완전히 다른 방식으로 동전을로드합니다. 그렇게함으로써 4 개의 이항 분포 (회색 세그먼트)가 변경됩니다. 예를 들어, 4도에서 6 도의 확률로 확률이 가장 높은 분포에 해당 하는 온도 도 에서 약 70 %의 성공률을 나타 냅니다. 이 라인은 실제로 의 데이터를 맞추는 데 큰 도움이됩니다.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)