Lojistik Regresyon Tahmininin Çıktısı


14

Aşağıdaki kodu kullanarak bir lojistik regresyon oluşturduk:

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)

Daha sonra çıktıyı bir son model oluşturmak için kullandım:

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)

Sonra tahmin işlevini kullanarak farklı bir veri kümesi için sonuçları tahmin ettim:

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

Hoş bir ROC eğrisi oluşturmak için kullanabildim ve beklediğim yanıtları veren hassasiyet ve özgüllüğü belirlemek için bir tablo oluşturdum.

Ancak ne yapmaya çalışıyorum ne veri Ft_45 1 olma olasılığı ne her satır için kurmak olduğunu. Eğer log.pred.fv çıkışına bakarsanız, örneğin, olsun:

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

Sadece yaptığım şey üzerinde belirsiz bir kavrayışım olduğu için, bir olasılığın 0 ile 1 arasında olmasını beklediğimden, 1 ve daha yüksek olan negatif değerleri nasıl yorumlayacağımı anlamaya çalışıyorum.

Yani sorum şu: Çıktıyı dönüştürmem gereken bir adım eksik mi yoksa tamamen yanlış mı yaptım? Sunduğunuz her türlü yardım için şimdiden teşekkür ederiz.

Yanıtlar:


23

İlk olarak, lojistik regresyon modeli değil, normal bir doğrusal regresyon modeli oluşturdunuz. Bir lojistik regresyon modeli oluşturmak için kullanmak gerekir glm()ile family="binomial" değil, lm().

olayının olasılığını tahmin etmek için ve bağımsız değişkenlerini kullanarak aşağıdaki lojistik regresyon modelini oluşturduğunuzu varsayalım :x1,x2x3y

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

Bu model ve regresyon katsayılarına sahiptir . β0,β1,β2β3

Bunu yaparsanız predict(logit), R hesaplar ve geri döner b0 + b1*x1 + b2*x2 + b3*x3.

Lojistik regresyon denkleminizin . y=log(p1p)=β0+β1x1+β2x2+β3x3

Yani, istediğiniz olasılıkları elde etmek için, için bu denklemi çözmeniz gerekir .p

R'de böyle bir şey yapabilirsiniz:

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

Öncelikle kodumu düzelttiğiniz ve ikinci olarak R'deki olasılıkları nasıl elde edeceğinizi açıkladığınız için çok teşekkür ederim. Bir şans verdim ve mükemmel çalışıyor. Keşke hafta önce sormuştu!
SeBee

2
Daha kısa probs <- exp(predict(logit, type = "response" , newdata=data)veya en azından `` problar <- 1 / (1 + exp (-pred))
snoram

11

Belgelerine bakarak, çağrıda predict.glmekstra bir parametre kullanmak kadar kolay görünüyor predict:

 type = "response"

Belgelere bakın:

type - gerekli tahmin türü. Varsayılan, doğrusal öngörücülerin ölçeğidir; alternatif "yanıt", yanıt değişkeninin ölçeğindedir. Bu nedenle, varsayılan bir binom modeli için varsayılan tahminler log-olasılıktır (logit ölçeğindeki olasılıklar) ve type = "yanıt" tahmin edilen olasılıkları verir. "Terimler" seçeneği, model formülünde her bir terimin takılı değerlerini doğrusal öngörücü ölçekte veren bir matris döndürür. Bu argümanın değeri kısaltılabilir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.