¿Cómo puedo decirle a R que use un cierto nivel como referencia si uso variables explicativas binarias en una regresión?
Solo está usando algún nivel por defecto.
lm(x ~ y + as.factor(b))
con b {0, 1, 2, 3, 4}
. Digamos que quiero usar 3 en lugar del cero que usa R.
r
regression
linear-regression
categorical-data
dummy-variable
Matt Bannert
fuente
fuente
b
puede especificar el orden de los niveles usandofactor(b, levels = c(3,1,2,4,5))
. Sinlm()
embargo, haga esto en un paso de procesamiento de datos fuera de la llamada. Mi respuesta a continuación usa larelevel()
función para que pueda crear un factor y luego cambiar el nivel de referencia para que se adapte a sus necesidades.Respuestas:
Ver la
relevel()
función. Aquí hay un ejemplo:Ahora modifique el factor
b
inDF
mediante el uso de larelevel()
función:Los modelos han estimado diferentes niveles de referencia.
fuente
within
, perodf$bR = relevel(df$b, ref=3)
.Otros han mencionado el
relevel
comando que es la mejor solución si desea cambiar el nivel base para todos los análisis de sus datos (o está dispuesto a vivir con el cambio de datos).Si no desea cambiar los datos (este es un cambio único, pero en el futuro desea el comportamiento predeterminado nuevamente), entonces puede usar una combinación de la función
C
(nota en mayúsculas) para establecer contrastes y lacontr.treatments
función con el argumento base para elegir qué nivel desea que sea la línea de base.Por ejemplo:
fuente
El
relevel()
comando es un método abreviado para su pregunta. Lo que hace es reordenar el factor para que el nivel de referencia sea el primero. Por lo tanto, reordenar los niveles de los factores también tendrá el mismo efecto pero le dará más control. Quizás quisieras tener niveles 3,4,0,1,2. En ese caso...Prefiero este método porque es más fácil para mí ver en mi código no solo cuál era la referencia, sino también la posición de los otros valores (en lugar de tener que mirar los resultados para eso).
NOTA: NO lo convierta en un factor ordenado. Un factor con un orden específico y un factor ordenado no son lo mismo.
lm()
puede comenzar a pensar que desea contrastes polinomiales si lo hace.fuente
Sé que esta es una pregunta antigua, pero tuve un problema similar y descubrí que:
hace exactamente lo que pediste.
fuente
as.factor()
si es necesario, por ejemplo, usando...+relevel(as.factor(mycol), ref = "myref")+...
También puede etiquetar manualmente la columna con un
contrasts
atributo, que parece ser respetado por las funciones de regresión:fuente
Para aquellos que buscan una versión dplyr / tidyverse. Basándose en la solución de Gavin Simpson:
fuente
relevel()
oforcats::fct_relevel()
relevel
solo funciona con factores.fct_relevel
solo funciona con factores. No hay ninguna diferencia entre las funciones excepto el nombre, AFAIK. Decir "Si la variable es un factor que también puedes usarfct_relevel
" implica que si la variable no es un factor que podrías usarrelevel
, pero eso no es cierto.