Як виправити: контрасти можна застосовувати лише до факторів із 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 або більше рівнями»
Припустимо, що ми маємо наступний кадр даних у 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