로지스틱 회귀 모형 적합에서 예측 값 (Y = 1 또는 0) 얻기


50

내가 glm로지스틱 회귀 모델에 해당하는 클래스의 객체를 가지고 있고 predict.glm인수 type="response"를 사용하여 주어진 예측 확률을 또는 으로 바꾸고 싶다고 가정 해 봅시다 . R에서 가장 빠르고 가장 정식적인 방법은 무엇입니까?Y=1Y=0

다시, 나는 알고 있지만, predict.glm컷오프 값 P (Y_i = 1 | \ hat X_ {i}) 가 정확히 어디에 있는지는 알지 못합니다. P(Yi=1|X^i)그리고 이것이 이것이 나의 주요 걸림돌이라고 생각합니다.

답변:


77

예측 된 확률이 있으면 사용하려는 임계 값에 달려 있습니다. 감도, 특이성 또는 응용 프로그램의 맥락에서 가장 중요한 측정 값을 최적화하기 위해 임계 값을 선택할 수 있습니다 (일부 추가 정보는 여기에서보다 구체적인 답변에 도움이됩니다). ROC 곡선 및 최적 분류와 관련된 기타 측정 값을보고 싶을 수 있습니다.

편집 : 이 대답을 다소 명확하게하기 위해 예를 들어 보겠습니다. 실제 해답은 최적 컷오프는 응용 프로그램의 맥락에서 중요한 분류기의 속성에 달려 있다는 것입니다. 하자 Yi 관찰에 대한 진정한 가치가 될 i , 그리고 Y^i 예측 클래스합니다. 몇 가지 일반적인 성능 측정 값은

(1) 감도 : P(Y^i=1|Yi=1) - '1'의 비율로 정확하게 식별됩니다.

(2) 특이성 : P(Y^i=0|Yi=0) -올바르게 식별되는 '0'의 비율

(3) (올바른) 분류 비율 : P(Yi=Y^i) -정확한 예측 비율.

(1)은 True Positive Rate라고도하며, (2)는 True Negative Rate라고도합니다.

예를 들어 분류자가 비교적 안전한 치료법을 가진 심각한 질병에 대한 진단 테스트를 평가하려는 경우 민감도는 특이성보다 훨씬 중요합니다. 다른 경우에, 질병이 비교적 경미하고 치료가 위험하다면, 특이성이 제어에 더 중요 할 것이다. 일반적인 분류 문제의 경우 감도와 사양을 공동으로 최적화하는 것이 "좋은"것으로 간주됩니다. 예를 들어 지점에서 유클리드 거리를 최소화하는 분류기를 사용할 수 있습니다 .(1,1)

δ=[P(Yi=1|Y^i=1)1]2+[P(Yi=0|Y^i=0)1]2

δ 는 응용의 맥락 에서 으로부터의보다 합리적인 거리 측정을 반영하기 위해 다른 방법으로 가중치를 부여하거나 수정할 수 있습니다 .-(1,1)로부터의 유클리드 거리는 설명을 위해 임의로 선택되었습니다. 어쨌든 응용 프로그램에 따라이 네 가지 측정 모두가 가장 적절할 수 있습니다.(1,1)

다음은 로지스틱 회귀 모델의 예측을 사용하여 분류 한 시뮬레이션 예제입니다. 컷오프는이 세 가지 측정 값 각각에서 "최상의"분류기를 제공하는 컷오프를보기 위해 다양합니다. 이 예에서 데이터는 세 개의 예측 변수가있는 로지스틱 회귀 모델에서 나온 것입니다 (아래 그림의 R 코드 참조). 이 예에서 볼 수 있듯이 "최적"컷오프는 이러한 측정 중 어느 것이 가장 중요한지에 따라 달라집니다. 이는 전적으로 응용 프로그램에 따라 다릅니다.

편집 2 : 및 , 양의 예측 값 및 음의 예측 값 ( 이는 동일 하지 않습니다 . 감도 및 특이성)도 유용한 성능 측정 방법이 될 수 있습니다.P(Yi=1|Y^i=1)P(Yi=0|Y^i=0)

여기에 이미지 설명을 입력하십시오

# data y simulated from a logistic regression model 
# with with three predictors, n=10000
x = matrix(rnorm(30000),10000,3)
lp = 0 + x[,1] - 1.42*x[2] + .67*x[,3] + 1.1*x[,1]*x[,2] - 1.5*x[,1]*x[,3] +2.2*x[,2]*x[,3] + x[,1]*x[,2]*x[,3]
p = 1/(1+exp(-lp))
y = runif(10000)<p

# fit a logistic regression model
mod = glm(y~x[,1]*x[,2]*x[,3],family="binomial")

# using a cutoff of cut, calculate sensitivity, specificity, and classification rate
perf = function(cut, mod, y)
{
   yhat = (mod$fit>cut)
   w = which(y==1)
   sensitivity = mean( yhat[w] == 1 ) 
   specificity = mean( yhat[-w] == 0 ) 
   c.rate = mean( y==yhat ) 
   d = cbind(sensitivity,specificity)-c(1,1)
   d = sqrt( d[1]^2 + d[2]^2 ) 
   out = t(as.matrix(c(sensitivity, specificity, c.rate,d)))
   colnames(out) = c("sensitivity", "specificity", "c.rate", "distance")
   return(out)
}

s = seq(.01,.99,length=1000)
OUT = matrix(0,1000,4)
for(i in 1:1000) OUT[i,]=perf(s[i],mod,y)
plot(s,OUT[,1],xlab="Cutoff",ylab="Value",cex.lab=1.5,cex.axis=1.5,ylim=c(0,1),type="l",lwd=2,axes=FALSE,col=2)
axis(1,seq(0,1,length=5),seq(0,1,length=5),cex.lab=1.5)
axis(2,seq(0,1,length=5),seq(0,1,length=5),cex.lab=1.5)
lines(s,OUT[,2],col="darkgreen",lwd=2)
lines(s,OUT[,3],col=4,lwd=2)
lines(s,OUT[,4],col="darkred",lwd=2)
box()
legend(0,.25,col=c(2,"darkgreen",4,"darkred"),lwd=c(2,2,2,2),c("Sensitivity","Specificity","Classification Rate","Distance"))

2
(+1) 아주 좋은 대답입니다. 나는 예를 좋아한다. 귀하가 제공 한 유클리드 거리의 사용에 동기를 부여 할 준비가 된 해석이 있습니까? 또한이 맥락에서 ROC 곡선은 로지스틱 모델의 인터셉트 추정을 사후 수정함으로써 본질적으로 얻어진다는 점이 흥미로울 수 있다고 생각합니다.
추기경

유클리드 거리를 임의로 내 예제에서 "거리"의 기본 정의했다 - @Cardinal, 나는 (1,1)에 가장 가까운 이진 분류에 대한 임계 값이 자주 ROC 곡선에있는 점을 기준으로 선택되는 것을 알고
매크로

내가 참조. 나는 보이지 않는 기본 모델 측면 에서이 수량에 대한 직관적 인 해석이있을 것이라고 생각했습니다. (아마도 있을까요?)
추기경

감도와 특이성 곡선이 교차하는 지점이 가 최소화 된 곳과 같은 점을 발견했기 때문일 수 있습니다.δ
Macro

나는 현재 사용할 터미널이 없지만, 당신이보고있는 효과가 부분적으로 당신의 시뮬레이션이 대략 같은 수의 0과 1 응답을 생성해야한다는 사실 때문에 궁금합니다. 비율을 달리해도 관계가 유지됩니까? R
추기경
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.