كيفية الإصلاح: لا يمكن تطبيق التباينات إلا على العوامل ذات المستويين أو أكثر
الخطأ الشائع الذي قد تواجهه في 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