Obtention des valeurs prédites (Y = 1 ou 0) à partir d’un ajustement de modèle de régression logistique

50

Supposons que j'ai un objet de classe glm(correspondant à un modèle de régression logistique) et j'aimerais transformer les probabilités prédites données en predict.glmutilisant l'argument type="response"en réponses binaires, c'est-à-dire ou Y = 0 . Quel est le moyen le plus rapide et le plus canonique de faire cela en R?Y=1Y=0

Bien que, encore une fois, je suis au courant predict.glm, je ne sais pas où exactement la valeur de coupure vit - et je suppose que c'est mon principal point d'achoppement ici.P(Yi=1|X^i)

tétragramme
la source

Réponses:

77

Une fois que vous avez les probabilités prédites, c'est à vous de choisir le seuil que vous souhaitez utiliser. Vous pouvez choisir le seuil d’optimisation de la sensibilité, de la spécificité ou de la mesure la plus importante dans le contexte de l’application (quelques informations supplémentaires seraient utiles ici pour une réponse plus précise). Vous voudrez peut-être examiner les courbes ROC et d'autres mesures liées à la classification optimale.

Edit: Pour clarifier un peu cette réponse, je vais donner un exemple. La vraie réponse est que la limite optimale dépend des propriétés du classificateur qui sont importantes dans le contexte de l'application. Que soit la vraie valeur pour l' observation i et Y i soit la classe prédite. Certaines mesures courantes de la performance sontYiiY^i

(1) Sensibilité: - la proportion de « 1 'qui sont correctement identifiés comme tels.P(Y^i=1|Yi=1)

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

P(Yi=Y^i)

(1) est également appelé Vrai Taux Positif, (2) est également appelé Vrai Taux Négatif.

(1,1)

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

δ(1,1)

Vous trouverez ci-dessous un exemple simulé utilisant la prévision d'un modèle de régression logistique à classer. La coupure est variée pour voir quelle coupure donne le "meilleur" classifieur sous chacune de ces trois mesures. Dans cet exemple, les données proviennent d'un modèle de régression logistique à trois prédicteurs (voir graphique R ci-dessous). Comme vous pouvez le constater à partir de cet exemple, le seuil "optimal" dépend de laquelle de ces mesures est la plus importante - elle dépend entièrement de l'application.

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

entrez la description de l'image ici

# 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"))
Macro
la source
2
(+1) Très belle réponse. J'aime l'exemple. Connaissez-vous une interprétation toute prête pour motiver l’utilisation de la distance euclidienne que vous avez indiquée? Je pense également qu’il pourrait être intéressant de souligner dans ce contexte que la courbe ROC est essentiellement obtenue en modifiant post-hoc l’estimation par interception du modèle logistique.
cardinal
@Cardinal, je sais que les seuils de classification binaire sont souvent choisies en fonction de quel point sur la courbe ROC est le plus proche de (1,1) - la distance euclidienne était arbitrairement la définition par défaut de « distance » dans mon exemple
Macro
Je vois. J'ai pensé qu'il pourrait y avoir une interprétation intuitive de cette quantité en termes de modèle sous-jacent que je ne voyais pas. (Peut-être y a-t-il [?])
cardinal
δ
R