Comment implémenter une variable fictive à l'aide de n-1 variables?

9

Si j'ai une variable à 4 niveaux, en théorie, je dois utiliser 3 variables fictives. En pratique, comment cela se fait-il réellement? Dois-je utiliser 0-3, dois-je utiliser 1-3 et laisser les 4 vides? Aucune suggestion?

REMARQUE: je vais travailler dans R.

MISE À JOUR: Que se passerait-il si j'utilisais juste une colonne qui utilise 1-4 correspondant à AD? Est-ce que cela fonctionnera ou introduira des problèmes?

screechOwl
la source
3
Je pense que cette page de UCLA ATS l' explique assez bien.
caracal
4
Juste pour être clair, notez que le codage de cette variable sous forme d'entiers 0-3 ou 1-4 ou 1-3 n'est pas un codage fictif et n'aura pas le même effet que trois variables fictives. Cependant, un tel codage incorrect volonté travail dans les formules de régression et de logiciels et il y aura être sortie plausible: juste ne correspondront pas au modèle prévu. (NB: cela répond à la récente mise à jour de la question. )
whuber

Réponses:

11

En pratique, on laisse généralement son logiciel de choix gérer la création et la manipulation des variables factices. Il existe plusieurs façons de le gérer; voici plusieurs possibilités communes pour un ensemble de données avec quatre observations, une à chaque niveau de A, B, C et D. Ce sont des paramétrisations différentes; ils donnent exactement le même ajustement au modèle, mais avec des interprétations différentes des paramètres. On peut facilement se convertir de l'un à l'autre en utilisant l'algèbre de base; notez qu'ils sont tous des combinaisons linéaires les uns des autres; en fait, toute combinaison linéaire peut être utilisée.

Utilisez les différences par rapport au premier niveau (par défaut dans R):

A 0 0 0
B 1 0 0
C 0 1 0
D 0 0 1

Utilisez les différences par rapport au dernier niveau (par défaut dans SAS):

A 1 0 0
B 0 1 0
C 0 0 1
D 0 0 0

Utilisez des contrastes «somme»:

A    1    0    0
B    0    1    0
C    0    0    1
D   -1   -1   -1

Utilisez les contrastes "helmert":

A   -1   -1   -1
B    1   -1   -1
C    0    2   -1
D    0    0    3
Aaron a laissé Stack Overflow
la source
1
Je dirais, pour des raisons de pureté, que les variables factices , au sens strict, ne sont que le 1er et le 2e de vos exemples. Les variables fictives sont également appelées variables de contraste des indicateurs . Helmert , l' écart et d'autres types alternatifs de variables de contraste ne devraient pas être appelés factices , pour moi.
ttnphns
1
@ttnphns Je conviens que les contrastes Helmert ne constituent pas un codage factice d'un point de vue technique, mais je pense qu'il est tout à fait raisonnable de les inclure ici néanmoins. Je ne peux pas dire si vous le signalez par souci de clarté ou si vous suggérez que la réponse soit modifiée. @ Aaron +1, cette réponse serait encore meilleure si vous expliquiez brièvement en quoi l'interprétation de ces différents schémas de codage différerait.
gung - Rétablir Monica
7

Supposons que vos niveaux de variable soient A, B, C et D. Si vous avez un terme constant dans la régression, vous devez utiliser trois variables fictives, sinon, vous devez avoir les quatre.

Il existe de nombreuses façons mathématiquement équivalentes d'implémenter les variables factices. Si vous avez un terme constant dans la régression, une façon consiste à choisir l'un des niveaux comme niveau "de base" et à le comparer aux trois autres. Disons, pour être concret, que le niveau de base est A. Alors votre première variable fictive prend la valeur 1 chaque fois que le niveau est B et 0 sinon; le second prend la valeur 1 chaque fois que le niveau est C et 0 sinon, et le troisième prend la valeur 1 chaque fois que le niveau est D et 0 sinon. Étant donné que votre terme constant est toujours égal à 1, le coefficient estimé de la première variable muette sera l'estimation de la différence entre le niveau B et A, et de même pour les autres variables muettes.

Si vous n'avez pas de terme constant, vous pouvez simplement utiliser quatre variables muettes, construites comme dans l'exemple précédent, en ajoutant simplement une pour le niveau A.

jbowman
la source
Belle note sur l'importance d'avoir un terme constant dans la régression.
Aaron a quitté Stack Overflow
5

Dans R, définissez la variable comme facteur et il l'implémentera pour vous:

x <- as.factor(sample(LETTERS[1:4], 20, replace = TRUE))
y <- rnorm(20)
lm (y ~ x)

qui revient

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)           xB           xC           xD  
     1.0236      -0.6462      -0.9466      -0.4234  

La documentation de «lm», «factor» et «formula» dans R remplit certains détails.

gris
la source
1
+1 Ceci est un bon complément aux réponses déjà listées. Nous pouvons également noter que si vous avez déjà une variable avec des noms de groupe (tels que AD), cela peut être fait dans l'appel de fonction d'analyse sans étape supplémentaire: lm(y ~ as.factor(x))
gung - Reinstate Monica
La principale raison pour laquelle j'envisage d'utiliser des variables factices est que je travaille avec un grand ensemble de données avec de nombreux niveaux de facteurs (> 32) et certains packages dans R (à savoir randomforest) ne peuvent pas gérer les facteurs avec de nombreux niveaux, donc j'essayais pour voir si le mannequin était une solution.
screechOwl
1
Vous pouvez construire la matrice de conception de régression en utilisant 'model.matrix': model.matrix (y ~ x) (x est toujours un facteur) vous donnera une matrice avec les variables factices. Je ne suis pas familier avec le package randomforest, mais je soupçonne que vous pouvez donner à toutes les fonctions une matrice de conception explicite que vous obtenez à partir de model.matrix, et model.matrix semble fonctionner avec de nombreux (c'est-à-dire des centaines) de niveaux.
Gray
ps: vous souhaiterez peut-être modifier la question pour indiquer clairement que vous vous souciez des solutions qui fonctionnent avec de nombreux niveaux. La question demande environ 4.
Gray
4

whuber vous a dit dans les commentaires que coder un codage 0-3 ou 1-4 au lieu de créer des variables factices n'est pas ce que vous voulez. J'essaie - j'espère expliquer ce que vous feriez avec ce modèle et pourquoi il est incorrect.

Si vous codez une variable X de telle sorte que si A alors X = 1, si B alors X = 2, si C alors X = 3, si D alors X = 4 alors quand vous faites la régression, vous n'obtiendrez qu'un seul paramètre. Disons qu'il a fini par être que le paramètre estimé associé à X était 2. Cela vous dirait que la différence attendue entre la moyenne de B et la moyenne de A est 2. Cela vous indique également que la différence attendue entre la moyenne de C et la moyenne de B est 2. Certains pour D et C. Vous forceriez les différences dans les moyennes de ces groupes à suivre ce modèle très strict. Ce paramètre vous indique exactement comment tous les moyens de votre groupe sont liés les uns aux autres.

Donc, si vous avez fait ce type de codage, vous devez supposer que non seulement vous avez obtenu l'ordre correct (car dans ce cas, si vous vous attendez à une augmentation de A à B, vous devez vous attendre à une augmentation de B à C et de C à D) mais vous devez également supposer que cette différence est la même!

Si au lieu de cela vous faites le codage factice qui a été suggéré, vous autorisez chaque groupe à avoir sa propre moyenne - aucune restriction. Ce modèle est beaucoup plus sensé et répond aux questions que vous souhaitez.

Dason
la source