Regresión con variables categóricas en programación R

La regresión es un proceso de varios pasos para estimar las relaciones entre una variable dependiente y una o más variables independientes, también conocidas como predictores o covariables. El análisis de regresión se usa principalmente para dos propósitos conceptualmente distintos: para la predicción y el pronóstico, donde su uso tiene una superposición sustancial con el campo del aprendizaje automático y, en segundo lugar, a veces se puede usar para inferir relaciones entre las variables independientes y dependientes.

Regresión con Variables Categóricas

Las variables categóricas son variables que pueden tomar uno de un número limitado y fijo de valores posibles, asignando cada individuo u otra unidad de observación a un grupo particular o categoría nominal sobre la base de alguna propiedad cualitativa. También se les conoce como factor o variables cualitativas. El tipo de análisis de regresión que mejor se adapta a las variables categóricas es la regresión logística. La regresión logística utiliza la estimación de máxima verosimilitud para estimar los parámetros. Deriva la relación entre un conjunto de variables (independientes) y una variable categórica (dependiente). Es mucho más fácil implementar un modelo de regresión usando el lenguaje Rdebido a sus excelentes bibliotecas en su interior. Ahora, intentemos configurar un modelo de regresión logística con variables categóricas para una mejor comprensión.

Ejemplo: El objetivo es predecir si un candidato será admitido en una universidad con variables como gre, gpa y rank. El script R se proporciona uno al lado del otro y se comenta para una mejor comprensión del usuario. Los datos están en formato .csv. Obtendremos el directorio de trabajo con la función getwd() y colocaremos conjuntos de datos binary.csv dentro de él para continuar. Descargue el archivo CSV aquí .

R

# preparing the dataset 
getwd() 
data <- read.csv("binary.csv" ) 
str(data)

Producción:

'data.frame':    400 obs. of  4 variables:
 $ admit: int  0 1 1 1 0 1 1 0 1 0 ...
 $ gre  : int  380 660 800 640 520 760 560 400 540 700 ...
 $ gpa  : num  3.61 3.67 4 3.19 2.93 3 2.98 3.08 3.39 3.92 ...
 $ rank : int  3 3 1 4 4 2 1 2 3 2 ...

Al observar la estructura de los conjuntos de datos, podemos observar que tiene 4 variables, donde admitir indica si un candidato será admitido o no (1 si es admitido y 0 si no es admitido) gre, gpa y rank dan la puntuación gre de los candidatos, su gpa en la universidad anterior y el rango de la universidad anterior, respectivamente. Usamos admitir como variable dependiente y gre, gpa y rango como variables independientes. Ahora, tenga en cuenta que admitir y clasificar son variables categóricas pero son de tipo numérico. Pero para usarlas como variables categóricas en nuestro modelo, usaremos la función as.factor() para convertirlas en variables factoriales.

R

# converting admit and rank
# columns into factor variables
data$admit = as.factor(data$admit)
data$rank = as.factor(data$rank)
  
# two-way table of factor
# variable
xtabs(~admit + rank, data = data)

Producción:

     rank
admit  1  2  3  4
    0 28 97 93 55
    1 33 54 28 12

Ahora divida los datos en un conjunto de entrenamiento y un conjunto de prueba. El conjunto de entrenamiento se utiliza para encontrar la relación entre las variables dependientes e independientes, mientras que el conjunto de prueba analiza el rendimiento del modelo. Utilizamos el 60% del conjunto de datos como conjunto de entrenamiento. La asignación de los datos al conjunto de entrenamiento y prueba se realiza mediante un muestreo aleatorio. Realizamos un muestreo aleatorio en R usando la función sample() . Use set.seed() para generar la misma muestra aleatoria cada vez y mantener la consistencia.

R

# Partitioning of data
set.seed(1234)
data1<-sample(2, nrow(data), 
                   replace = T, 
                 prob = c(0.6, 0.4))
train<-data[data1 == 1,]
test<-data[data1 == 2,]

Ahora construya un modelo de regresión logística para nuestros datos. La función glm() nos ayuda a establecer una red neuronal para nuestros datos. La función glm() que estamos usando aquí tiene la siguiente sintaxis.

Sintaxis:

glm(fórmula, familia = gaussiana, datos, pesos, subconjunto, na.action, start = NULL, etastart, mustart, offset,

      control = lista(…), modelo = VERDADERO, método = “glm.fit”, x = FALSO, y = VERDADERO, singular.ok = VERDADERO, contrastes = NULL, …)

Parámetro Descripción
fórmula una descripción simbólica del modelo a montar.
familia una descripción de la distribución de errores y la función de enlace que se utilizará en el modelo.
datos un marco de datos opcional.
pesos un vector opcional de ‘pesos anteriores’ para ser utilizado en el proceso de ajuste. Debe ser NULL o un vector numérico.
subconjunto un vector opcional que especifica un subconjunto de observaciones que se utilizará en el proceso de ajuste.
na.action una función que indica lo que debería suceder cuando los datos contienen NA.
comienzo valores iniciales para los parámetros en el predictor lineal.
etastart valores iniciales para el predictor lineal.
mustart valores iniciales para el vector de medias.
compensar esto se puede usar para especificar un componente conocido a priori que se incluirá en el predictor lineal durante el ajuste. 
control una lista de parámetros para controlar el proceso de ajuste.
modelo un valor lógico que indica si el marco del modelo debe incluirse como un componente del valor devuelto.
método el método a utilizar para ajustar el modelo.
x,y

 valores lógicos que indican si el vector de respuesta y la array del modelo utilizados en el proceso de ajuste deben devolverse como

 componentes del valor devuelto.

singular.ok lógico; si es FALSO, un ajuste singular es un error.
contrastes una lista opcional.
 argumentos que se utilizarán para formar el argumento de control predeterminado si no se proporciona directamente.

R

mymodel<-glm(admit~gre + gpa + rank, 
                        data = train, 
                        family = 'binomial')
summary(mymodel)

Producción:

Call:
glm(formula = admit ~ gre + gpa + rank, family = "binomial", 
    data = train)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.6576  -0.8724  -0.6184   1.0683   2.1035  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)   
(Intercept) -4.972329   1.518865  -3.274  0.00106 **
gre          0.001449   0.001405   1.031  0.30270   
gpa          1.233117   0.450550   2.737  0.00620 **
rank2       -0.784080   0.406376  -1.929  0.05368 . 
rank3       -1.203013   0.426614  -2.820  0.00480 **
rank4       -1.699652   0.536974  -3.165  0.00155 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 312.66  on 248  degrees of freedom
Residual deviance: 283.38  on 243  degrees of freedom
AIC: 295.38

Number of Fisher Scoring iterations: 4

Del resumen del modelo es evidente que gre no tiene un papel significativo en las predicciones, por lo que podemos eliminarlo de nuestro modelo y reescribirlo de la siguiente manera:

R

mymodel<-glm(admit~gpa + rank, 
                  data = train, 
                 family = 'binomial')

 Ahora, intentemos analizar nuestro modelo de regresión haciendo algunas predicciones.

R

# Prediction
p1<-predict(mymodel, train, 
            type = 'response')
head(p1)

Producción:

        1         7         8        10        12        13 
0.3013327 0.3784012 0.2414806 0.5116852 0.4610888 0.7211702 

R

head(train)

Producción:

   admit gre  gpa rank
1      0 380 3.61    3
7      1 560 2.98    1
8      0 400 3.08    2
10     0 700 3.92    2
12     0 440 3.22    1
13     1 760 4.00    1

Luego, redondeamos nuestros resultados creando una array de confusión para comparar el número de verdaderos/falsos positivos y negativos. Formaremos una array de confusión con datos de entrenamiento.

R

# confusion Matrix 
# $Misclassification error -Training data  
pre1<-ifelse(p1 > 0.5, 1, 0)
table<-table(Prediction = pre1, 
             Actual = train$admit) 
table

Producción:

          Actual
Prediction   0   1
         0 158  55
         1  11  25

El modelo genera 158 verdaderos negativos (0), 25 verdaderos positivos (1), mientras que hay 11 falsos negativos y 55 falsos positivos. Ahora, calculemos el error de clasificación errónea (para datos de entrenamiento) que {1 – error de clasificación}

R

1 - sum(diag(table)) / sum(table)

Producción:

[1] 0.2650602

El error de clasificación errónea resulta ser del 24,9%. En esto, podemos usar técnicas de regresión con variables categóricas a varios otros datos.

El análisis de regresión es un método muy eficiente y existen numerosos tipos de modelos de regresión que se pueden utilizar. Esta elección a menudo depende del tipo de datos que tenga para la variable dependiente y el tipo de modelo que proporciona el mejor ajuste, como la regresión logística, que es el más adecuado para las variables categóricas.

Publicación traducida automáticamente

Artículo escrito por misraaakash1998 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *