Output Prediksi Regresi Logistik

14

Saya telah membuat Regresi Logistik menggunakan kode berikut:

full.model.f = lm(Ft_45 ~ ., LOG_D)
base.model.f = lm(Ft_45 ~ IP_util_E2pl_m02_flg)
step(base.model.f, scope=list(upper=full.model.f, lower=~1),
     direction="forward", trace=FALSE)

Saya kemudian menggunakan output untuk membuat model akhir:

final.model.f = lm(Ft_45 ~ IP_util_E2pl_m02_flg + IP_util_E2_m02_flg + 
                           AE_NumVisit1_flg + OP_NumVisit1_m01_flg + IP_TotLoS_m02 + 
                           Ft1_45 + IP_util_E1_m05_flg + IP_TotPrNonElecLoS_m02 + 
                           IP_util_E2pl_m03_flg + LTC_coding + OP_NumVisit0105_m03_flg +
                           OP_NumVisit11pl_m03_flg + AE_ArrAmb_m02_flg)

Lalu saya telah memprediksi hasil untuk set data yang berbeda menggunakan fungsi prediksi:

log.pred.f.v <- predict(final.model.f, newdata=LOG_V)

Saya telah bisa menggunakan menetapkan kurva ROC yang menyenangkan dan membuat tabel untuk menetapkan sensitivitas dan spesifisitas yang memberi saya tanggapan yang saya harapkan.

Namun Apa yang saya coba lakukan adalah menetapkan untuk setiap baris data berapa probabilitas dari Ft_45 menjadi 1. Jika saya melihat output dari log.pred.fv saya dapatkan, misalnya ,:

1 -0.171739593    
2 -0.049905948    
3 0.141146419    
4 0.11615669    
5 0.07342591    
6 0.093054334    
7 0.957164383    
8 0.098415639    
.
.
.
104 0.196368229    
105 1.045208447    
106 1.05499112

Karena saya hanya memiliki pemahaman tentatif tentang apa yang saya lakukan, saya berjuang untuk memahami bagaimana menafsirkan nilai negatif dan lebih tinggi yang saya nilai seperti yang saya harapkan probabilitas antara 0 dan 1.

Jadi pertanyaan saya adalah apakah saya hanya melewatkan langkah di mana saya perlu mengubah output atau apakah saya sudah salah total. Terima kasih sebelumnya atas bantuan yang dapat Anda tawarkan.

SeBee
sumber

Jawaban:

23

Pertama, sepertinya Anda membuat model regresi linier biasa, bukan model regresi logistik. Untuk membangun model regresi logistik, Anda harus menggunakannya glm()dengan family="binomial" , bukan lm().

x1,x2x3y

logit <- glm(y~x1+x2+x3,family="binomial")

β0,β1,β2β3

Jika demikian predict(logit), R akan menghitung dan mengembalikan b0 + b1*x1 + b2*x2 + b3*x3.

y=lHaig(hal1-hal)=β0+β1x1+β2x2+β3x3

hal

Di R, Anda dapat melakukan sesuatu seperti ini:

pred <- predict(logit,newdata=data) #gives you b0 + b1x1 + b2x2 + b3x3
probs <- exp(pred)/(1+exp(pred)) #gives you probability that y=1 for each observation
Ben F
sumber
Terima kasih banyak, pertama untuk memperbaiki kode saya dan kedua untuk menjelaskan cara mendapatkan probabilitas di R. Saya sudah mencobanya dan berfungsi dengan baik. Saya berharap saya telah bertanya minggu lalu !!
SeBee
1
Dapat dibuat lebih pendek dengan probs <- exp(predict(logit, type = "response" , newdata=data)atau setidaknya `probs <- 1 / (1 + exp (-pred))
snoram
11

Melihat dokumentasi predict.glm, sepertinya semudah menggunakan parameter tambahan dalam predictpanggilan:

 type = "response"

Lihat dokumentasi:

type - tipe prediksi yang diperlukan. Defaultnya adalah pada skala prediktor linier; "respons" alternatif ada pada skala variabel respons. Jadi untuk model binomial default, prediksi standar adalah log-odds (probabilitas pada skala logit) dan type = "response" memberikan probabilitas yang diprediksi. Opsi "terms" mengembalikan matriks yang memberikan nilai yang cocok dari setiap istilah dalam rumus model pada skala prediktor linier. Nilai argumen ini dapat disingkat

Bulat
sumber