로지스틱 회귀 분석은 이항 분포를 어떻게 사용합니까?


19

로지스틱 회귀가 이항 분포를 사용하는 방법을 이해하려고합니다.

새의 둥지 성공을 연구하고 있다고 가정 해 봅시다. 둥지가 성공할 확률은 0.6입니다. 이항 분포를 사용하여 n 번의 시도 (연구 된 둥지의 수)가 주어지면 r 성공 확률을 계산할 수 있습니다.

그러나 이항 분포는 모델링 컨텍스트에서 어떻게 사용됩니까? 일일 평균 기온이 둥지 성공에 어떤 영향을 미치는지 알고 싶습니다. 그리고 로지스틱 회귀 분석을 사용하여이 질문을 탐색합니다.

내가 설명한 맥락에서 로지스틱 회귀는 이항 분포를 어떻게 사용합니까?

나는 직관적 인 답변을 찾고 있으므로 방정식이없는 답변을 찾고 있습니다! 나는 이해가 직관적 인 수준에서 달성 된 후에 만 ​​방정식이 유용하다고 생각합니다.



2
@ user777을 참조하기에 좋은 스레드이지만 OP가 특별히 방정식 없이 설명 요청하면 복제본으로 작동하지 않을 수 있다고 생각합니다 . 그러나 좋은 질문은 이항 분포의 역할을 방정식없이 잘 설명 할 수 있는지 여부입니다. 확실히 LR은 직관적 인 설명을 할 수 있지만, 이항 w / i LR의 역할은 본질적으로 다소 수학적입니다.
gung-복원 Monica Monica

@gung 사과에 luciano. "이항 분포"를 보면 가능한 대답을 고려할 때 "방정식 없음"을 덮어 썼습니다. 분명히 그것은 OP의 요청과 일치하지 않았습니다.
Sycorax는 Reinstate Monica

나는 회귀에 로그 확률 스케일을 사용하고 로짓 스케일에서 0-1 스케일로 변환하는 아이디어를 파악했다고 생각합니다. 그러나 나는 '오류는 이항 적으로 분포된다'는 내용을 계속 읽습니다. 이항 적으로 어떻게 오류를 분배 할 수 있습니까?
luciano

5
읽은 책이 무엇이든 버립니다.
Scortchi-Monica Monica 복원

답변:


7

다른 평균 일일 온도 에서 여러 개의 둥지를 관찰한다고 가정합니다 . 둥지 성공 확률 는 온도 어떻게 의존 합니까? (네스트가 독립적 인 경우 온도 에서 성공한 네스트 수는 관찰 된 네스트 수 및 성공 확률 와 동일한 이항 분포됩니다 .)π ( t ) t t n 개의 π ( t )tπ(t)ttnπ(t)

로지스틱 회귀는 로지스틱 곡선을 스트레칭 및 시프 팅하여 데이터의 추정에 필요한 스트레칭 및 시프 팅 양을 사용하여 성공 확률을 온도의 함수로 지정하는 한 가지 방법 (로지스틱 함수 사용)입니다.


15

방정식이 없습니까? Yikes. 보자 :

로지스틱 회귀 모형은 말 그대로 이항 분포 의 모수에 대한 모형입니다 . 연속 예측 변수를 사용하면 각 점에 고유 분포가있을 수 있습니다. (관측치가 0-1 인 경우 Bernoulli 특수 사례를 처리합니다. 이는 일반적인 상황입니다.)p

모델이 아닌 주어집니다. 따라서 결과는 와 알려진 와 관련된 모델을 사용하여 대한 모델을 통해 평균 (및 분산)을 설명하는 예측 변수로 이항 데이터를 모델링 할 수 있습니다 . 모형은 최대 우도 추정을 통해 적합 할 수 있지만 특수 형태 (지수 계열)로 인해 ML은 상대적으로 "좋습니다".npinip

이항 군에 대한 로지스틱 링크는 정식이기 때문에 충분한 통계가 매우 간단한 형태이기 때문에 훨씬 좋습니다. 이는 큰 샘플을 다루거나 '온라인'알고리즘을 개발하는 데 편리합니다.

당연히 는 확률로 0과 1 사이에 있습니다. 이것은 당연히 다른 변수와 관련하여 모델을 작성할 때 해당 변수가 독립된 변수를 얻을 수 있도록 해당 한계를 뛰어 넘지 않아야 함을 의미합니다. 충분히 크거나 작 으면 관계가 경계 내에서 유지되도록 구부러져 야합니다.p

로지스틱 회귀 분석에서 해당 곡선 (링크 함수)은 로지스틱 함수입니다. 다른 기능도 가능하며 많은 패키지가 여러 가지를 구현합니다 (R은 glm올바르게 기억하면 기능에 3 개의 적절한 기능이 내장되어 있음).


이 게시물을 만들 때 평등 기호가 손상되지 않았습니다.


2

당신의 모델은 둥지의 성공을 도박으로 볼 수 있다고 가정합니다 : 신은 "성공"과 "실패"라고 적힌면으로 동전을 뒤집습니다. 한 둥지에 대한 뒤집기의 결과는 다른 둥지에 대한 뒤집기의 결과와 무관합니다.

새들은 그들을 위해 무언가를 가지고 있습니다 : 동전은 다른 온도에 비해 어떤 온도에서 성공을 선호합니다. 따라서 주어진 온도에서 둥지를 관찰 할 수있는 경우 성공 횟수 는 동일한 동전 의 성공적인 뒤집기 횟수와 해당 온도의 성공 횟수와 같습니다 . 해당 이항 분포는 성공 확률을 나타냅니다. 즉, 중첩 수를 통해 성공 확률 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 개의 패널)을 평가합니다. )를 선택하고 해당 기회를 가장 잘 조합 한 줄을 선택합니다.

"최고"는 무엇입니까? 모든 데이터의 결합 확률이 가능한 한 크다는 것입니다. 이러한 방식으로 단일 확률 (빨간색 세그먼트)이 실제로 작을 수는 없지만 일반적으로 대부분의 확률은 포화 모형 에서처럼 높지 않습니다.

다음은 선이 아래쪽으로 회전 된 로지스틱 회귀 검색의 반복입니다.

그림 2

먼저, 무엇이 동일하게 유지되었는지 확인 하십시오. "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)

r 코드가 공개됩니까? 많은 감사합니다.
Maximilian

1
@Maximilian 나는 코드를 추가했다.
whuber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.