Como implementar uma variável dummy usando variáveis ​​n-1?

9

Se eu tenho uma variável com 4 níveis, em teoria eu preciso usar 3 variáveis ​​fictícias. Na prática, como isso é realmente realizado? Uso 0-3, uso 1-3 e deixo o 4 em branco? Alguma sugestão?

NOTA: Eu vou trabalhar na R.

ATUALIZAÇÃO: O que aconteceria se eu apenas usasse uma coluna que use 1-4 correspondente ao AD? Isso funcionará ou introduzirá problemas?

Coruja
fonte
3
Penso que esta página da UCLA ATS explica muito bem.
caracal
4
Só para esclarecer, observe que codificar essa variável como números inteiros 0-3 ou 1-4 ou 1-3 não é uma codificação fictícia e não terá o mesmo efeito que três variáveis ​​fictícias. No entanto, uma tal codificação incorreta vontade de trabalho em fórmulas de regressão e software e não vai ser a saída plausível: ele só não vai corresponder ao modelo pretendido. (NB: isso responde à atualização recente da pergunta. )
whuber

Respostas:

11

Na prática, geralmente se permite que o software de sua escolha lide com a criação e manipulação de variáveis ​​fictícias. Existem várias maneiras de lidar com isso; aqui estão várias possibilidades comuns para um conjunto de dados com quatro observações, uma em cada nível de A, B, C e D. Essas são parametrizações diferentes; eles resultam exatamente no mesmo modelo, mas com interpretações diferentes para os parâmetros. Pode-se facilmente converter de um para outro usando álgebra básica; note que todas são combinações lineares uma da outra; de fato, qualquer combinação linear pode ser usada.

Use diferenças do primeiro nível (padrão em R):

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

Use diferenças do último nível (padrão no SAS):

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

Use contrastes de "soma":

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

Use os contrastes "helmert":

A   -1   -1   -1
B    1   -1   -1
C    0    2   -1
D    0    0    3
Aaron deixou Stack Overflow
fonte
11
Eu diria que, por uma questão de pureza, que variáveis fictícias , no sentido estrito, são apenas o 1º e o 2º exemplos. Variáveis ​​dummy também são conhecidas como variáveis ​​de contraste do indicador . Helmert , desvio e outros tipos alternativos de variáveis ​​de contraste não devem ser chamados de fictícios , para mim.
ttnphns
11
@ttnphns Concordo que os contrastes de Helmert não constituem uma codificação fictícia do ponto de vista técnico, mas acho perfeitamente razoável que sejam incluídos aqui. Não sei dizer se você está apontando isso por uma questão de clareza ou sugerindo que a resposta seja alterada. @ Aaron +1, essa resposta seria ainda melhor se você explicasse brevemente como a interpretação desses diferentes esquemas de codificação seria diferente.
gung - Restabelece Monica
7

Vamos supor que seus níveis de variáveis ​​sejam A, B, C e D. Se você tem um termo constante na regressão, precisa usar três variáveis ​​fictícias, caso contrário, precisa ter todas as quatro.

Existem muitas maneiras matematicamente equivalentes de implementar as variáveis ​​fictícias. Se você tem um termo constante na regressão, uma maneira é escolher um dos níveis como o nível "linha de base" e comparar os outros três. Digamos, por concretude, que o nível da linha de base é A. Então, sua primeira variável dummy assume o valor 1 sempre que o nível for B e 0; o segundo assume o valor 1 sempre que o nível for C e 0, e o terceiro assume o valor 1 sempre que o nível for D e 0. Como o termo constante é igual a 1 o tempo todo, o coeficiente estimado da primeira variável dummy será a estimativa da diferença entre os níveis B e A e da mesma forma para as outras variáveis ​​dummy.

Se você não tiver um termo constante, poderá usar apenas quatro variáveis ​​fictícias, construídas como no exemplo anterior, apenas adicionando uma para o nível A.

jbowman
fonte
Boa observação sobre como é importante ter um termo constante na regressão.
Aaron deixou o Stack Overflow
5

Em R, defina a variável como um fator e ela será implementada para você:

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

que retorna

Call:
lm(formula = y ~ x)

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

A documentação para 'lm', 'fator' e 'fórmula' em R preenche alguns dos detalhes.

cinzento
fonte
11
+1 Este é um ótimo complemento para as respostas já listadas. Também podemos observar que, se você já possui uma variável com nomes de grupos (como AD), isso pode ser feito na chamada da função de análise sem uma etapa extra: lm(y ~ as.factor(x))
gung - Reinstate Monica
A principal razão pela qual estou usando variáveis ​​fictícias é que estou trabalhando com um grande conjunto de dados com muitos níveis de fator (> 32) e alguns pacotes no R (ou seja, randomforest) não conseguem lidar com fatores com muitos níveis, então estava tentando para ver se os manequins eram uma solução alternativa.
screechowl
11
Você pode construir a matriz de design de regressão usando 'model.matrix': model.matrix (y ~ x) (x ainda é um fator) fornecerá uma matriz com as variáveis ​​dummy. Não estou familiarizado com o pacote randomforest, mas suspeito que você pode dar a qualquer função uma matriz de design explícita que você obtém do model.matrix e model.matrix parece funcionar com muitos (ou seja, centenas) de níveis.
Grey
ps: convém editar a pergunta para deixar claro que você se preocupa com soluções que funcionam com vários níveis. A pergunta é sobre 4.
Grey
4

O whuber disse nos comentários que a codificação de 0-3 ou 1-4 em vez de criar variáveis ​​fictícias não é o que você deseja. É uma tentativa - espero explicar o que você faria com esse modelo e por que ele está errado.

Se você codificar uma variável X tal que, se A então X = 1, se B, então X = 2, se C, então X = 3, se D, então X = 4, quando você fizer a regressão, obterá apenas um parâmetro. Digamos que o parâmetro estimado associado a X seja 2. Isso indica que a diferença esperada entre a média de B e a média de A é 2. Também indica que a diferença esperada entre a média de C e a média de B é 2. Algumas para D e C. Você estaria forçando as diferenças nos meios para esses grupos seguirem esse padrão muito estrito. Esse parâmetro informa exatamente como todos os meios do seu grupo se relacionam.

Portanto, se você fez esse tipo de codificação, seria necessário supor que não apenas você conseguiu a ordem correta (porque, neste caso, se você espera um aumento de A para B, precisará de um aumento de B para C e de C para D), mas você também precisa assumir que essa diferença é a mesma!

Se, em vez disso, você fizer a codificação fictícia sugerida, estará permitindo que cada grupo tenha sua própria média - sem restrições. Este modelo é muito mais sensato e responde às perguntas que você deseja.

Dason
fonte