Comment forcer R à utiliser un niveau de facteur spécifié comme référence dans une régression?

Comment puis-je dire à R d’utiliser un certain niveau comme référence si j’utilise des variables explicatives binarys dans une régression?

C’est juste en utilisant un certain niveau par défaut.

lm(x ~ y + as.factor(b)) 

avec b {0, 1, 2, 3, 4} . Disons que je veux utiliser 3 au lieu du zéro utilisé par R.

Voir la fonction relevel() . Voici un exemple:

 set.seed(123) x <- rnorm(100) DF <- data.frame(x = x, y = 4 + (1.5*x) + rnorm(100, sd = 2), b = gl(5, 20)) head(DF) str(DF) m1 <- lm(y ~ x + b, data = DF) summary(m1) 

relevel() maintenant le facteur b dans DF en utilisant la fonction relevel() :

 DF <- within(DF, b <- relevel(b, ref = 3)) m2 <- lm(y ~ x + b, data = DF) summary(m2) 

Les modèles ont estimé différents niveaux de référence.

 > coef(m1) (Intercept) x b2 b3 b4 b5 3.2903239 1.4358520 0.6296896 0.3698343 1.0357633 0.4666219 > coef(m2) (Intercept) x b1 b2 b4 b5 3.66015826 1.43585196 -0.36983433 0.25985529 0.66592898 0.09678759 

D’autres ont mentionné la commande relevel, qui est la meilleure solution si vous souhaitez modifier le niveau de base de toutes les parsings de vos données (ou si vous souhaitez modifier les données).

Si vous ne voulez pas changer les données (il s’agit d’un changement ponctuel, mais à l’avenir, vous voulez à nouveau le comportement par défaut), vous pouvez utiliser une combinaison de la fonction C (note majuscule) pour définir les contrastes et le contr .treatments fonctionne avec l’argument de base pour choisir le niveau que vous voulez être la ligne de base. Par exemple:

 lm( Sepal.Width ~ C(Species,contr.treatment(3, base=2)), data=iris ) 

La commande relevel() est une méthode abrégée de votre question. Ce qu’il fait est de réorganiser le facteur de sorte que quel que soit le niveau de référence est le premier. Par conséquent, réorganiser vos niveaux de facteurs aura également le même effet mais vous donnera plus de contrôle. Peut-être que vous vouliez avoir des niveaux 3,4,0,1,2. Dans ce cas…

 bFactor <- factor(b, levels = c(3,4,0,1,2)) 

Je préfère cette méthode car il est plus facile pour moi de voir dans mon code non seulement la référence mais aussi la position des autres valeurs (plutôt que d’avoir à en voir les résultats).

NOTE: NE PAS en faire un facteur ordonné. Un facteur avec un ordre spécifié et un facteur ordonné ne sont pas la même chose. lm() peut commencer à penser que vous voulez des contrastes polynomiaux si vous faites cela.

Je sais que c’est une vieille question, mais j’avais un problème similaire et j’ai trouvé que:

 lm(x ~ y + relevel(b, ref = "3")) 

fait exactement ce que vous avez demandé.

Vous pouvez également marquer manuellement la colonne avec un atsortingbut de contrasts , ce qui semble être respecté par les fonctions de régression:

 contrasts(df$factorcol) <- contr.treatment(levels(df$factorcol), base=which(levels(df$factorcol) == 'RefLevel'))