Comment puis-je dire à R d'utiliser un certain niveau comme référence si j'utilise des variables explicatives binaires dans une régression?
Il utilise simplement un 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 qui est utilisé par R.
r
regression
linear-regression
categorical-data
dummy-variable
Matt Bannert
la source
la source
b
vous pouvez spécifier l'ordre des niveaux à l'aide defactor(b, levels = c(3,1,2,4,5))
. Faites cela dans une étape de traitement des données en dehors de l'lm()
appel. Ma réponse ci-dessous utilise larelevel()
fonction afin que vous puissiez créer un facteur, puis décaler le niveau de référence en fonction de vos besoins.Réponses:
Voir la
relevel()
fonction. Voici un exemple:Modifiez maintenant le facteur
b
enDF
utilisant larelevel()
fonction:Les modèles ont estimé différents niveaux de référence.
la source
within
, maisdf$bR = relevel(df$b, ref=3)
.D'autres ont mentionné la
relevel
commande qui est la meilleure solution si vous souhaitez changer le niveau de base pour toutes les analyses sur vos données (ou êtes prêt à vivre avec la modification des données).Si vous ne souhaitez pas modifier les données (il s'agit d'un changement unique, mais à l'avenir, vous souhaitez à nouveau le comportement par défaut), vous pouvez utiliser une combinaison de la fonction
C
(notez en majuscules) pour définir les contrastes et lacontr.treatments
fonction avec l'argument de base pour choisir le niveau que vous voulez être la ligne de base.Par exemple:
la source
La
relevel()
commande est une méthode abrégée pour votre question. Ce qu'il fait, c'est réorganiser le facteur afin que le niveau de référence soit le premier. Par conséquent, réorganiser vos niveaux de facteur 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...Je préfère cette méthode car il est plus facile pour moi de voir dans mon code non seulement quelle était la référence mais aussi la position des autres valeurs (plutôt que d'avoir à regarder les résultats pour cela).
REMARQUE: 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.la source
Je sais que c'est une vieille question, mais j'ai eu un problème similaire et j'ai trouvé que:
fait exactement ce que vous avez demandé.
la source
as.factor()
si nécessaire, par exemple en utilisant...+relevel(as.factor(mycol), ref = "myref")+...
Vous pouvez également baliser manuellement la colonne avec un
contrasts
attribut, qui semble être respecté par les fonctions de régression:la source
Pour ceux qui recherchent une version dplyr / tidyverse. S'appuyant sur la solution Gavin Simpson:
la source
relevel()
ouforcats::fct_relevel()
relevel
ne fonctionne qu'avec des facteurs.fct_relevel
ne fonctionne qu'avec des facteurs. Il n'y a aucune différence entre les fonctions sauf le nom, AFAIK. Dire "Si la variable est un facteur que vous pouvez également utiliserfct_relevel
" implique que si la variable n'est pas un facteur, vous pouvez utiliserrelevel
, mais ce n'est pas vrai.