Memperoleh nilai prediksi (Y = 1 atau 0) dari model regresi logistik yang sesuai

50

Katakanlah saya memiliki objek kelas glm(sesuai dengan model regresi logistik) dan saya ingin mengubah probabilitas prediksi yang diberikan dengan predict.glmmenggunakan argumen type="response"menjadi respons biner, yaitu atau Y = 0 . Apa cara tercepat & paling kanonik untuk melakukan ini di R?Y=1Y=0

Sementara, sekali lagi, aku sadar predict.glm, aku tidak tahu di mana tepatnya nilai cutoff hidup - dan saya kira ini adalah batu sandungan utama saya di sini.P(Yi=1|X^i)

tetragrammaton
sumber

Jawaban:

77

Setelah Anda memiliki probabilitas yang diprediksi, terserah Anda ambang mana yang ingin Anda gunakan. Anda dapat memilih ambang untuk mengoptimalkan sensitivitas, spesifisitas, atau ukuran apa pun yang paling penting dalam konteks aplikasi (beberapa info tambahan akan membantu di sini untuk jawaban yang lebih spesifik). Anda mungkin ingin melihat kurva ROC dan tindakan lain yang terkait dengan klasifikasi optimal.

Sunting: Untuk memperjelas jawaban ini, saya akan memberikan contoh. Jawaban sebenarnya adalah bahwa cutoff optimal tergantung pada sifat classifier apa yang penting dalam konteks aplikasi. Mari menjadi nilai yang benar untuk pengamatan saya , dan Y saya menjadi kelas diprediksi. Beberapa ukuran kinerja yang umum adalahYiiY^i

(1) Sensitivitas: - proporsi '1 yang diidentifikasi dengan benar sebagai begitu.P(Y^i=1|Yi=1)

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

P(Yi=Y^i)

(1) juga disebut True Positive Rate, (2) juga disebut True Negative Rate.

(1,1)

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

δ(1,1)

Di bawah ini adalah contoh simulasi menggunakan prediksi dari model regresi logistik untuk mengklasifikasikan. Cutoff bervariasi untuk melihat apa cutoff memberikan classifier "terbaik" di bawah masing-masing tiga langkah ini. Dalam contoh ini, data berasal dari model regresi logistik dengan tiga prediktor (lihat kode R plot di bawah ini). Seperti yang Anda lihat dari contoh ini, batas "optimal" tergantung pada langkah mana yang paling penting - ini sepenuhnya tergantung pada aplikasi.

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

masukkan deskripsi gambar di sini

# 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"))
Makro
sumber
2
(+1) Jawaban yang sangat bagus. Saya suka contohnya. Apakah ada interpretasi siap yang Anda ketahui untuk memotivasi penggunaan jarak Euclidean yang telah Anda berikan? Saya juga berpikir mungkin menarik untuk menunjukkan dalam konteks ini bahwa kurva ROC pada dasarnya diperoleh dengan membuat modifikasi post hoc dari estimasi intersep dari model logistik.
kardinal
@ Cardinal, saya tahu bahwa ambang batas untuk klasifikasi biner sering dipilih berdasarkan titik mana pada kurva ROC yang paling dekat dengan (1,1) - jarak euclidean secara sewenang-wenang definisi default "jarak" dalam contoh saya
Makro
Saya melihat. Saya pikir mungkin ada interpretasi intuitif dari jumlah ini dalam hal model mendasar yang tidak saya lihat. (Mungkin ada [?])
kardinal
δ
R