Se requiere realizar un Análisis de Correspondencia Multiple (ACM) a una base de datos, la cual contiene una tabla cruzada con la información de 27 tipo de razas de perros con unas características (6 variables cualitativas (tamaño, peso, velocidad, inteligencia, afectividad, y agresividad) y adicional se tendrá como variable suplementaria(función del perro). Se usará la base de datos “DogBreeds”, la cual se extrae de LIBRARY(FactoClass).
library(FactoMineR)
library(ggplot2)
library(FactoClass)
library(factoextra)
library(Rcpp)
library(broom)
library(pander)
library(corrplot)
library(gridExtra)
library(ggthemes)
data("DogBreeds")
attach(DogBreeds)
Tamaño <- DogBreeds$SIZE
Peso <- DogBreeds$WEIG
Velocidad<- DogBreeds$SPEE
Inteligencia <- DogBreeds$INTE
Afectividad <- DogBreeds$AFFE
Agresividad<- DogBreeds$AGGR
Funcion <- DogBreeds$FUNC
Datos <- cbind(DogBreeds,Tamaño,Peso,Velocidad,Inteligencia, Afectividad, Agresividad)
Datos[,1:7] <- NULL
Una vez se nombran las variables, se pasa a hacer un análisis descriptivo de estas, especialmente de su frecuencia:
pander(summary(Datos))
| Tamaño | Peso | Velocidad | Inteligencia | Afectividad | Agresividad |
|---|---|---|---|---|---|
| lar:15 | hea: 5 | hig: 9 | hig: 6 | hig:14 | hig:13 |
| med: 5 | lig: 8 | low:10 | low: 8 | low:13 | low:14 |
| sma: 7 | med:14 | med: 8 | med:13 | NA | NA |
Para observar visualmente la frecuencia se utilizan diagramas de barras:
F1<-ggplot(Datos, aes(x=Peso)) + geom_bar(fill= "plum3") + theme_classic()
F2<-ggplot(Datos, aes(x=Velocidad)) + geom_bar(fill= "thistle2") + theme_classic()
F3<-ggplot(Datos, aes(x=Inteligencia)) + geom_bar(fill= "wheat2") + theme_classic()
F4<-ggplot(Datos, aes(x=Afectividad)) + geom_bar(fill= "slategray1") + theme_classic()
F5<-ggplot(Datos, aes(x=Agresividad)) + geom_bar(fill= "slategray3") + theme_classic()
F6 <- grid.arrange(F1,F2,F3,F4,F5, nrow = 2)
uni.mca <- MCA(Datos, graph = FALSE)
print(uni.mca)
## **Results of the Multiple Correspondence Analysis (MCA)**
## The analysis was performed on 27 individuals, described by 6 variables
## *The results are available in the following objects:
##
## name description
## 1 "$eig" "eigenvalues"
## 2 "$var" "results for the variables"
## 3 "$var$coord" "coord. of the categories"
## 4 "$var$cos2" "cos2 for the categories"
## 5 "$var$contrib" "contributions of the categories"
## 6 "$var$v.test" "v-test for the categories"
## 7 "$ind" "results for the individuals"
## 8 "$ind$coord" "coord. for the individuals"
## 9 "$ind$cos2" "cos2 for the individuals"
## 10 "$ind$contrib" "contributions of the individuals"
## 11 "$call" "intermediate results"
## 12 "$call$marge.col" "weights of columns"
## 13 "$call$marge.li" "weights of rows"
Aquí están todos los valores de la información de las listas y matrices.
fviz_mca_ind(uni.mca, repel = TRUE,
ggtheme = theme_minimal())+labs(title ="Representación individual de las razas")
El gráfico muestra una distribución en los diferentes zonas de la nube, en la dimensión 2 hay mayor similitud entre las razas:
Este plano factorial tiene una varianza explicada del 52%, aquí se distribuyen las asociaciones donde podemos reconocer razas como el Pekinés y el Chichuahua con mucha cercanía, estas razas presentan gran similitud ya que son perros regularmente pequeños y por lo tanto comparte caracteristicas fisicas. Lo mismo se puede visualizar entre razas más grandes como el Boxer, el Dalmata y el Labrador las cuales también comparten cualidades fisicas.
eigenval <- get_eigenvalue(uni.mca)
pander(head(eigenval))
| eigenvalue | variance.percent | cumulative.variance.percent | |
|---|---|---|---|
| Dim.1 | 0.4816 | 28.9 | 28.9 |
| Dim.2 | 0.3847 | 23.08 | 51.98 |
| Dim.3 | 0.211 | 12.66 | 64.64 |
| Dim.4 | 0.1576 | 9.453 | 74.09 |
| Dim.5 | 0.1501 | 9.008 | 83.1 |
| Dim.6 | 0.1233 | 7.398 | 90.5 |
fviz_screeplot(uni.mca, addlabels = TRUE, ylim = c(0, 15)) + geom_hline(yintercept = 7.14, linetype = 2, color = "red")
Ya con los porcentajes de varianza y el scree plot podemos definir la cantidad de componentes pricipales, en este caso los 6 primeros superan el límite de explicación valida con un total del 90.5%.
fviz_mca_biplot(uni.mca, repel = TRUE,
ggtheme = theme_minimal())+labs( title ="Representación simultanea de las razas y las categorías")
Al graficar el biplot podemos observar que el dálmata posee un nivel de velocidad y tamaño promedio. Respecto a tener similitudes con otras razas, sí, se encuentra muy cercano al Boxer, al labrador y al podb como mencionamos anteriormente.
Respecto a la caracteristica de la velocidad, el Basset Hound se encuentra más cerca de correr lento.
variables <- get_mca_var(uni.mca)
variables
## Multiple Correspondence Analysis Results for variables
## ===================================================
## Name Description
## 1 "$coord" "Coordinates for categories"
## 2 "$cos2" "Cos2 for categories"
## 3 "$contrib" "contributions of categories"
Para visualizar la correlación entre variables y las dimensiones principales de ACM:
fviz_mca_var(uni.mca, choice = "mca.cor",
repel = TRUE,
ggtheme = theme_minimal())
La inteligencia, agresividad y afectividad están más correlacionadas con la primera dimensión y la velocidad, el peso y el tamaño con la segunda.
Si queremos ver las coordenadas puntuales de cada categoría en cada dimensión:
pander(head(round(variables$coord, 2), 15))
| Dim 1 | Dim 2 | Dim 3 | Dim 4 | Dim 5 | |
|---|---|---|---|---|---|
| Tamaño_lar | -0.84 | -0.02 | -0.05 | -0.17 | 0.11 |
| Tamaño_med | 0.85 | -1.23 | 1.02 | 0.34 | -0.31 |
| Tamaño_sma | 1.18 | 0.92 | -0.62 | 0.12 | -0.02 |
| Peso_hea | -1.02 | 0.97 | 1.22 | 0.07 | 0.61 |
| Peso_lig | 1.17 | 0.82 | -0.36 | 0.16 | -0.05 |
| Peso_med | -0.31 | -0.82 | -0.23 | -0.12 | -0.19 |
| Velocidad_hig | -0.89 | -0.37 | -0.76 | -0.24 | -0.01 |
| Velocidad_low | 0.32 | 1.04 | 0.4 | -0.08 | 0.31 |
| Velocidad_med | 0.6 | -0.89 | 0.36 | 0.37 | -0.37 |
| Inteligencia_hig | -0.34 | -0.46 | -0.6 | 1.28 | 1.06 |
| Inteligencia_low | -0.35 | 0.81 | -0.35 | 0.02 | -1.04 |
| Inteligencia_med | 0.37 | -0.29 | 0.49 | -0.6 | 0.15 |
| Afectividad_hig | 0.78 | -0.27 | -0.06 | 0.08 | 0.04 |
| Afectividad_low | -0.84 | 0.29 | 0.07 | -0.08 | -0.04 |
| Agresividad_hig | -0.43 | 0.21 | 0.33 | 0.55 | -0.37 |
Para sólo ver las modalidades o categorías de las variables (sin las razas):
fviz_mca_var(uni.mca, col.var = "purple", shape.var = 10, repel = TRUE,
ggtheme = theme_minimal())+labs(title = "Nube de puntos de las Modalidades/Categorías")
En la nube de puntos se obsevan las categorias más similares, en este caso tenemos un perro con una inteligencia promedio tiene una afectividad alta y por lo tanto una agresividad más baja. También que un perro grande es menos efectivo y más rápido y por último que un perro pequeño tiene un peso liviano.
Se agrega la variable suplementaria a la base de datos, para crear una que la incluya.
Datos2<-cbind(Datos,Funcion)
Luego, observamos las coordenadas de las distintas categorías de la variable, compuestas por las funciones del perro, si es de compañía, es un cazador o es de utilidad:
sup.mca<- MCA(Datos2,quali.sup = 7,ncp=2,graph = FALSE)
coordenadas <- sup.mca$quali.sup$coord
pander(coordenadas)
| Dim 1 | Dim 2 | |
|---|---|---|
| com | 1.039 | 0.09532 |
| hun | -0.3224 | -0.4324 |
| uti | -0.9365 | 0.3673 |
Primer plano factorial:
fviz_mca_var(sup.mca,repel=T)+labs(
title ="Nube de puntos de Categorias y Función")
En el gráfico se puede observar que las relaciones más fuertes están dadas cuando un perro cazador posee alta inteligencia y un peso promedio, cuando un perro útil tiene baja afectividad y es grande y por último, cuando un perro de compañía tiene alta afectividad.