Análisis discriminante en R (Multivariante II)

El análisis discriminante es un análisis estadístico que permite clasificar individuos en grupos previamente especificados. Es decir, a partir de un conjunto variables medidas sobre un determinado número de individuos, de los que previamente se conoce que pertenecen a dos o más grupos, se obtienen una o varias funciones que permiten clasificar a cada individuo en un grupo determinado.

Este análisis tiene una importante función, y es la predictiva, ya que permite predecir a qué grupo pertenecerían otros individuos que no fueron usados para el desarrollo de la función discriminante. Se necesita, a la hora de ejecutar un análisis discriminante, de dos tipos de muestras:

  1. Muestra de adiestramiento (training sample): lo conforman los datos que se conocen de antemano a qué grupo pertenecen. Con estos datos se generan la/s función/es discriminante/s.
  2. Muestra experimental (test sample): lo conforman los datos de los que no se conocen a qué grupo pertenecen pero que se desea predecir cuál sería usando la función discriminante generada por la muestra de adiestramiento.

En R Commander no existe un menú específico para realizar en análisis discriminante. Sin embargo, su consecución a partir del uso de la función lda() contenida en el paquete MASS lo hace relativamente de ejecutar.

Debido a que hay que escribir los códigos manualmente, se ha desrrollado uno que simplifica al máximo su consecución. Pero para que se efectúe sin contratiempos, hay que seguir unos pasos previos que no pueden ser omitidos. Por un lado, al cargar los datos hay que darles unos nombres específicos a cada uno de ellos: a los datos de la muestra de adiestramiento se les llama Adiestramiento, y a los datos de la muestra experimental como Experimental. Hay que respetar las mayúsculas y minúsculas.

Quiero leer...

7.1 Ejemplo de las manos paleolíticas

En los últimos años ha habido un cierto debate sobre la identifcación del sexo de los autores de las manos que están representadas en las cuevas paleolíticas por todo el mundo (Galeta, Bruzek, and Lázničková-Galetová 2014). Sin embargo, ha sido un campo donde el análisis discriminante ha tenido cierta relevancia (Snow 2006). Y esto ha sido así porque para identificar a los autores paleolíticos se han tomado medidas de las dimensiones de las manos en hombres y mujeres actuales. Y una vez conseguidas estas medidas, mediante un análisis discriminante se ha intentado evaluar el sexo de los autores originales.

Los datos del ejemplo aquí presentados provienen de un artículo recientemente publicado (Rabazo-Rodríguez et al. 2017), en el que se usa como muestra de adiestramiento las medidas de manos de población de Tarragona y Granada, y como muestra experimental las medidas de las manos paleolíticas de la Cueva de El Castillo (Puente Viesgo, Cantabria, España). No se han utilizado todos los datos publicados en dicho artículo, sino que se ha seleccionado una muestra.

Estos datos pueden descargarse desde la web del libro. Por un lado están las medidas de tres variables en una muestra de 60 humanos modernos (30 mujeres y 30 hombres adultos). Las variables son la longitud en milímetros de los dedos anular e índice, así como la longitud de la mano. Estos datos componen la muestra de adiestramiento, y presentan el nombre de Muestra adiestramiento. Manos modernas.txt. Por otro lado, se encuentran las tres variables mencionadas previamente medidas sobre 10 manos paleolíticas que dejaron la impronta y su negativo sobre las paredes de las cuevas. Estos datos componen la muestra de adiestramiento, y presentan el nombre de Muestra experimental. Manos paleolíticas.txt.

Una vez importados los datos, hay que cargar el paquete MASS en R Commander, ya que en él se encuentra la función lda() (Linear Discriminant Analysis). En el caso de que no esté instalado el paquete MASS, hay que instalarlo y cargarlo siguiendo las dos funciones siguientes:

install.packages("MASS")
library(MASS)

7.2 Código personalizado

Si se han realizado exitosamente los pasos anteriores, el siguiente punto es muy sencillo. Simplemente se trata de copiar, pegar y ejecutar el siguiente código:

# Selecciona el nombre de la columna que funciona como factor en la muestra de 
# adiestramiento con el nombre de Adiestramiento
# Estas funciones realizan el análisis discriminante y evalúan su eficacia 
# testeándola con la muestra de adiestramiento
Column_factor=names(Adiestramiento)[sapply(Adiestramiento, class) == "factor"]
lda <- lda(as.formula(paste(Column_factor, "~.", sep="")), data = Adiestramiento)
plot(lda)  # Este es el gráfico en el que se observan los grupos
lda        # Aquí salen los coeficientes de la/s función/es discriminate/s
lda$counts # Este es el número total de observaciones por grupo
lda$svd
lda.p=predict(lda)
Tabla=table(Adiestramiento[,Column_factor],lda.p$class)
Tabla      # En FILAS los reales y en COLUMNAS los estimados
diag(prop.table(Tabla, 1)) # Porcentajes de aciertos por grupo en la muestra de adiestramiento
sum(diag(prop.table(Tabla))) # Porcentaje de acierto total en la muestra de adiestramiento

# Estas funciones estiman los grupos a los que pertenecerían las observaciones 
# de la muestra experimental recogidas en el conjunto de datos llamados Experimental
pred=predict(lda,Experimental)$class
Experimental$Grupo_Estimado=with(Experimental,pred)
Experimental

Lo que está situado a la derecha de una almohadilla (#) es código no ejecutable, de ahí que se pueda describir para qué sirve una cierta función dentro del mismo código.

7.3 Ejecución, resultados e interpretación

Los resultados que devuelve la ejecución del código anterior ofrencen mucha informacion.

Column_factor=names(Adiestramiento)[sapply(Adiestramiento, class) == "factor"]
lda <- lda(as.formula(paste(Column_factor, "~.", sep="")), data = Adiestramiento)
plot(lda)
Figura 90: Distribución por sexo de la función discriminante.

Por último, en la Figura 90 se oberva cómo se distribuyen las medidas de las 60 manos de la muestra de adiestramiento sobre la función discriminante.

lda
## Call:
## lda(as.formula(paste(Column_factor, "~.", sep = "")), data = Adiestramiento)
## 
## Prior probabilities of groups:
## HOMBRE  MUJER 
##    0,5    0,5 
## 
## Group means:
##          INDICE   ANULAR    LARGO
## HOMBRE 76,70000 78,30000 189,1333
## MUJER  71,63333 71,83333 172,4000
## 
## Coefficients of linear discriminants:
##                LD1
## INDICE -0,05220326
## ANULAR -0,12629525
## LARGO  -0,06798442

Esta primera parte de los resultados se dedica exclusivamente a la muestra de adiestramiento. Aquí se indica que la probabilidad de ser Hombre o Mujer es del 50% cada uno (Prior probabilities of groups). Además, ofrecen las medias de cada medida y por cada sexo (Group means). Finalmente aparecen los coeficientes de la función discriminante (Coefficients of linear discriminants), que hay que interpretarla como se muestra a continuación:

LD1=−0.052×INDICE−0.126×ANULAR−0.068×LARGO

lda$counts
## HOMBRE  MUJER 
##     30     30

En este caso se hace un recuento del tamaño muestral de cada sexo en la muestra de adiestramiento. Como puede observarse, la muestra de adiestramiento está compuesta por 30 hombres y 30 mujeres.

lda$svd
## [1] 8,593421
lda.p=predict(lda)
Tabla=table(Adiestramiento[,Column_factor],lda.p$class)
Tabla 
##         
##          HOMBRE MUJER
##   HOMBRE     27     3
##   MUJER       3    27

Como resultado de aplicar la función discriminante descrita arriba sobre la muestra de adiestramiento, y suponiendo que no se conociera a qué sexo pertenecían, se observan los fallos y aciertos en la asignación a un sexo u otro.

Las filas representan el número real de individuos por especie y en columnas el número estimado de especies después de aplicar la función. Su lectura se hace del siguiente modo:

  • De las 30 manos reales que pertenecen a hombres (27+3, en la primera fila), 27 se han asignado correctamente a ese sexo, y 3 han sido erróneamente asignadas como pertenecientes a mujeres.
  • De las 30 manos reales que pertenecen a mujeres (3+27, en la segunda fila), 27 se han asignado correctamente a ese sexo, y 3 han sido erróneamente asignadas como pertenecientes a hombres.
diag(prop.table(Tabla, 1))
## HOMBRE  MUJER 
##    0,9    0,9

Teniendo en cuenta los aciertos y fallos vistos en la tabla anterior, se determina que ha habido un 90% de aciertos a la hora de averiguar manos pertenecientes a hombres y un 90% de aciertos en el caso de las manos de mujeres.

sum(diag(prop.table(Tabla)))
## [1] 0,9

Este último código muestra el porcentaje de aciertos en general (sin dividir por sexos) de la función discriminante sobre la muestra de adiestramiento. La función ofrece un 90% de aciertos (que es la media de los dos 90% vistos para hombres y mujeres respectivamente). Si el acierto para hombres hubiera sido un 70% y el de mujeres un 90%, este valor hubiera sido un 0.8 (80%).

pred=predict(lda,Experimental)$class
Experimental$Grupo_Estimado=with(Experimental,pred)
Experimental
##    INDICE ANULAR LARGO Grupo_Estimado
## 1      85     68   270         HOMBRE
## 2      65     65   165          MUJER
## 3      55     63   270         HOMBRE
## 4      75     77   180         HOMBRE
## 5      60     70   175          MUJER
## 6      65     66   210         HOMBRE
## 7      62     80   245         HOMBRE
## 8      80     60   170          MUJER
## 9      65     78   200         HOMBRE
## 10     70     65   220         HOMBRE

¿Qué pasa si se aplica la función discriminante obtenida para la muestra de adiestramiento sobre las medidas de las 10 manos paleolíticas que componen la muestra experimental? Esta pregunta se resuelve con la última parte del código personalizado. Como se puede observar, 7 manos se corresponderían con hombres y 3 manos con mujeres. Pero hay que tener en cuenta un aspecto importante, y es el del porcentaje de fallos en la función discriminante (que es de un 10%, en general y para cada sexo). Esto indicaría que al menos una mano pudiera estar mal atribuida a su sexo, puesto que el tamaño muestral de manos paleolíticas en este ejemplo es de 10.

REFERENCIAS

Galeta, Patrik, Jaroslav Bruzek, and Martina Lázničková-Galetová. 2014. “Is Sex Estimation from Handprints in Prehistoric Cave Art Reliable? A View from Biological and Forensic Anthropology.” Journal of Archaeological Science 45 (May): 141–49. https://doi.org/10.1016/j.jas.2014.01.028.

Snow, Dean R. 2006. “Sexual Dimorphism in Upper Palaeolithic Hand Stencils.” Antiquity 80 (308): 390–404.

Rabazo-Rodríguez, Ana María, Mario Modesto-Mata, Lucía Bermejo, and Marcos García-Díez. 2017. “New Data on the Sexual Dimorphism of the Hand Stencils in El Castillo Cave (Cantabria, Spain).” Journal of Archaeological Science: Reports 14 (June): 374–81. https://doi.org/10.1016/j.jasrep.2017.06.022.