วิธีแก้ไขใน r: ไม่ได้กำหนดเนื่องจากลักษณะเฉพาะ
ข้อความแสดงข้อผิดพลาดที่คุณอาจพบใน R คือ:
Coefficients: (1 not defined because of singularities)
ข้อความแสดงข้อผิดพลาดนี้เกิดขึ้นเมื่อคุณปรับโมเดลให้พอดีกับโมเดลโดยใช้ฟังก์ชัน glm() ใน R และตัวแปรทำนายตั้งแต่สองตัวขึ้นไปมีความสัมพันธ์เชิงเส้นตรงระหว่างกัน ซึ่งเรียกว่า มัลติคอลลิเนียริตีที่สมบูรณ์แบบ
เพื่อแก้ไขข้อผิดพลาดนี้ คุณสามารถใช้ฟังก์ชัน cor() เพื่อระบุตัวแปรในชุดข้อมูลที่มีความสัมพันธ์กันอย่างสมบูรณ์แบบ และเพียงลบตัวแปรตัวใดตัวหนึ่งออกจากแบบจำลองการถดถอย
บทช่วยสอนนี้จะอธิบายวิธีจัดการกับข้อความแสดงข้อผิดพลาดนี้ในทางปฏิบัติ
วิธีการทำซ้ำข้อผิดพลาด
สมมติว่าเราปรับ โมเดลการถดถอยโลจิสติก เข้ากับกรอบข้อมูลต่อไปนี้ใน R:
#define data
df <- data. frame (y = c(0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1),
x1 = c(3, 3, 4, 4, 3, 2, 5, 8, 9, 9, 9, 8, 9, 9, 9),
x2 = c(6, 6, 8, 8, 6, 4, 10, 16, 18, 18, 18, 16, 18, 18, 18),
x3 = c(4, 7, 7, 3, 8, 9, 9, 8, 7, 8, 9, 4, 9, 10, 13))
#fit logistic regression model
model <- glm(y~x1+x2+x3, data=df, family=binomial)
#view model summary
summary(model)
Call:
glm(formula = y ~ x1 + x2 + x3, family = binomial, data = df)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.372e-05 -2.110e-08 2.110e-08 2.110e-08 1.575e-05
Coefficients: (1 not defined because of singularities)
Estimate Std. Error z value Pr(>|z|)
(Intercept) -75.496 176487.031 0.000 1
x1 14.546 24314.459 0.001 1
x2 NA NA NA NA
x3 -2.258 20119.863 0.000 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 2.0728e+01 on 14 degrees of freedom
Residual deviance: 5.1523e-10 on 12 degrees of freedom
AIC: 6
Number of Fisher Scoring iterations: 24
โปรดทราบว่าก่อนเอาต์พุตค่าสัมประสิทธิ์ เราได้รับข้อความ:
Coefficients: (1 not defined because of singularities)
สิ่งนี้บ่งชี้ว่าตัวแปรทำนายตั้งแต่สองตัวขึ้นไปในแบบจำลองมีความสัมพันธ์เชิงเส้นตรงที่สมบูรณ์แบบ ดังนั้นจึงไม่สามารถประมาณค่าสัมประสิทธิ์การถดถอยทั้งหมดในแบบจำลองได้ทั้งหมด
ตัวอย่างเช่น โปรดทราบว่าไม่สามารถประมาณค่าสัมประสิทธิ์สำหรับตัวแปรทำนาย x 2 ได้
วิธีจัดการกับข้อผิดพลาด
เพื่อระบุตัวแปรทำนายที่ทำให้เกิดข้อผิดพลาดนี้ เราสามารถใช้ฟังก์ชัน cor() เพื่อสร้าง เมทริกซ์สหสัมพันธ์ และตรวจสอบว่าตัวแปรใดมีความสัมพันธ์กัน 1 พอดี:
#create correlation matrix
cor(df)
y x1 x2 x3
y 1.0000000 0.9675325 0.9675325 0.3610320
x1 0.9675325 1.0000000 1.0000000 0.3872889
x2 0.9675325 1.0000000 1.0000000 0.3872889
x3 0.3610320 0.3872889 0.3872889 1.0000000
จากเมทริกซ์สหสัมพันธ์ เราจะเห็นว่าตัวแปร x 1 และ x 2 มีความสัมพันธ์กันอย่างสมบูรณ์
เพื่อแก้ไขข้อผิดพลาดนี้ เราสามารถลบตัวแปรตัวใดตัวหนึ่งในสองตัวนี้ออกจากแบบจำลองได้ เนื่องจากจริงๆ แล้วตัวแปรเหล่านั้นไม่ได้ให้ข้อมูลเฉพาะหรือเป็นอิสระในแบบจำลองการถดถอย
ตัวอย่างเช่น สมมติว่าเราลบ x 2 ออกและใส่โมเดลการถดถอยโลจิสติกต่อไปนี้:
#fit logistic regression model
model <- glm(y~x1+x3, data=df, family=binomial)
#view model summary
summary(model)
Call:
glm(formula = y ~ x1 + x3, family = binomial, data = df)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.372e-05 -2.110e-08 2.110e-08 2.110e-08 1.575e-05
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -75.496 176487.031 0.000 1
x1 14.546 24314.459 0.001 1
x3 -2.258 20119.863 0.000 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 2.0728e+01 on 14 degrees of freedom
Residual deviance: 5.1523e-10 on 12 degrees of freedom
AIC: 6
Number of Fisher Scoring iterations: 24
โปรดทราบว่าเราไม่ได้รับข้อความแสดงข้อผิดพลาด “ไม่ได้กำหนดเนื่องจากภาวะเอกฐาน” ในครั้งนี้
หมายเหตุ : ไม่สำคัญว่าเราจะลบ x 1 หรือ x 2 โมเดลสุดท้ายจะมีการประมาณค่าสัมประสิทธิ์เดียวกันสำหรับตัวแปรที่คุณตัดสินใจเก็บไว้ และความดีโดยรวมของความพอดีของโมเดลจะเหมือนกัน
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้จะอธิบายวิธีจัดการกับข้อผิดพลาดอื่น ๆ ใน R:
วิธีแก้ไขใน R: สูตรเทมเพลตไม่ถูกต้องใน ExtractVars
วิธีแก้ไขในอาร์กิวเมนต์ R: ไม่ใช่ทั้งตัวเลขหรือตรรกะ: return na
วิธีแก้ไข: RandomForest.default(m, y, …): Na/NaN/Inf ในการเรียกใช้ฟังก์ชันต่างประเทศ