Análisis discriminante lineal en R (paso a paso)

Puedes opinar sobre este contenido:
  • 0
  • 0
  • 0
  • 0

El análisis discriminante lineal es un método que puede utilizar cuando tiene un conjunto de variables predictoras y le gustaría clasificar una variable de respuesta en dos o más clases.

Este tutorial proporciona un ejemplo paso a paso de cómo realizar un análisis discriminante lineal en R.

Paso 1: cargue las bibliotecas necesarias

Primero, cargaremos las bibliotecas necesarias para este ejemplo:

biblioteca (MASS)
 biblioteca (ggplot2)

Paso 2: cargue los datos

Para este ejemplo, usaremos el conjunto de datos de iris incorporado en R. El siguiente código muestra cómo cargar y ver este conjunto de datos:

# adjuntar el conjunto de datos de iris para facilitar el trabajo
adjuntar (iris)

#ver la estructura del conjunto de datos
 str (iris)

'data.frame': 150 obs. de 5 variables:
 $ Sépalo Longitud: núm 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Ancho.sepal: núm 3,5 3 3,2 3,1 3,6 3,9 3,4 3,4 2,9 3,1 ...
 $ Pétalo.Longitud: núm 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Ancho.Pétalo: num 0,2 0,2 ​​0,2 ​​0,2 ​​0,2 ​​0,4 0,3 0,2 0,2 ​​0,1 ...
 $ Especie: Factor con 3 niveles "setosa", "versicolor", ..: 1 1 1 1 1 1 1 ...

Podemos ver que el conjunto de datos contiene 5 variables y 150 observaciones en total.

Para este ejemplo, crearemos un modelo de análisis discriminante lineal para clasificar a qué especie pertenece una flor determinada.

Usaremos las siguientes variables predictoras en el modelo:

  • Longitud de sépalo
  • Ancho de sépalo
  • Pétalo Longitud
  • Pétalo Ancho

Y los usaremos para predecir la variable de respuesta Species , que toma las siguientes tres clases potenciales:

  • setosa
  • versicolor
  • virginica

Paso 3: escale los datos

Uno de los supuestos clave del análisis discriminante lineal es que cada una de las variables predictoras tiene la misma varianza. Una manera fácil de asegurar que se cumpla este supuesto es escalar cada variable de manera que tenga una media de 0 y una desviación estándar de 1.

Podemos hacerlo rápidamente en R usando la función scale () :

#escala cada variable de predicción (es decir, las primeras 4 columnas)
 iris [1: 4] <- escala (iris [1: 4])

Podemos usar la función apply () para verificar que cada variable predictora ahora tenga una media de 0 y una desviación estándar de 1:

# encontrar la media de cada variable de predicción
 aplicada (iris [1: 4], 2, media)

 Sepal.Longitud Sepal.Ancho Pétalo.Longitud Pétalo.Ancho 
-4.484318e-16 2.034094e-16 -2.895326e-17 -3.663049e-17 

# encontrar la desviación estándar de cada variable de predicción
 aplicada (iris [1: 4], 2, sd)

Sepal.Longitud Sepal.Ancho Pétalo.Longitud Pétalo.Ancho 
           1 1 1 1

Paso 4: crear muestras de entrenamiento y prueba

A continuación, dividiremos el conjunto de datos en un conjunto de entrenamiento para entrenar el modelo y un conjunto de pruebas para probar el modelo:

#Haga que este ejemplo sea reproducible
 set.seed (1)

#Utilice el 70% del conjunto de datos como conjunto de entrenamiento y el 30% restante como conjunto de prueba
 muestra <- muestra (c ( TRUE , FALSE ), nrow (iris), replace = TRUE , prob = c (0.7,0.3))
entrenar <- iris [muestra,]
prueba <- iris [! muestra,] 

Paso 5: ajuste el modelo LDA

A continuación, usaremos la función lda () del paquete MASS para ajustar el modelo LDA a nuestros datos:

#fit LDA model
 model <- lda (Species ~., data = train)

#ver salida del modelo
modelo

Llamada:
lda (Especie ~., datos = tren)

Probabilidades previas de grupos:
    setosa versicolor virginica 
 0,3207547 0,3207547 0,3584906 

Grupo significa:
           Sepal.Longitud Sepal.Ancho Pétalo.Longitud Pétalo.Ancho
setosa -1.0397484 0.8131654 -1.2891006 -1.2570316
versicolor 0,1820921 -0,6038909 0,3403524 0,2208153
virginica 0.9582674 -0.1919146 1.0389776 1.1229172

Coeficientes de discriminantes lineales:
                    LD1 LD2
Sépalo Longitud 0.7922820 0.5294210
Sépalo Ancho 0.5710586 0.7130743
Pétalo Longitud -4.0762061 -2.7305131
Ancho de pétalo -2.0602181 2.6326229

Proporción de traza:
   LD1 LD2 
0,9921 0,0079 

A continuación, se explica cómo interpretar la salida del modelo:

Probabilidades previas de grupo: representan las proporciones de cada especie en el conjunto de entrenamiento. Por ejemplo, el 35,8% de todas las observaciones en el conjunto de entrenamiento fueron de la especie virginica .

Medias de grupo: muestran los valores medios de cada variable de predicción de cada especie.

Coeficientes de discriminantes lineales: estos muestran la combinación lineal de variables predictoras que se utilizan para formar la regla de decisión del modelo LDA. Por ejemplo:

  • LD1: .792 * Sepal.Longitud + .571 * Sepal.Width – 4.076 * Petal.Length – 2.06 * Petal.Width
  • LD2: .529 * Sépalo.Longitud + .713 * Sépalo.Ancho – 2.731 * Pétalo.Longitud + 2.63 * Pétalo.Ancho

Proporción de traza: Muestra el porcentaje de separación logrado por cada función discriminante lineal.

Paso 6: use el modelo para hacer predicciones

Una vez que hemos ajustado el modelo usando nuestros datos de entrenamiento, podemos usarlo para hacer predicciones sobre nuestros datos de prueba:

#utilizar el modelo LDA para hacer predicciones sobre los datos de prueba
 predichos <- predecir (modelo, prueba)

nombres (predichos)

[1] "clase" "posterior" "x"   

Esto devuelve una lista con tres variables:

  • clase: la clase predicha
  • posterior: La probabilidad posterior de que una observación pertenezca a cada clase.
  • x: Los discriminantes lineales

Podemos ver rápidamente cada uno de estos resultados para las primeras seis observaciones en nuestro conjunto de datos de prueba:

#ver la clase predicha para las primeras seis observaciones en la cabeza del conjunto de prueba
 ($ class predicha)

[1] setosa setosa setosa setosa setosa setosa
Niveles: setosa versicolor virginica

#ver probabilidades posteriores para las primeras seis observaciones en el conjunto de prueba
cabeza (predicho $ posterior)

   setosa versicolor virginica
4 1 2.425563e-17 1.341984e-35
6 1 1.400976e-21 4.482684e-40
7 1 3.345770e-19 1.511748e-37
15 1 6.389105e-31 7.361660e-53
17 1 1.193282e-25 2.238696e-45
18 1 6.445594e-22 4.894053e-41

#ver discriminantes lineales para las primeras seis observaciones en la cabeza del conjunto de prueba
 (predicho $ x)

         LD1 LD2
4 7.150360 -0.7177382
6 7,961538 1,4839408
7 7.504033 0.2731178
15 10.170378 1.9859027
17 8.885168 2.1026494
18 8.113443 0.7563902

Podemos usar el siguiente código para ver para qué porcentaje de observaciones el modelo LDA predijo correctamente la especie:

# encontrar la precisión de la media del modelo
 (predicha $ class == test $ Species)

[1] 1

Resulta que el modelo predijo correctamente las especies para el 100% de las observaciones en nuestro conjunto de datos de prueba.

En el mundo real, un modelo LDA rara vez predecirá correctamente el resultado de cada clase, pero este conjunto de datos de iris simplemente está construido de una manera que los algoritmos de aprendizaje automático tienden a funcionar muy bien en él.

Paso 7: Visualice los resultados

Por último, podemos crear una gráfica LDA para ver los discriminantes lineales del modelo y visualizar qué tan bien separó las tres especies diferentes en nuestro conjunto de datos:

# definir datos para trazar
 lda_plot <- cbind (entrenar, predecir (modelo) $ x)

#create plot
 ggplot (lda_plot, aes (LD1, LD2)) +
  geom_point ( aes (color = Species))

Análisis discriminante lineal en R

Puede encontrar el código R completo utilizado en este tutorial aquí .

  • https://r-project.org
  • https://www.python.org/
  • https://www.stata.com/

Redactor del artículo

  • Luis Benites
    Director de Statologos.com

    Tengo una Maestría en Ciencias en Estadística Aplicada y he trabajado en algoritmos de aprendizaje automático para empresas profesionales tanto en el sector de la salud como en el comercio minorista.

    Ver todas las entradas

¿Te hemos ayudado?

Ayudanos ahora tú, dejanos un comentario de agradecimiento, nos ayuda a motivarnos y si te es viable puedes hacer una donación:

La ayuda no cuesta nada

Por otro lado te rogamos que compartas nuestro sitio con tus amigos, compañeros de clase y colegas, la educación de calidad y gratuita debe ser difundida, recuerdalo:

Deja un comentario

A menudo, es posible que desee reemplazar los valores faltantes en las columnas de un marco de datos en R…
statologos comunidad-2

Compartimos información EXCLUSIVA y GRATUITA solo para suscriptores (cursos privados, programas, consejos y mucho más)

You have Successfully Subscribed!