es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Errores causados por la inclusión de valores NA en la regresión lineal.

Quiero hacer una regresión lineal, pero hay NA bajo una de las condiciones. Como puede ver, hay dos condiciones en mis datos, S: soltero y M: casado. x2 y x3 son efectos fijos y y son las variables dependientes. x3 no es aplicable para una condición soltera, por lo que los datos son todos NA. No quiero eliminar x3 ya que es una variable importante para la condición casada. Y recibo este error:

Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]]) :
los contrastes sólo se pueden aplicar a factores con 2 o más niveles.

Intenté reemplazar NA con “0”, pero no estoy seguro si es la mejor manera de hacerlo. ¿Alguien puede darme algunas sugerencias? ¿cómo debo escribir el código lm?

data <- data.frame(x1 = c("S", "S", "S", "M", "M", "M"), 
                   x2 = c(7, 7, 7, 1, 1, 2),
                   x3 = c(NA, NA, NA, 1, 1, 2),
                   y = c(4, 3, 2, 5, 5, 1))

lm(y~x1*x2*x3, data)

¿Alguien puede darme algo de ayuda, por favor?
(Esta también es la primera vez que publico, no estoy seguro si lo hice bien.)

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema con la ejecución del modelo de regresión lineal se debe a que x1 y x3 se están tratando como variables continuas cuando deberían ser categóricas. Para solucionar esto, puedes convertir x1 y x3 en factores utilizando la función factor(). Para x3, también puedes agregar un nivel para cuando no sea aplicable (ya que no es un factor con dos o más niveles, que es necesario para las comparaciones).

    Aquí hay un ejemplo de cómo puedes modificar tu código para abordar estos problemas:

    data <- data.frame(x1 = factor(c("S", "S", "S", "M", "M", "M")), 
                       x2 = c(7, 7, 7, 1, 1, 2),
                       x3 = factor(c(NA, NA, NA, 1, 1, 2), levels = c(1, 2), labels = c("No Aplicable", "Aplicable")),
                       y = c(4, 3, 2, 5, 5, 1))
    
    lm(y ~ x1 * x2 * x3, data)
    

    Esto debería permitirte ejecutar tu modelo de regresión lineal sin errores. En cuanto a reemplazar los NAs con “0”, esta puede no ser la mejor aproximación ya que puede sesgar los resultados del análisis. Por lo general, es mejor eliminar las observaciones con datos faltantes o imputar los valores faltantes utilizando métodos apropiados.

Comments are closed.