كيفية الإصلاح: لا يمكن تطبيق التباينات إلا على العوامل ذات المستويين أو أكثر


الخطأ الشائع الذي قد تواجهه في R هو:

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

يحدث هذا الخطأ عندما تحاول ملاءمة نموذج الانحدار باستخدام متغير توقع يكون إما عاملاً أو سمة وله قيمة فريدة واحدة فقط.

يشارك هذا البرنامج التعليمي الخطوات الدقيقة التي يمكنك استخدامها لحل هذا الخطأ.

مثال: كيفية إصلاح “لا يمكن تطبيق التباينات إلا على العوامل ذات المستويين أو أكثر”

لنفترض أن لدينا إطار البيانات التالي في 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

Add a Comment

ایمئیل یایینلانمایاجاق ایسته‎نیله‎ن بوشلوقلار خاللانمیشدیر *