วิธีจัดการคำเตือน r: glm.fit: อัลกอริทึมไม่ได้มาบรรจบกัน


คำเตือนทั่วไปที่คุณอาจพบใน R คือ:

 glm.fit: algorithm did not converge

คำเตือนนี้มักเกิดขึ้นเมื่อคุณพยายามปรับแบบจำลองการถดถอยโลจิสติกใน R และเห็น การแยกที่สมบูรณ์แบบ กล่าวคือ ตัวแปรทำนายสามารถแยกตัวแปรการตอบสนองออกเป็น 0 และ 1 ได้อย่างสมบูรณ์แบบ

ตัวอย่างต่อไปนี้แสดงวิธีจัดการกับคำเตือนนี้ในทางปฏิบัติ

วิธีทำซ้ำคำเตือน

สมมติว่าเรากำลังพยายามปรับโมเดลการถดถอยโลจิสติกต่อไปนี้ใน R:

 #create data frame
df <- data. frame (x=c(.1, .2, .3, .4, .5, .6, .7, .8, .9, 1, 1, 1.1, 1.3, 1.5, 1.7),
                 y=c(0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1))

#attempt to fit logistic regression model
glm(y~x, data=df, family=" binomial ")

Call: glm(formula = y ~ x, family = "binomial", data = df)

Coefficients:
(Intercept)x  
     -409.1 431.1  

Degrees of Freedom: 14 Total (ie Null); 13 Residual
Null Deviance: 20.19 
Residual Deviance: 2.468e-09 AIC: 4
Warning messages:
1: glm.fit: algorithm did not converge 
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

โปรดทราบว่าเราได้รับข้อความเตือน: glm.fit: Algorithm ไม่ได้มาบรรจบกัน

เราได้รับข้อความนี้เนื่องจากตัวแปรทำนาย x สามารถแยกตัวแปรตอบสนอง y ออกเป็น 0 และ 1 ได้อย่างสมบูรณ์แบบ

โปรดทราบว่าสำหรับทุกค่า x ที่น้อยกว่า 1 y จะเท่ากับ 0 และสำหรับทุกค่า x เท่ากับหรือมากกว่า 1 y จะเท่ากับ 1

รหัสต่อไปนี้แสดงสถานการณ์สมมติที่ตัวแปรทำนายไม่สามารถแยกตัวแปรการตอบสนองออกเป็น 0 และ 1 ได้อย่างสมบูรณ์:

 #create data frame
df <- data. frame (x=c(.1, .2, .3, .4, .5, .6, .7, .8, .9, 1, 1, 1.1, 1.3, 1.5, 1.7),
                 y=c(0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1))

#fit logistic regression model
glm(y~x, data=df, family=" binomial ")

Call: glm(formula = y ~ x, family = "binomial", data = df)

Coefficients:
(Intercept) x  
     -2.112 2.886  

Degrees of Freedom: 14 Total (ie Null); 13 Residual
Null Deviance: 20.73 
Residual Deviance: 16.31 AIC: 20.31

เราไม่ได้รับข้อความเตือนใดๆ เนื่องจากตัวแปรทำนายไม่สามารถแยกตัวแปรการตอบสนองออกเป็น 0 และ 1 ได้อย่างสมบูรณ์

วิธีจัดการกับคำเตือน

หากเราพบกับสถานการณ์การแยกจากกันที่สมบูรณ์แบบ มีสองวิธีในการจัดการ:

วิธีที่ 1: ใช้การถดถอยแบบลงโทษ

ทางเลือกหนึ่งคือการใช้รูปแบบของการถดถอยโลจิสติกแบบลงโทษ เช่น การถดถอยโลจิสติกแบบบ่วงบาศ หรือการทำให้เป็นมาตรฐานแบบยืดหยุ่น

โปรดดูแพ็คเกจ glmnet สำหรับตัวเลือกเกี่ยวกับวิธีการใช้การถดถอยโลจิสติกแบบลงโทษใน R

วิธีที่ 2: ใช้ตัวแปรทำนายเพื่อทำนายตัวแปรตอบสนองได้อย่างสมบูรณ์แบบ

หากคุณสงสัยว่าอาจมีการแบ่งแยกที่สมบูรณ์แบบนี้ในประชากร คุณสามารถใช้ตัวแปรทำนายนี้เพื่อทำนายค่าของตัวแปรตอบสนองได้อย่างสมบูรณ์แบบ

ตัวอย่างเช่น ในสถานการณ์ข้างต้น เราเห็นว่าตัวแปรตอบสนอง y เท่ากับ 0 เสมอเมื่อตัวแปรทำนาย x น้อยกว่า 1

หากเราสงสัยว่าความสัมพันธ์นี้มีอยู่ในประชากรโดยรวม เราสามารถคาดการณ์ได้เสมอว่าค่า y จะเป็น 0 เมื่อ x น้อยกว่า 1 และไม่ต้องกังวลกับการปรับแบบจำลองการถดถอยลอจิสติกส์ที่ถูกลงโทษ

แหล่งข้อมูลเพิ่มเติม

บทช่วยสอนต่อไปนี้ให้ข้อมูลเพิ่มเติมเกี่ยวกับการใช้ฟังก์ชัน glm() ใน R:

ความแตกต่างระหว่าง glm และ lm ใน R
วิธีใช้ฟังก์ชันทำนายด้วย glm ใน R
วิธีจัดการ: glm.fit: ความน่าจะเป็นที่ปรับด้วยตัวเลข 0 หรือ 1 เกิดขึ้น

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *