¿Cómo puedo decirle a R a el uso de un determinado nivel como referencia si puedo usar binaria de las variables explicativas en la regresión?

Se trata simplemente de usar 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 es utilizado por R.

  • Usted debe hacer el procesamiento de datos paso fuera de la modelo/fórmula de ajuste. A la hora de crear el factor de b puede especificar el orden de los niveles de uso de factor(b, levels = c(3,1,2,4,5)). Hacer esto en un procesamiento de datos paso fuera de la lm() llamada. Mi respuesta a continuación, utiliza la relevel() función, así que usted puede crear un factor y, a continuación, cambiar el nivel de referencia en torno a satisfacer, como se necesita.
  • Yo reformuló su pregunta. En realidad estás después de cambiar el nivel de referencia, no dejando uno fuera.
  • thx para la reformulación de mi pregunta. De hecho, relevel() era lo que yo estaba buscando. Thx por la respuesta detallada y el ejemplo, sin embargo. No estoy seguro si el de regresión lineal de la etiqueta es un poco engañosa, porque esto se aplica a todos los tipos de regresión utilizando ficticio las explicaciones…
InformationsquelleAutor Matt Bannert | 2010-10-06

5 Comentarios

  1. 131

    Ver el relevel() función. Aquí está 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 alterar el factor de b en DF por el uso de la relevel() función:

    DF <- within(DF, b <- relevel(b, ref = 3))
    m2 <- lm(y ~ x + b, data = DF)
    summary(m2)

    Los modelos se 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
    • A preseve la variable original, simplemente no usar la within, pero df$bR = relevel(df$b, ref=3).
  2. 33

    Otros han mencionado que el relevel comando que es la mejor solución si usted desea cambiar el nivel de base para el análisis de los datos (o están dispuestos a vivir con el cambio de los datos).

    Si no desea cambiar los datos (este es un tiempo de cambio, pero en el futuro desea que el comportamiento predeterminado de nuevo), entonces usted puede utilizar una combinación de la C (tenga en cuenta las mayúsculas) función para establecer contrastes y la contr.treatments función con la base de argumento para seleccionar el nivel que desea ser la línea de base.

    Por ejemplo:

    lm( Sepal.Width ~ C(Species,contr.treatment(3, base=2)), data=iris )
  3. 27

    La relevel() comando es un método taquigráfico a su pregunta. Lo que hace es reordenar el factor de modo que lo es la ref nivel es el primero. Por lo tanto, la reordenación de sus niveles de factor también tendrá el mismo efecto, pero te da más control. Tal vez quería 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 sólo lo que la referencia era sino la posición de los otros valores (en lugar de tener que mirar los resultados para que).

    NOTA: NO hacer un pedido factor. Un factor con un determinado orden y la orden del factor no son la misma cosa. lm() puede empezar a pensar desea polinomio contrasta si haces eso.

    • El polinomio de contrastes, no un polinomio de regresión.
    • Es allí una manera de establecer el nivel de referencia al mismo tiempo que se define el factor, en lugar de en una llamada posterior a relevel?
  4. 22

    Sé que esto es una vieja pregunta, pero yo tenía un problema similar y se encontró que:

    lm(x ~ y + relevel(b, ref = "3")) 

    hace exactamente lo que usted pidió.

    • Esta fue una gran ayuda! La única solución que incluye una forma de hacerlo dentro de la lm() comando que era exactamente lo que necesitaba. Gracias!
    • Esta es una forma muy flexible de trabajo con los factores. Me gusta el hecho de que lo puedo combinar con as.factor() si necesita, por ejemplo, mediante el uso de ...+relevel(as.factor(mycol), ref = "myref")+...
  5. 11

    También puede especificar manualmente la etiqueta de la columna con un contrasts atributo, que parece ser respetadas por las funciones de regresión:

    contrasts(df$factorcol) <- contr.treatment(levels(df$factorcol),
       base=which(levels(df$factorcol) == 'RefLevel'))

Dejar respuesta

Please enter your comment!
Please enter your name here