En este artículo, discutiremos cómo podemos corregir el error «los contrastes solo se pueden aplicar a factores con 2 o más niveles» en el lenguaje de programación R.
Los contrastes se pueden aplicar solo a factores con 2 o más niveles:
Es un error común producido por el compilador R. La forma completa de este error se muestra a continuación:
Error en `contrastes<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
los contrastes se pueden aplicar solo a factores con 2 o más niveles
Tal error es producido por el compilador R cuando tratamos de ajustar un modelo de regresión con la ayuda de la variable predictora que es un carácter o un factor y contiene solo un valor único.
Cuándo puede ocurrir este error:
R
# Create a data frame dataframe <- data.frame(parameter1=c(8, 1, 13, 24, 9), parameter2=as.factor(6), parameter3=c(17, 9, 18, 13, 12), parameter4=c(12, 21, 32, 4, 19)) # Print the dataframe dataframe
Producción:
Como puede ver en el código anterior, el parámetro 2 es un factor que contiene solo un valor único. Si tratamos de ajustar un modelo de regresión múltiple en el que el parámetro2 cumple el propósito de una variable predictora, el compilador produce el siguiente error:
Ejemplo:
Aquí, el compilador R produce este tipo de error porque el parámetro 2 contiene solo un valor único que es igual a 6. Dado que no existe ninguna variación en esta variable predictora, el compilador R no pudo ajustar un modelo de regresión de manera efectiva.
R
# Create a data frame dataframe <- data.frame(parameter1=c(8, 1, 13, 24, 9), parameter2=as.factor(6), parameter3=c(17, 9, 18, 13, 12), parameter4=c(12, 21, 32, 4, 19)) # Try to fit a multiple regression model model <- lm(parameter4 ~ parameter1 + parameter2 + parameter3, data=dataframe)
Producción:
Cómo arreglar este error:
Tenga en cuenta que podemos usar las funciones sapply() y lapply() juntas para contar el número de valores únicos presentes en cada una de las variables predictoras.
Ejemplo:
Aquí, usando la función lapply() podemos incluso imprimir los valores presentes en las variables predictoras individuales.
R
# Create a data frame dataframe <- data.frame(parameter1=c(8, 1, 13, 24, 9), parameter2=as.factor(6), parameter3=c(17, 9, 18, 13, 12), parameter4=c(12, 21, 32, 4, 19)) # Find the unique values for each variable sapply(lapply(dataframe, unique), length)
Producción:
Ejemplo:
Ahora, a partir del siguiente código, podemos ver que el parámetro 2 contiene solo un valor único. Por lo tanto, podemos corregir este error simplemente eliminando el parámetro 2 del modelo de regresión.
R
# Create a data frame dataframe <- data.frame(parameter1=c(8, 1, 13, 24, 9), parameter2=as.factor(6), parameter3=c(17, 9, 18, 13, 12), parameter4=c(12, 21, 32, 4, 19)) # Find the unique values for each variable lapply(dataframe[c('parameter1', 'parameter2', 'parameter3', 'parameter4')], unique)
Producción:
Ejemplo:
Por lo tanto, al eliminar el parámetro 2, el programa se compiló correctamente sin ningún error.
R
# Create a data frame dataframe <- data.frame(parameter1=c(8, 1, 13, 24, 9), parameter2=as.factor(6), parameter3=c(17, 9, 18, 13, 12), parameter4=c(12, 21, 32, 4, 19)) # Fit regression model using all the predictor variables # except parameter2 model <- lm(parameter4 ~ parameter1 + parameter3, data=dataframe) # Display model summary summary(model)
Producción: