regresión - regresion lineal simple rpubs
¿Cómo forzar a R a usar un nivel de factor específico como referencia en una regresión? (5)
¿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.
El relevel()
es un método abreviado para su pregunta. Lo que hace es reordenar el factor para que sea lo que sea el nivel de referencia primero. Por lo tanto, reordenar los niveles de sus factores también tendrá el mismo efecto pero le dará más control. Quizás quisiste tener niveles 3,4,0,1,2. En ese caso...
bFactor <- factor(b, levels = c(3,4,0,1,2))
Prefiero este método porque es más fácil para mí ver en mi código no solo cuál fue 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 quieres contrastes polinomiales si haces eso.
Otros han mencionado el comando de relevel, que es la mejor solución si desea cambiar el nivel básico para todos los análisis de sus datos (o está dispuesto a vivir cambiando los datos).
Si no desea cambiar los datos (esto es un cambio de una vez, pero en el futuro desea el comportamiento predeterminado de nuevo), entonces puede usar una combinación de la función C (nota en mayúscula) para establecer contrastes y el contr. .tratamientos funcionan con el argumento base para elegir qué nivel quieres que sea la línea base. Por ejemplo:
lm( Sepal.Width ~ C(Species,contr.treatment(3, base=2)), data=iris )
Sé que esta es una pregunta antigua, pero tuve un problema similar y descubrí que:
lm(x ~ y + relevel(b, ref = "3"))
hace exactamente lo que pediste
También puede etiquetar manualmente la columna con un atributo de contrasts
, que parece ser respetado por las funciones de regresión:
contrasts(df$factorcol) <- contr.treatment(levels(df$factorcol),
base=which(levels(df$factorcol) == ''RefLevel''))
Ver la función relevel()
. Aquí hay un ejemplo:
set.seed(123)
x <- rnorm(100)
DF <- data.frame(x = x,
y = 4 + (1.5*x) + rnorm(100, sd = 2),
b = gl(5, 20))
head(DF)
str(DF)
m1 <- lm(y ~ x + b, data = DF)
summary(m1)
Ahora modifique el factor b
en DF
mediante el uso de la función relevel()
:
DF <- within(DF, b <- relevel(b, ref = 3))
m2 <- lm(y ~ x + b, data = DF)
summary(m2)
Los modelos han estimado diferentes niveles de referencia.
> coef(m1)
(Intercept) x b2 b3 b4 b5
3.2903239 1.4358520 0.6296896 0.3698343 1.0357633 0.4666219
> coef(m2)
(Intercept) x b1 b2 b4 b5
3.66015826 1.43585196 -0.36983433 0.25985529 0.66592898 0.09678759