Comment résoudre le problème : les contrastes ne peuvent être appliqués qu’à des facteurs comportant 2 niveaux ou plus



Une erreur courante que vous pouvez rencontrer dans R est :

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

Cette erreur se produit lorsque vous tentez d’ajuster un modèle de régression à l’aide d’une variable prédictive qui est soit un facteur, soit un caractère et n’a qu’une seule valeur unique.

Ce didacticiel partage les étapes exactes que vous pouvez utiliser pour résoudre cette erreur.

Exemple : Comment corriger « les contrastes ne peuvent être appliqués qu’aux facteurs avec 2 niveaux ou plus »

Supposons que nous ayons le bloc de données suivant dans 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

Notez que la variable prédictive var2 est un facteur et n’a qu’une seule valeur unique.

Si nous essayons d’ajuster un modèle de régression linéaire multiple en utilisant var2 comme variable prédictive, nous obtiendrons l’erreur suivante :

#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

Nous obtenons cette erreur car var2 n’a qu’une seule valeur unique : 4. Puisqu’il n’y a aucune variation dans cette variable prédictive, R est incapable d’ajuster efficacement un modèle de régression.

Nous pouvons en fait utiliser la syntaxe suivante pour compter le nombre de valeurs uniques pour chaque variable de notre bloc de données :

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

var1 var2 var3 var4 
   4    1    4    4 

Et nous pouvons utiliser la fonction lapply() pour afficher chacune des valeurs uniques de chaque variable :

#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

Nous pouvons voir que var2 est la seule variable qui a une valeur unique. Ainsi, nous pouvons corriger cette erreur en supprimant simplement var2 du modèle de régression :

#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 .
---
Signif. 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

En supprimant var2 du modèle de régression, nous ne rencontrons plus l’erreur précédente.

Ressources additionnelles

Comment effectuer une régression linéaire simple dans R
Comment effectuer une régression linéaire multiple dans R
Comment effectuer une régression logistique dans R

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *