Получение прогнозных значений (Y = 1 или 0) из модели логистической регрессии

50

Допустим, у меня есть объект класса glm(соответствующий модели логистической регрессии), и я хотел бы превратить предсказанные вероятности, заданные с predict.glmпомощью аргумента, type="response"в двоичные ответы, то есть или Y = 0 . Какой самый быстрый и самый канонический способ сделать это в R?Y=1Y=0

Хотя, опять же , я знаю predict.glm, я не знаю , где именно пороговое значение живет - и я думаю , что это мой главный камень преткновения здесь.P(Yi=1|X^i)

слово из четырех букв
источник

Ответы:

77

Когда у вас есть прогнозируемые вероятности, вам решать, какой порог вы хотели бы использовать. Вы можете выбрать порог для оптимизации чувствительности, специфичности или любого другого показателя, который наиболее важен в контексте приложения (некоторая дополнительная информация будет полезна для более конкретного ответа). Возможно, вы захотите взглянуть на кривые ROC и другие показатели, связанные с оптимальной классификацией.

Изменить: Чтобы уточнить этот ответ несколько я собираюсь привести пример. Реальный ответ заключается в том, что оптимальное ограничение зависит от того, какие свойства классификатора важны в контексте приложения. Пусть бы истинное значение для наблюдения I и Y я быть предсказан классом. Некоторые общие показатели производительностиYiiY^i

(1) Чувствительность: - доля «1 ', которые правильно идентифицированных как так.P(Y^i=1|Yi=1)

P(Y^i=0|Yi=0)

P(Yi=Y^i)

(1) также называется истинной положительной ставкой, (2) также называется истинной отрицательной ставкой.

(1,1)

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

δ(1,1)

Ниже приведен смоделированный пример использования прогноза из модели логистической регрессии для классификации. Отсечка варьируется, чтобы увидеть, какую отсечку дает «лучший» классификатор по каждой из этих трех мер. В этом примере данные поступают из модели логистической регрессии с тремя предикторами (см. Код R ниже графика). Как видно из этого примера, «оптимальная» отсечка зависит от того, какая из этих мер наиболее важна - это полностью зависит от приложения.

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, я знаю, что пороги для бинарной классификации часто выбираются исходя из того, какая точка на кривой ROC наиболее близка к (1,1) - евклидово расстояние было произвольно определением по умолчанию для «расстояния» в моем примере
Macro
Понимаю. Я думал, что может быть интуитивная интерпретация этой величины в терминах базовой модели, которую я не видел. (Может быть, есть [?])
кардинал
δ
R