วิธีจัดการคำเตือน 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 เกิดขึ้น