Como posso dizer a R para usar um determinado nível como referência se eu usar variáveis explicativas binárias em uma regressão?
Ele está apenas usando algum nível por padrão.
lm(x ~ y + as.factor(b))
com b {0, 1, 2, 3, 4}
. Digamos que eu queira usar 3 em vez do zero que é usado por R.
r
regression
linear-regression
categorical-data
dummy-variable
Matt Bannert
fonte
fonte
b
você pode especificar a ordem dos níveis usandofactor(b, levels = c(3,1,2,4,5))
. Nolm()
entanto, faça isso em uma etapa de processamento de dados fora da chamada. Minha resposta abaixo usa arelevel()
função para que você possa criar um fator e, em seguida, mudar o nível de referência para se adequar conforme necessário.Respostas:
Veja a
relevel()
função. Aqui está um exemplo:Agora altere o fator
b
emDF
pelo uso darelevel()
função:Os modelos estimaram diferentes níveis de referência.
fonte
within
, masdf$bR = relevel(df$b, ref=3)
.Outros mencionaram o
relevel
comando que é a melhor solução se você deseja alterar o nível de base para todas as análises em seus dados (ou está disposto a conviver com a alteração dos dados).Se você não quiser alterar os dados (esta é uma alteração única, mas no futuro você deseja o comportamento padrão novamente), então você pode usar uma combinação da função
C
(note maiúsculas) para definir contrastes e acontr.treatments
função com o argumento base para escolher qual nível você deseja ser a linha de base.Por exemplo:
fonte
O
relevel()
comando é um método abreviado para sua pergunta. O que ele faz é reordenar o fator de modo que seja o que for o nível de referência, primeiro. Portanto, reorganizar seus níveis de fator também terá o mesmo efeito, mas oferece mais controle. Talvez você queira ter níveis 3,4,0,1,2. Nesse caso...Prefiro esse método porque é mais fácil para mim ver em meu código não apenas qual era a referência, mas também a posição dos outros valores (em vez de ter que olhar os resultados para isso).
NOTA: NÃO faça disso um fator ordenado. Um fator com uma ordem especificada e um fator ordenado não são a mesma coisa.
lm()
pode começar a pensar que você deseja contrastes polinomiais se fizer isso.fonte
Eu sei que esta é uma pergunta antiga, mas tive um problema semelhante e descobri que:
faz exatamente o que você pediu.
fonte
as.factor()
se necessário, por exemplo, usando...+relevel(as.factor(mycol), ref = "myref")+...
Você também pode marcar manualmente a coluna com um
contrasts
atributo, que parece ser respeitado pelas funções de regressão:fonte
Para quem procura uma versão dplyr / tidyverse. Com base na solução de Gavin Simpson:
fonte
relevel()
ouforcats::fct_relevel()
relevel
só funciona com fatores.fct_relevel
só funciona com fatores. Não há nenhuma diferença entre as funções, exceto o nome, AFAIK. Dizer "Se a variável é um fator, você também pode usarfct_relevel
" implica que, se a variável não for um fator, você pode usarrelevel
, mas isso não é verdade.