Análisis Discriminante
Inicialmente definimos los algoritmos de clasificación como una serie de mecanismos que son útiles cuando la respuesta al problema cae dentro de un conjunto finito de resultados posibles, algunos algoritmos de clasificación son: el Análisis Discriminantes y los K vecinos próximos, y los Arboles de Decisión.
Ahora bien, definimos lo que nos compete, los análisis discriminantes.
Análisis Discriminante
El Análisis Discriminante (AD), es una técnica que se utiliza para predecir la pertenencia a un grupo (variable dependiente) a partir de un conjunto de predictores (variables independientes). El objetivo del análisis discriminante es entender las diferencias de los grupos y predecir la verosimilitud de que una persona o un objeto pertenezcan a una clase o grupo basándose en los valores que toma en los predictores.
El modelo de análisis discriminante implica combinaciones lineales de la siguiente forma:
\(D=b_0+b_1x_1+b_2x_+b_3x_3+...+b_kx_k\)
A partir de lo cual tenemos que:
Los coeficientes, o pesos \((b_i)\), se calculan de manera que el grupo difiera tanto como sea posible en los valores de la función discriminante.
Con respecto a este tipo de análisis, existen dos enfoques en la clasificación discriminante, los cuales enumeraremos a continuación:
El basado en la obtención de funciones discriminantes de cálculo similar a las ecuaciones de regresión lineal múltiple.
Empleando técnicas de correlación canónica y de componentes principales, denominado análisis discriminante canónico.
Pero nos centraremos en el primer enfoque el análisis discriminante solo admite variables cuantitativas como regresores, por lo que si alguna de las variables independientes es categórica, hay que utilizar otros métodos alternativos de clasificación.
La mayor utilidad de una función discriminante radica en su capacidad para clasificar nuevos casos.
Recordemos, además, que en todos ellos el objetivo es crear una función discriminante que agrupe cada nuevo caso según una probabilidad:
Queremos clasificar diversos países en función de sus datos macroeconómicos: Países subdesarrollados, emergentes o desarrollados (grupos). Creamos la función discriminante de manera que podamos calcular la probabilidad de un país de pertenecer a uno u otro grupo.
Queremos realizar una campaña de marketing y nos interesa saber en qué grupos clasificar a los individuos: Así, podremos responder a ciertas preguntas como cuáles serían las características de un cliente ocasional.
Queremos conocer el nivel de riesgo (grupo) de determinados clientes respecto a la concesión de un crédito: Utilizaremos variables relativas a su renta, gastos mensuales, historial o tipo de trabajo. La función discriminante nos aporta información relevante sobre la solvencia.
Ahora, proponemos un ejemplo práctico para ver de manera más cercana el análisis discriminante y sus aplicaciones.
Primero, el análisis se va a realizar por medio de la función LDA (Lineal Discriminant Analisis) que está en el paquete MASS y demás paquetes necesaios para la visualización de los datos.
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:MASS':
##
## select
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
Continuamos cargando la base de datos que utilizaremos, en este caso será Iris que se puede encontrar en RPubs, disponible para analizar.
Con esta data se busca clasificar especies de flores basadas en 4 variables: Largo de los pétalos, ancho de los pétalos, largo de los sépalos y ancho de los sépalos.
Cargamos la data y visualizamos:
attach(iris)
str(iris)
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
data("iris")
summary(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
Como paso siguiente corrimos un código para visualizar de manera gráfica los datos con respecto a las 4 variables que queremos analizar:
a1 <- ggplot(data = iris, aes(x = Sepal.Length)) +
geom_density(aes(colour = Species)) + theme_bw()+
xlab("Longitud del Sépalo")+ ylab("Densidad")
a2 <- ggplot(data = iris, aes(x = Sepal.Width)) +
geom_density(aes(colour = Species)) + theme_bw()+
xlab("Ancho del Sépalo")+ ylab("Densidad")
a3 <- ggplot(data = iris, aes(x = Petal.Length)) +
geom_density(aes(colour = Species)) + theme_bw()+
xlab("Longitud Pétalo")+ ylab("Densidad")
a4 <- ggplot(data = iris, aes(x = Petal.Width)) +
geom_density(aes(colour = Species)) + theme_bw()+
xlab("Ancho Pétalo")+ ylab("Densidad")
ggarrange(a1, a2, a3, a4, common.legend = TRUE, legend = "bottom")
Ahora, para analizar cómo se relacionan las variables y observar cuáles son las más significativas para definir las especies, tenemos un gráfico de correlación de múltiples variables por pares.
Donde pusimos ver que las variables Longitus de los pétalos y Ancho de los pétalos son las variables más representativas con más concentración de los datos y por tanto las que pueden separar mejor las especias, pero al estar altamente correlacionadas se puede decir que redundan en conclusiones.
pairs(x = iris[, -5], col = c("pink", "grey3", "purple")[iris$Species],
pch = 22)
Luego, graficamos de manera individual y por medio de histogramas, la distribución de cada variable para cada especie que analizamos.
par(mfcol = c(3, 4))
for (k in 1:4) {
j0 <- names(iris)[k]
x0 <- seq(min(iris[, k]), max(iris[, k]), le = 50)
for (i in 1:3) {
i0 <- levels(iris$Species)[i]
x <- iris[iris$Species == i0, j0]
hist(x, proba = T, col = grey(0.8), main = paste("especie", i0),
xlab = j0)
lines(x0, dnorm(x0, mean(x), sd(x)), col = "red", lwd = 2)
}
}
Finalmente, pudimos observar que, para cada una de las 3 especies, con base en las 4 variables, se pudo clasificar en Iris Setosa, Iris Versicolor e Iris Virginica, según fuese su grupo al que pertenecen.
De las 150 observaciones que teníamos, como pudimos ver en el summary, cada especie tiene un número asignado de plantas igual a 50, de las cuales la especie Setosa es las que tienen en promedio los Sépalos más largos, mostrando una característica de la especie.
Mientras que la especie Virginica tiene en promedio los Sépalos más cortos de las especies.
Por otro lado, como notamos con el gráfico de correlación de múltiples variables por pares, las variables de Pétalos tienen la más alta concentración de datos, pero no son tan eficientes a la hora de clasificar las especies porque están muy correlacionadas y sería redundante observar ambas variables.