ผลลัพธ์ของการทำนายการถดถอยโลจิสติก


14

ฉันสร้าง Logistic Regression โดยใช้รหัสต่อไปนี้:

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)

ฉันได้ใช้ผลลัพธ์เพื่อสร้างโมเดลสุดท้าย:

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)

จากนั้นฉันได้ทำนายผลลัพธ์สำหรับชุดข้อมูลอื่นโดยใช้ฟังก์ชันทำนาย:

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

ฉันสามารถใช้สร้างเส้นโค้ง ROC ที่น่าพอใจและสร้างตารางเพื่อสร้างความไวและความเฉพาะเจาะจงซึ่งให้คำตอบที่ฉันคาดหวัง

อย่างไรก็ตามสิ่งที่ฉันพยายามทำคือการสร้างสำหรับแต่ละแถวของข้อมูลความน่าจะเป็นของ Ft_45 เป็น 1 ถ้าฉันดูผลลัพธ์ของ log.pred.fv ฉันได้รับตัวอย่างเช่น:

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

เนื่องจากฉันมีความเข้าใจเบื้องต้นเกี่ยวกับสิ่งที่ฉันกำลังทำอยู่ฉันพยายามดิ้นรนที่จะเข้าใจวิธีการตีความค่าลบและค่าที่สูงกว่านั้น 1 ค่าเนื่องจากฉันคาดว่าน่าจะอยู่ระหว่าง 0 ถึง 1

ดังนั้นคำถามของฉันคือฉันเพิ่งพลาดขั้นตอนที่ต้องแปลงผลลัพธ์หรือทำผิดไปทั้งหมด ขอบคุณล่วงหน้าสำหรับความช่วยเหลือใด ๆ ที่คุณสามารถนำเสนอ

คำตอบ:


23

ขั้นแรกดูเหมือนว่าคุณสร้างแบบจำลองการถดถอยเชิงเส้นแบบปกติไม่ใช่แบบจำลองการถดถอยแบบลอจิสติก เพื่อสร้างรูปแบบการถดถอยโลจิสติก, คุณจำเป็นต้องใช้glm()กับไม่ family="binomial" lm()

สมมติว่าคุณสร้างโมเดลการถดถอยโลจิสติกต่อไปนี้โดยใช้ตัวแปรอิสระและเพื่อทำนายความน่าจะเป็นของเหตุการณ์ :x1,x2x3y

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

รุ่นนี้มีค่าสัมประสิทธิ์การถดถอยและ\ β0,β1,β2β3

จากนั้นถ้าคุณทำวิจัยจะคำนวณและผลตอบแทนpredict(logit)b0 + b1*x1 + b2*x2 + b3*x3

จำได้ว่าสมการถดถอยโลจิสติกของคุณจะ\ y=log(p1p)=β0+β1x1+β2x2+β3x3

ดังนั้นเพื่อให้ได้ความน่าจะเป็นที่ที่คุณต้องการคุณต้องแก้สมการนี้สำหรับพีp

ใน R คุณสามารถทำสิ่งนี้:

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

ขอบคุณมากตอนแรกสำหรับการแก้ไขรหัสของฉันและประการที่สองสำหรับการอธิบายวิธีการได้รับความน่าจะเป็นในอาร์ฉันได้รับมันและมันทำงานได้อย่างสมบูรณ์แบบ ฉันขอให้ฉันถามเมื่อหลายสัปดาห์ก่อน !!
SeBee

2
สามารถทำให้สั้นลงด้วยprobs <- exp(predict(logit, type = "response" , newdata=data)หรืออย่างน้อย `probs <- 1 / (1 + exp (-pred))
snoram

11

ดูเอกสารประกอบของpredict.glm, ดูเหมือนว่าง่ายเหมือนการใช้พารามิเตอร์พิเศษในการpredictโทร:

 type = "response"

ดูเอกสารประกอบ:

ประเภท - ประเภทของการทำนายที่ต้องการ ค่าเริ่มต้นอยู่ที่สเกลของตัวทำนายเชิงเส้น "การตอบสนอง" ทางเลือกอยู่ในระดับของตัวแปรการตอบสนอง ดังนั้นสำหรับแบบจำลองทวินามเริ่มต้นการคาดการณ์เริ่มต้นคืออัตราต่อรอง (ความน่าจะเป็นในระดับ logit) และ type = "การตอบสนอง" ให้ความน่าจะเป็นที่คาดการณ์ไว้ ตัวเลือก "ข้อตกลง" จะส่งกลับเมทริกซ์ที่ให้ค่าติดตั้งของแต่ละคำในสูตรแบบจำลองในระดับตัวทำนายเชิงเส้น ค่าของอาร์กิวเมนต์นี้สามารถย่อ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.