วิธีแก้ไข: คอนทราสต์ใช้ได้กับปัจจัยที่มี 2 ระดับขึ้นไปเท่านั้น


ข้อผิดพลาดทั่วไปที่คุณอาจพบใน R คือ:

 Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]): 
  contrasts can be applied only to factors with 2 or more levels

ข้อผิดพลาดนี้เกิดขึ้นเมื่อคุณพยายามปรับให้พอดีกับแบบจำลองการถดถอยโดยใช้ตัวแปรทำนายที่เป็นปัจจัยหรือลักษณะและมีค่าที่ไม่ซ้ำกันเพียงค่าเดียว

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

ตัวอย่าง: วิธีแก้ไข “ความเปรียบต่างใช้ได้กับปัจจัยที่มี 2 ระดับขึ้นไปเท่านั้น”

สมมติว่าเรามี data frame ต่อไปนี้ใน R:

 #create data frame
df <- data. frame (var1=c(1, 3, 3, 4, 5),
                 var2=as. factor (4),
                 var3=c(7, 7, 8, 3, 2),
                 var4=c(1, 1, 2, 8, 9))

#view data frame
df

  var1 var2 var3 var4
1 1 4 7 1
2 3 4 7 1
3 3 4 8 2
4 4 4 3 8
5 5 4 2 9

โปรดทราบว่าตัวแปรทำนาย var2 เป็นปัจจัยและมีค่าที่ไม่ซ้ำกันเพียงค่าเดียวเท่านั้น

หากเราพยายามปรับโมเดลการถดถอยเชิงเส้นหลายตัวให้พอดีโดยใช้ var2 เป็นตัวแปรทำนาย เราจะได้รับข้อผิดพลาดต่อไปนี้:

 #attempt to fit regression model
model <- lm(var4 ~ var1 + var2 + var3, data=df)

Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]): 
  contrasts can be applied only to factors with 2 or more levels

เราได้รับข้อผิดพลาดนี้เนื่องจาก var2 มีค่าเฉพาะเพียงค่าเดียวเท่านั้น: 4 เนื่องจากตัวแปรทำนายนี้ไม่มีการเปลี่ยนแปลง R จึงไม่สามารถปรับแบบจำลองการถดถอยได้อย่างมีประสิทธิภาพ

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

 #count unique values for each variable
sapply( lapply (df, unique), length)

var1 var2 var3 var4 
   4 1 4 4 

และเราสามารถใช้ฟังก์ชัน lapply() เพื่อแสดงค่าเฉพาะของแต่ละตัวแปรได้:

 #display unique values for each variable
lapply(df[c('var1', 'var2', 'var3')], unique)

$var1
[1] 1 3 4 5

$var2
[1] 4
Levels: 4

$var3
[1] 7 8 3 2

เราจะเห็นได้ว่า var2 เป็นตัวแปรเดียวที่มีค่าไม่ซ้ำกัน ดังนั้น เราสามารถแก้ไขข้อผิดพลาดนี้ได้โดยเพียงแค่ลบ var2 ออกจากแบบจำลองการถดถอย:

 #fit regression model without using var2 as a predictor variable
model <- lm(var4 ~ var1 + var3, data=df)

#view model summary
summary(model)

Call:
lm(formula = var4 ~ var1 + var3, data = df)

Residuals:
       1 2 3 4 5 
 0.02326 -1.23256 0.91860 0.53488 -0.24419 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept) 8.4070 3.6317 2.315 0.1466  
var1 0.6279 0.6191 1.014 0.4172  
var3 -1.1512 0.3399 -3.387 0.0772 .
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.164 on 2 degrees of freedom
Multiple R-squared: 0.9569, Adjusted R-squared: 0.9137 
F-statistic: 22.18 on 2 and 2 DF, p-value: 0.04314

เมื่อลบ var2 ออกจากแบบจำลองการถดถอย เราจะไม่พบข้อผิดพลาดก่อนหน้านี้อีกต่อไป

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

วิธีดำเนินการถดถอยเชิงเส้นอย่างง่ายใน R
วิธีดำเนินการถดถอยเชิงเส้นพหุคูณใน R
วิธีดำเนินการถดถอยโลจิสติกใน R

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

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