##: El análisis de correspondencias (AC) es una extensión del análisis de componentes principales adecuado para explorar las relaciones entre variables cualitativas (o datos categóricos). Al igual que el análisis de componentes principales, proporciona una solución para resumir y visualizar conjuntos de datos en gráficos bidimensionales.
Para empezar se instalan los paquetes y liberías correspondientes.
#install.packages(c("FactoMineR", "factoextra"))
library("FactoMineR")
## Warning: package 'FactoMineR' was built under R version 4.2.3
library("factoextra")
## Warning: package 'factoextra' was built under R version 4.2.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.2.3
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
##: También, se cargan los datos necesarios para el análisis.
data(housetasks)
head(housetasks)
## Wife Alternating Husband Jointly
## Laundry 156 14 2 4
## Main_meal 124 20 5 4
## Dinner 77 11 7 13
## Breakfeast 82 36 15 7
## Tidying 53 11 1 57
## Dishes 32 24 4 53
##: La tabla de contingencia anterior no es muy grande. Por lo tanto, es fácil inspeccionar e interpretar visualmente los perfiles de fila y columna:
library("gplots")
## Warning: package 'gplots' was built under R version 4.2.3
##
## Attaching package: 'gplots'
## The following object is masked from 'package:stats':
##
## lowess
# 1. convert the data as a table
dt <- as.table(as.matrix(housetasks))
# 2. Graph
balloonplot(t(dt), main ="housetasks", xlab ="", ylab="",
label = FALSE, show.margins = FALSE)
##: Para una tabla de contingencia pequeña, puede usar la prueba Chi-cuadrado para evaluar si existe una dependencia significativa entre las categorías de fila y columna:
chisq <- chisq.test(housetasks)
chisq
##
## Pearson's Chi-squared test
##
## data: housetasks
## X-squared = 1944.5, df = 36, p-value < 2.2e-16
##: Se puede utilizar la función CA()[paquete FactoMiner]. Un formato simplificado es:
library("FactoMineR")
res.ca <- CA(housetasks, graph = FALSE)
print(res.ca)
## **Results of the Correspondence Analysis (CA)**
## The row variable has 13 categories; the column variable has 4 categories
## The chi square of independence between the two variables is equal to 1944.456 (p-value = 0 ).
## *The results are available in the following objects:
##
## name description
## 1 "$eig" "eigenvalues"
## 2 "$col" "results for the columns"
## 3 "$col$coord" "coord. for the columns"
## 4 "$col$cos2" "cos2 for the columns"
## 5 "$col$contrib" "contributions of the columns"
## 6 "$row" "results for the rows"
## 7 "$row$coord" "coord. for the rows"
## 8 "$row$cos2" "cos2 for the rows"
## 9 "$row$contrib" "contributions of the rows"
## 10 "$call" "summary called parameters"
## 11 "$call$marge.col" "weights of the columns"
## 12 "$call$marge.row" "weights of the rows"
##: Para interpretar el análisis de correspondencias, el primer paso es evaluar si existe una dependencia significativa entre las filas y las columnas.
##: Un método riguroso es utilizar el para examinar la asociación entre las variables de fila y columna. Esto aparece en la parte superior del informe generado por una función. Una estadística chi-cuadrado alta significa un fuerte vínculo entre las variables de fila y columna.chi-square statisticsummary(res.ca)print(res.ca)
# Chi-square statistics
chi2 <- 1944.456
# Degree of freedom
df <- (nrow(housetasks) - 1) * (ncol(housetasks) - 1)
# P-value
pval <- pchisq(chi2, df = df, lower.tail = FALSE)
pval
## [1] 0
##: Los valores propios y la proporción de varianzas retenidas por los diferentes ejes se pueden extraer utilizando una función. Los valores propios son grandes para el primer eje y pequeños para el eje siguiente por lo que se emplea la función .get_eigenvalue()
library("factoextra")
eig.val <- get_eigenvalue(res.ca)
eig.val
## eigenvalue variance.percent cumulative.variance.percent
## Dim.1 0.5428893 48.69222 48.69222
## Dim.2 0.4450028 39.91269 88.60491
## Dim.3 0.1270484 11.39509 100.00000
##: Se realiza un diagrama para la interpretación.
fviz_screeplot(res.ca, addlabels = TRUE, ylim = c(0, 50))
##: También es posible calcular un valor propio promedio por encima del cual el eje debe mantenerse en la solución.
##: El código R a continuación, dibuja el diagrama de pedregal con una línea discontinua roja que especifica el valor propio promedio:
fviz_screeplot(res.ca) +
geom_hline(yintercept=33.33, linetype=2, color="red")
##: La función fviz_ca_biplot() se puede utilizar para dibujar el biplot de las variables de filas y columnas.
# repel= TRUE to avoid text overlapping (slow if many point)
fviz_ca_biplot(res.ca, repel = TRUE)
##: La distancia entre cualquier punto de fila o punto de columna da una medida de su similitud (o disimilitud). Los puntos de fila con un perfil similar se cierran en el mapa de factores. Lo mismo ocurre con los puntos de columna.
##: La función get_ca_row() se utiliza para extraer los resultados de las variables de fila. Esta función devuelve una lista que contiene las coordenadas, el cos2, la contribución y la inercia de las variables de fila:
row <- get_ca_row(res.ca)
row
## Correspondence Analysis - Results for rows
## ===================================================
## Name Description
## 1 "$coord" "Coordinates for the rows"
## 2 "$cos2" "Cos2 for the rows"
## 3 "$contrib" "contributions of the rows"
## 4 "$inertia" "Inertia of the rows"
##: Se puede acceder a los diferentes componentes de la siguiente manera:
# Coordinates
head(row$coord)
## Dim 1 Dim 2 Dim 3
## Laundry -0.9918368 0.4953220 -0.31672897
## Main_meal -0.8755855 0.4901092 -0.16406487
## Dinner -0.6925740 0.3081043 -0.20741377
## Breakfeast -0.5086002 0.4528038 0.22040453
## Tidying -0.3938084 -0.4343444 -0.09421375
## Dishes -0.1889641 -0.4419662 0.26694926
# Cos2: quality on the factore map
head(row$cos2)
## Dim 1 Dim 2 Dim 3
## Laundry 0.7399874 0.1845521 0.07546047
## Main_meal 0.7416028 0.2323593 0.02603787
## Dinner 0.7766401 0.1537032 0.06965666
## Breakfeast 0.5049433 0.4002300 0.09482670
## Tidying 0.4398124 0.5350151 0.02517249
## Dishes 0.1181178 0.6461525 0.23572969
# Contributions to the principal components
head(row$contrib)
## Dim 1 Dim 2 Dim 3
## Laundry 18.2867003 5.563891 7.968424
## Main_meal 12.3888433 4.735523 1.858689
## Dinner 5.4713982 1.321022 2.096926
## Breakfeast 3.8249284 3.698613 3.069399
## Tidying 1.9983518 2.965644 0.488734
## Dishes 0.4261663 2.844117 3.634294
##: El siguiente código R muestra las coordenadas de cada punto de fila en cada dimensión (1, 2 y 3):
head(row$coord)
## Dim 1 Dim 2 Dim 3
## Laundry -0.9918368 0.4953220 -0.31672897
## Main_meal -0.8755855 0.4901092 -0.16406487
## Dinner -0.6925740 0.3081043 -0.20741377
## Breakfeast -0.5086002 0.4528038 0.22040453
## Tidying -0.3938084 -0.4343444 -0.09421375
## Dishes -0.1889641 -0.4419662 0.26694926
##: Esto se gráfica.
fviz_ca_row(res.ca, repel = TRUE)
##: Es posible cambiar el color y la forma de los puntos de fila utilizando los argumentos y de la siguiente manera.
fviz_ca_row(res.ca, col.row="steelblue", shape.row = 15)
##: El cos2 mide el grado de asociación entre filas/columnas y un eje particular. El cos2 de los puntos de fila se puede extraer de la siguiente manera:
head(row$cos2, 4)
## Dim 1 Dim 2 Dim 3
## Laundry 0.7399874 0.1845521 0.07546047
## Main_meal 0.7416028 0.2323593 0.02603787
## Dinner 0.7766401 0.1537032 0.06965666
## Breakfeast 0.5049433 0.4002300 0.09482670
# Color by cos2 values: quality on the factor map
fviz_ca_row(res.ca, col.row = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE)
##: También es posible cambiar la transparencia de los puntos de fila de
acuerdo con sus valores cos2 utilizando la opción
# Change the transparency by cos2 values
fviz_ca_row(res.ca, alpha.row="cos2")
##: Puede visualizar el cos2 de los puntos de fila en todas las dimensiones utilizando el paquete corrplot:
library("corrplot")
## Warning: package 'corrplot' was built under R version 4.2.3
## corrplot 0.92 loaded
corrplot(row$cos2, is.corr=FALSE)
##: También es posible crear un gráfico de barras de filas cos2
# Cos2 of rows on Dim.1 and Dim.2
fviz_cos2(res.ca, choice = "row", axes = 1:2)
##: La contribución de las filas (en %) a la definición de las dimensiones se puede extraer de la siguiente manera:
head(row$contrib)
## Dim 1 Dim 2 Dim 3
## Laundry 18.2867003 5.563891 7.968424
## Main_meal 12.3888433 4.735523 1.858689
## Dinner 5.4713982 1.321022 2.096926
## Breakfeast 3.8249284 3.698613 3.069399
## Tidying 1.9983518 2.965644 0.488734
## Dishes 0.4261663 2.844117 3.634294
##: Esto se gráfica para su práctica interpretación.
library("corrplot")
corrplot(row$contrib, is.corr=FALSE)
##: La función fviz_contrib se puede utilizar para dibujar un gráfico de barras de contribuciones de filas. Si los datos contienen muchas filas, puede decidir mostrar solo las filas contribuyentes superiores. El código R a continuación muestra las 10 filas superiores que contribuyen a las dimensiones:
# Contributions of rows to dimension 1
fviz_contrib(res.ca, choice = "row", axes = 1, top = 10)
# Contributions of rows to dimension 2
fviz_contrib(res.ca, choice = "row", axes = 2, top = 10)
##: La contribución total a las dimensiones 1 y 2 puede obtenerse de la siguiente manera:
# Total contribution to dimension 1 and 2
fviz_contrib(res.ca, choice = "row", axes = 1:2, top = 10)
##: Los puntos de fila más importantes (o contribuyentes) se pueden resaltar en el gráfico de dispersión de la siguiente manera:
fviz_ca_row(res.ca, col.row = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE)
##: Se controla la transparencia de los puntos así:
# Change the transparency by contrib values
fviz_ca_row(res.ca, alpha.row="contrib",
repel = TRUE)
##: La función get_ca_col() se utiliza para extraer los resultados de las variables de columna. Esta función devuelve una lista que contiene las coordenadas, el cos2, la contribución y la inercia de las variables de columnas:
col <- get_ca_col(res.ca)
col
## Correspondence Analysis - Results for columns
## ===================================================
## Name Description
## 1 "$coord" "Coordinates for the columns"
## 2 "$cos2" "Cos2 for the columns"
## 3 "$contrib" "contributions of the columns"
## 4 "$inertia" "Inertia of the columns"
##: Para obtener acceso a los diferentes componentes, se empleea lo siguiente:
# Coordinates of column points
head(col$coord)
## Dim 1 Dim 2 Dim 3
## Wife -0.83762154 0.3652207 -0.19991139
## Alternating -0.06218462 0.2915938 0.84858939
## Husband 1.16091847 0.6019199 -0.18885924
## Jointly 0.14942609 -1.0265791 -0.04644302
# Quality of representation
head(col$cos2)
## Dim 1 Dim 2 Dim 3
## Wife 0.801875947 0.1524482 0.045675847
## Alternating 0.004779897 0.1051016 0.890118521
## Husband 0.772026244 0.2075420 0.020431728
## Jointly 0.020705858 0.9772939 0.002000236
# Contributions
head(col$contrib)
## Dim 1 Dim 2 Dim 3
## Wife 44.462018 10.312237 10.8220753
## Alternating 0.103739 2.782794 82.5492464
## Husband 54.233879 17.786612 6.1331792
## Jointly 1.200364 69.118357 0.4954991
##: El se utiliza para producir el gráfico de puntos de columna. Para crear una gráfica simple, escriba lo siguiente:
fviz_ca_col(res.ca)
##: Al igual que los puntos de fila, también es posible colorear los puntos de columna por sus valores cos2:
fviz_ca_col(res.ca, col.col = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE)
##: El siguiente código R crea un gráfico de barras de columnas cos2:
fviz_cos2(res.ca, choice = "col", axes = 1:2)
##: Para visualizar la contribución de las filas a las dos primeras dimensiones, escriba lo siguiente:
fviz_contrib(res.ca, choice = "col", axes = 1:2)
##: Como se mencionó anteriormente, la gráfica estándar del análisis de correspondencias es una bigráfica simétrica en la que tanto las filas (puntos azules) como las columnas (triángulos rojos) se representan en el mismo espacio utilizando el . Estas coordenadas representan los perfiles de fila y columna. En este caso, solo se puede interpretar realmente la distancia entre puntos de fila o la distancia entre puntos de columna
fviz_ca_biplot(res.ca, repel = TRUE)
##: Para hacer un bigráfico asimétrico, los puntos de filas (o columnas) se trazan a partir de las coordenadas estándar (S) y los perfiles de las columnas (o las filas) se trazan a partir de las coordenadas principales (P).
Para un eje dado, las coordenadas estándar y principal están relacionadas de la siguiente manera:
fviz_ca_biplot(res.ca,
map ="rowprincipal", arrow = c(TRUE, TRUE),
repel = TRUE)
##: En el siguiente caso las columnas están en coordenadas principales y las filas en coordenadas estándar multiplicadas por la raíz cuadrada de la masa. Para una fila dada, el cuadrado de la nueva coordenada en un eje i es exactamente la contribución de esta fila a la inercia del eje i.
fviz_ca_biplot(res.ca, map ="colgreen", arrow = c(TRUE, FALSE),
repel = TRUE)
##: Para identificar fácilmente los puntos de fila y columna que están más asociados con las dimensiones principales. Las variables de fila/columna se ordenan por sus coordenadas en la salida.dimdesc()dimdesc()
# Dimension description
res.desc <- dimdesc(res.ca, axes = c(1,2))
##: Descripción de la dimensión 1:
# Description of dimension 1 by row points
head(res.desc[[1]]$row, 4)
## coord
## Laundry -0.9918368
## Main_meal -0.8755855
## Dinner -0.6925740
## Breakfeast -0.5086002
# Description of dimension 1 by column points
head(res.desc[[1]]$col, 4)
## coord
## Wife -0.83762154
## Alternating -0.06218462
## Jointly 0.14942609
## Husband 1.16091847
##: Descripción de la dimensión 2:
# Description of dimension 2 by row points
res.desc[[2]]$row
## coord
## Holidays -1.4350066
## Finances -0.6178684
## Insurance -0.4737832
## Dishes -0.4419662
## Tidying -0.4343444
## Shopping -0.4033171
## Official 0.2536132
## Dinner 0.3081043
## Breakfeast 0.4528038
## Main_meal 0.4901092
## Laundry 0.4953220
## Driving 0.6534143
## Repairs 0.8642647
# Description of dimension 1 by column points
res.desc[[2]]$col
## coord
## Jointly -1.0265791
## Alternating 0.2915938
## Wife 0.3652207
## Husband 0.6019199
##: Se usa el el conjunto de datos [en el paquete FactoMineR]. Contiene 18 filas y 8 columnas:
data(children)
head(children)
## unqualified cep bepc high_school_diploma university thirty fifty
## money 51 64 32 29 17 59 66
## future 53 90 78 75 22 115 117
## unemployment 71 111 50 40 11 79 88
## circumstances 1 7 5 5 4 9 8
## hard 7 11 4 3 2 2 17
## economic 7 13 12 11 11 18 19
## more_fifty
## money 70
## future 86
## unemployment 177
## circumstances 5
## hard 18
## economic 17
##: Como se mencionó anteriormente, las filas y columnas suplementarias no se utilizan para la definición de las dimensiones principales. Sus coordenadas se predicen utilizando solo la información proporcionada por la CA realizada en filas/columnas activas.
res.ca <- CA (children, row.sup = 15:18, col.sup = 6:8,
graph = FALSE)
fviz_ca_biplot(res.ca, repel = TRUE)
##: También es posible ocultar filas y columnas suplementarias usando el argumento :invisible
fviz_ca_biplot(res.ca, repel = TRUE,
invisible = c("row.sup", "col.sup"))
##: Resultados previstos (coordenadas y cos2) para las filas suplementarias:
res.ca$row.sup
## $coord
## Dim 1 Dim 2 Dim 3 Dim 4
## comfort 0.2096705 0.7031677 0.07111168 0.3071354
## disagreement 0.1462777 0.1190106 0.17108916 -0.3132169
## world 0.5233045 0.1429707 0.08399269 -0.1063597
## to_live 0.3083067 0.5020193 0.52093397 0.2557357
##
## $cos2
## Dim 1 Dim 2 Dim 3 Dim 4
## comfort 0.06892759 0.77524032 0.007928672 0.14790342
## disagreement 0.13132177 0.08692632 0.179649183 0.60210272
## world 0.87587685 0.06537746 0.022564054 0.03618163
## to_live 0.13899699 0.36853645 0.396830367 0.09563620
##: Gráfico de puntos de fila activos y suplementarios:
fviz_ca_row(res.ca, repel = TRUE)
##: Resultados previstos (coordenadas y cos2) para las columnas suplementarias:
res.ca$col.sup
## $coord
## Dim 1 Dim 2 Dim 3 Dim 4
## thirty 0.10541339 -0.05969594 -0.10322613 0.06977996
## fifty -0.01706444 0.04907657 -0.01568923 -0.01306117
## more_fifty -0.17706810 -0.04813788 0.10077299 -0.08517528
##
## $cos2
## Dim 1 Dim 2 Dim 3 Dim 4
## thirty 0.1375601 0.04411543 0.131910759 0.060278490
## fifty 0.0108695 0.08990298 0.009188167 0.006367804
## more_fifty 0.2860989 0.02114509 0.092666735 0.066200714
##: Gráfico de puntos de columna activos y suplementarios:
fviz_ca_col(res.ca, repel = TRUE)
##: Los resultados pueden ser filtrados con el siguiente procedimiento en las líneas de código a continuación.
# Visualize rows with cos2 >= 0.8
fviz_ca_row(res.ca, select.row = list(cos2 = 0.8))
# Top 5 active rows and 5 suppl. rows with the highest cos2
fviz_ca_row(res.ca, select.row = list(cos2 = 5))
# Select by names
name <- list(name = c("employment", "fear", "future"))
fviz_ca_row(res.ca, select.row = name)
# Top 5 contributing rows and columns
fviz_ca_biplot(res.ca, select.row = list(contrib = 5),
select.col = list(contrib = 5)) +
theme_minimal()
##: El análisis de correspondencia múltiple (MCA) es una extensión del análisis de correspondencia simple para resumir y visualizar una tabla de datos que contiene más de dos variables categóricas. También puede verse como una generalización del análisis de componentes principales cuando las variables a analizar son categóricas en lugar de cuantitativas.
library("FactoMineR")
library("factoextra")
#se cargan los datos
data(poison)
head(poison[, 1:7], 3)
## Age Time Sick Sex Nausea Vomiting Abdominals
## 1 9 22 Sick_y F Nausea_y Vomit_n Abdo_y
## 2 5 0 Sick_n F Nausea_n Vomit_n Abdo_n
## 3 6 16 Sick_y F Nausea_n Vomit_y Abdo_y
##: Se crea un Subconjunto solo de individuos activos y variables para análisis de correspondencia múltiple:
poison.active <- poison[1:55, 5:15]
head(poison.active[, 1:6], 3)
## Nausea Vomiting Abdominals Fever Diarrhae Potato
## 1 Nausea_y Vomit_n Abdo_y Fever_y Diarrhea_y Potato_y
## 2 Nausea_n Vomit_n Abdo_n Fever_n Diarrhea_n Potato_y
## 3 Nausea_n Vomit_y Abdo_y Fever_y Diarrhea_y Potato_y
# Summary of the 4 first variables
summary(poison.active)[, 1:4]
## Nausea Vomiting Abdominals Fever
## Nausea_n:43 Vomit_n:33 Abdo_n:18 Fever_n:20
## Nausea_y:12 Vomit_y:22 Abdo_y:37 Fever_y:35
##: Las funciones de resumen () devuelven el tamaño de cada categoría de variable. También es posible trazar la frecuencia de las categorías de variables. El código R a continuación, traza las primeras 4 columnas:
for (i in 1:4) {
plot(poison.active[,i], main=colnames(poison.active)[i],
ylab = "Count", col="steelblue", las = 2)
}
##: En el código R a continuación, el MCA se realiza solo en el activo individuos/variables:
res.mca <- MCA(poison.active, graph = FALSE)
print(res.mca)
## **Results of the Multiple Correspondence Analysis (MCA)**
## The analysis was performed on 55 individuals, described by 11 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"
##: La visualización e interpretación de los datos se presenta a continuación.
##: La proporción de varianzas retenidas por las diferentes dimensiones (ejes) se puede extraer usando la función get_eigenvalue() [paquete factoextra] de la siguiente manera:
library("factoextra")
eig.val <- get_eigenvalue(res.mca)
head(eig.val)
## eigenvalue variance.percent cumulative.variance.percent
## Dim.1 0.33523140 33.523140 33.52314
## Dim.2 0.12913979 12.913979 46.43712
## Dim.3 0.10734849 10.734849 57.17197
## Dim.4 0.09587950 9.587950 66.75992
## Dim.5 0.07883277 7.883277 74.64319
## Dim.6 0.07108981 7.108981 81.75217
##: Estos datos se grafican de la siguiente forma.
fviz_screeplot(res.mca, addlabels = TRUE, ylim = c(0, 45))
##: La función fviz_mca_biplot() [paquete factoextra] se usa para dibujar el biplot de individuos y categorías de variables:
fviz_mca_biplot(res.mca,
repel = TRUE, # Avoid text overlapping (slow if many point)
ggtheme = theme_minimal())
##: La función get_mca_var() [de facto extra] se utiliza para extraer los resultados de las categorías de variables. Esta función devuelve una lista que contiene las coordenadas, el cos2 y la contribución de las categorías de variables:
var <- get_mca_var(res.mca)
var
## Multiple Correspondence Analysis Results for variables
## ===================================================
## Name Description
## 1 "$coord" "Coordinates for categories"
## 2 "$cos2" "Cos2 for categories"
## 3 "$contrib" "contributions of categories"
##: Se puede acceder a los diferentes componentes de la siguiente manera:
# Coordinates
head(var$coord)
## Dim 1 Dim 2 Dim 3 Dim 4 Dim 5
## Nausea_n 0.2673909 0.12139029 -0.265583253 0.03376130 0.07370500
## Nausea_y -0.9581506 -0.43498187 0.951673323 -0.12097801 -0.26410958
## Vomit_n 0.4790279 -0.40919465 0.084492799 0.27361142 0.05245250
## Vomit_y -0.7185419 0.61379197 -0.126739198 -0.41041713 -0.07867876
## Abdo_n 1.3180221 -0.03574501 -0.005094243 -0.15360951 -0.06986987
## Abdo_y -0.6411999 0.01738946 0.002478280 0.07472895 0.03399075
# Cos2: quality on the factore map
head(var$cos2)
## Dim 1 Dim 2 Dim 3 Dim 4 Dim 5
## Nausea_n 0.2562007 0.0528025759 2.527485e-01 0.004084375 0.019466197
## Nausea_y 0.2562007 0.0528025759 2.527485e-01 0.004084375 0.019466197
## Vomit_n 0.3442016 0.2511603912 1.070855e-02 0.112294813 0.004126898
## Vomit_y 0.3442016 0.2511603912 1.070855e-02 0.112294813 0.004126898
## Abdo_n 0.8451157 0.0006215864 1.262496e-05 0.011479077 0.002374929
## Abdo_y 0.8451157 0.0006215864 1.262496e-05 0.011479077 0.002374929
# Contributions to the principal components
head(var$contrib)
## Dim 1 Dim 2 Dim 3 Dim 4 Dim 5
## Nausea_n 1.515869 0.81100008 4.670018e+00 0.08449397 0.48977906
## Nausea_y 5.431862 2.90608363 1.673423e+01 0.30277007 1.75504164
## Vomit_n 3.733667 7.07226253 3.627455e-01 4.25893721 0.19036376
## Vomit_y 5.600500 10.60839380 5.441183e-01 6.38840581 0.28554563
## Abdo_n 15.417637 0.02943661 7.192511e-04 0.73219636 0.18424268
## Abdo_y 7.500472 0.01432051 3.499060e-04 0.35620363 0.08963157
##: Para visualizar la correlación entre las variables y las dimensiones principales de MCA se plantea lo siguiente.
fviz_mca_var(res.mca, choice = "mca.cor",
repel = TRUE, # Avoid text overlapping (slow)
ggtheme = theme_minimal())
##: El siguiente código R muestra las coordenadas de cada categoría de variable en cada dimensión (1, 2 y 3)
head(round(var$coord, 2), 4)
## Dim 1 Dim 2 Dim 3 Dim 4 Dim 5
## Nausea_n 0.27 0.12 -0.27 0.03 0.07
## Nausea_y -0.96 -0.43 0.95 -0.12 -0.26
## Vomit_n 0.48 -0.41 0.08 0.27 0.05
## Vomit_y -0.72 0.61 -0.13 -0.41 -0.08
##: Use la función fviz_mca_var() [de factoextra] para visualizar solo categorías de variables:
fviz_mca_var(res.mca,
repel = TRUE, # Avoid text overlapping (slow)
ggtheme = theme_minimal())
##: Es posible cambiar el color y la forma de los puntos variables usando los argumentos col.var y shape.var de la siguiente manera.
fviz_mca_var(res.mca, col.var="black", shape.var = 15,
repel = TRUE)
##: Las dos dimensiones 1 y 2 son suficientes para retener el 46% de la inercia total (variación) contenida en los datos. No todos los puntos se muestran igual de bien en las dos dimensiones. La calidad de la representación se denomina coseno al cuadrado (cos2), que mide el grado de asociación entre las categorías de variables y un eje particular.
En R es posible conocer estos valores de la siguiente forma.
head(var$cos2, 4)
## Dim 1 Dim 2 Dim 3 Dim 4 Dim 5
## Nausea_n 0.2562007 0.05280258 0.25274850 0.004084375 0.019466197
## Nausea_y 0.2562007 0.05280258 0.25274850 0.004084375 0.019466197
## Vomit_n 0.3442016 0.25116039 0.01070855 0.112294813 0.004126898
## Vomit_y 0.3442016 0.25116039 0.01070855 0.112294813 0.004126898
##: Esto permite la realización de la siguiente gráfica.
# Color by cos2 values: quality on the factor map
fviz_mca_var(res.mca, col.var = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE, # Avoid text overlapping
ggtheme = theme_minimal())
# Change the transparency by cos2 values
fviz_mca_var(res.mca, alpha.var="cos2",
repel = TRUE,
ggtheme = theme_minimal())
##: Puede visualizar el cos2 de las categorías de fila en todas las dimensiones usando el paquete corrplot:
library("corrplot")
corrplot(var$cos2, is.corr=FALSE)
# Cos2 of variable categories on Dim.1 and Dim.2
fviz_cos2(res.mca, choice = "var", axes = 1:2)
##: La contribución de las categorías de variables (en %) a la definición de las dimensiones se puede extraer de la siguiente manera
head(round(var$contrib,2), 4)
## Dim 1 Dim 2 Dim 3 Dim 4 Dim 5
## Nausea_n 1.52 0.81 4.67 0.08 0.49
## Nausea_y 5.43 2.91 16.73 0.30 1.76
## Vomit_n 3.73 7.07 0.36 4.26 0.19
## Vomit_y 5.60 10.61 0.54 6.39 0.29
# Contributions of rows to dimension 1
fviz_contrib(res.mca, choice = "var", axes = 1, top = 15)
# Contributions of rows to dimension 2
fviz_contrib(res.mca, choice = "var", axes = 2, top = 15)
# Total contribution to dimension 1 and 2
fviz_contrib(res.mca, choice = "var", axes = 1:2, top = 15)
##: Las categorías de variables más importantes (o contribuyentes) se pueden resaltar en el diagrama de dispersión de la siguiente manera:
fviz_mca_var(res.mca, col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE, # avoid text overlapping (slow)
ggtheme = theme_minimal()
)
##: También es posible controlar la transparencia de las categorías de variables según sus valores de contribución utilizando la opción alpha.var = “contrib”.
# Change the transparency by contrib values
fviz_mca_var(res.mca, alpha.var="contrib",
repel = TRUE, ggtheme = theme_minimal())
##: La función get_mca_ind()[de factoextra] se utiliza para extraer los resultados de las personas. Esta función devuelve una lista que contiene las coordenadas, el cos2 y las contribuciones de los individuos.
ind <- get_mca_ind(res.mca)
ind
## Multiple Correspondence Analysis Results for individuals
## ===================================================
## Name Description
## 1 "$coord" "Coordinates for the individuals"
## 2 "$cos2" "Cos2 for the individuals"
## 3 "$contrib" "contributions of the individuals"
##: Se hace lo siguiente para obtener acceso a los diferentes componentes.
# Coordinates of column points
head(ind$coord)
## Dim 1 Dim 2 Dim 3 Dim 4 Dim 5
## 1 -0.4525811 -0.26415072 0.17151614 0.01369348 -0.11696806
## 2 0.8361700 -0.03193457 -0.07208249 -0.08550351 0.51978710
## 3 -0.4481892 0.13538726 -0.22484048 -0.14170168 -0.05004753
## 4 0.8803694 -0.08536230 -0.02052044 -0.07275873 -0.22935022
## 5 -0.4481892 0.13538726 -0.22484048 -0.14170168 -0.05004753
## 6 -0.3594324 -0.43604390 -1.20932223 1.72464616 0.04348157
# Quality of representation
head(ind$cos2)
## Dim 1 Dim 2 Dim 3 Dim 4 Dim 5
## 1 0.34652591 0.1180447167 0.0497683175 0.0003172275 0.0231460846
## 2 0.55589562 0.0008108236 0.0041310808 0.0058126211 0.2148103098
## 3 0.54813888 0.0500176790 0.1379484860 0.0547920948 0.0068349171
## 4 0.74773962 0.0070299584 0.0004062504 0.0051072923 0.0507479873
## 5 0.54813888 0.0500176790 0.1379484860 0.0547920948 0.0068349171
## 6 0.02485357 0.0365775483 0.2813443706 0.5722083217 0.0003637178
# Contributions
head(ind$contrib)
## Dim 1 Dim 2 Dim 3 Dim 4 Dim 5
## 1 1.110927 0.98238297 0.498254685 0.003555817 0.31554778
## 2 3.792117 0.01435818 0.088003703 0.138637089 6.23134138
## 3 1.089470 0.25806722 0.856229950 0.380768961 0.05776914
## 4 4.203611 0.10259105 0.007132055 0.100387990 1.21319013
## 5 1.089470 0.25806722 0.856229950 0.380768961 0.05776914
## 6 0.700692 2.67693398 24.769968729 56.404214518 0.04360547
##: La función fviz_mca_ind() [de facto extra] se usa para visualizar solo individuos. También es posible colorear a los individuos por sus valores de cos2. Se realiza de la siguiente forma.
fviz_mca_ind(res.mca, col.ind = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE, # Avoid text overlapping (slow if many points)
ggtheme = theme_minimal())
##: El siguiente código R crea un gráfico de barras de individuos cos2 y contribuciones.
# Cos2 of individuals
fviz_cos2(res.mca, choice = "ind", axes = 1:2, top = 20)
# Contribution of individuals to the dimensions
fviz_contrib(res.mca, choice = "ind", axes = 1:2, top = 20)
##: En R también es posible colorear individuos por grupos.
fviz_mca_ind(res.mca,
label = "none", # hide individual labels
habillage = "Vomiting", # color by groups
palette = c("#00AFBB", "#E7B800"),
addEllipses = TRUE, ellipse.type = "confidence",
ggtheme = theme_minimal())
# habillage = index of the column to be used as grouping variable
fviz_mca_ind(res.mca, habillage = 2, addEllipses = TRUE)
fviz_mca_ind(res.mca, habillage = poison$Vomiting, addEllipses = TRUE)
##: Si se busca colorear individuos usando múltiples variables categóricas al mismo tiempo se emplea la función fviz_ellipses().
fviz_ellipses(res.mca, c("Vomiting", "Fever"),
geom = "point")
## Warning: `gather_()` was deprecated in tidyr 1.2.0.
## ℹ Please use `gather()` instead.
## ℹ The deprecated feature was likely used in the factoextra package.
## Please report the issue at <https://github.com/kassambara/factoextra/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
##: También se pueden especificar índices de variables categóricas
fviz_ellipses(res.mca, 1:4, geom = "point")
##: La función dimdesc() [en FactoMineR] se puede utilizar para identificar las variables más correlacionadas con una dimensión dada.
res.desc <- dimdesc(res.mca, axes = c(1,2))
# Description of dimension 1
res.desc[[1]]
##
## Link between the variable and the categorical variable (1-way anova)
## =============================================
## R2 p.value
## Abdominals 0.8451157 4.055640e-23
## Diarrhae 0.7994680 3.910776e-20
## Fever 0.7846788 2.600566e-19
## Mayo 0.3829749 4.756234e-07
## Vomiting 0.3442016 2.510738e-06
## Nausea 0.2562007 8.062777e-05
## Cheese 0.1944181 7.534834e-04
##
## Link between variable and the categories of the categorical variables
## ================================================================
## Estimate p.value
## Abdominals=Abdo_n 0.5671866 4.055640e-23
## Diarrhae=Diarrhea_n 0.5380920 3.910776e-20
## Fever=Fever_n 0.5330918 2.600566e-19
## Mayo=Mayo_n 0.4644981 4.756234e-07
## Vomiting=Vomit_n 0.3466915 2.510738e-06
## Nausea=Nausea_n 0.3547892 8.062777e-05
## Cheese=Cheese_n 0.3830043 7.534834e-04
## Cheese=Cheese_y -0.3830043 7.534834e-04
## Nausea=Nausea_y -0.3547892 8.062777e-05
## Vomiting=Vomit_y -0.3466915 2.510738e-06
## Mayo=Mayo_y -0.4644981 4.756234e-07
## Fever=Fever_y -0.5330918 2.600566e-19
## Diarrhae=Diarrhea_y -0.5380920 3.910776e-20
## Abdominals=Abdo_y -0.5671866 4.055640e-23
# Description of dimension 2
res.desc[[2]]
##
## Link between the variable and the categorical variable (1-way anova)
## =============================================
## R2 p.value
## Courgette 0.4464145 2.500166e-08
## Potato 0.3957543 2.690662e-07
## Vomiting 0.2511604 9.728027e-05
## Icecream 0.1409011 4.743927e-03
##
## Link between variable and the categories of the categorical variables
## ================================================================
## Estimate p.value
## Courgette=Courg_n 0.4176013 2.500166e-08
## Potato=Potato_y 0.4977523 2.690662e-07
## Vomiting=Vomit_y 0.1838104 9.728027e-05
## Icecream=Icecream_n 0.2597197 4.743927e-03
## Icecream=Icecream_y -0.2597197 4.743927e-03
## Vomiting=Vomit_n -0.1838104 9.728027e-05
## Potato=Potato_n -0.4977523 2.690662e-07
## Courgette=Courg_y -0.4176013 2.500166e-08
##: Para hacer un biplot de individuos y categorías variables se escribe lo siguiente.
# Biplot of individuals and variable categories
fviz_mca_biplot(res.mca, repel = TRUE,
ggtheme = theme_minimal())
fviz_mca_var(res.mca, choice = "mca.cor",
repel = TRUE)
##: El siguiente código R traza categorías de variables cualitativas (variables activas y complementarias):
fviz_mca_var(res.mca, repel = TRUE,
ggtheme= theme_minimal())
fviz_mca_ind(res.mca,
label = "ind.sup", #Show the label of ind.sup only
ggtheme = theme_minimal())
##: Si tiene muchos individuos/categorías de variables, es posible visualizar solo algunos de ellos usando los argumentos select.ind y select.var
# Visualize variable categories with cos2 >= 0.4
fviz_mca_var(res.mca, select.var = list(cos2 = 0.4))
# Top 10 active variables with the highest cos2
fviz_mca_var(res.mca, select.var= list(cos2 = 10))
# Select by names
name <- list(name = c("Fever_n", "Abdo_y", "Diarrhea_n",
"Fever_Y", "Vomit_y", "Vomit_n"))
fviz_mca_var(res.mca, select.var = name)
# top 5 contributing individuals and variable categories
fviz_mca_biplot(res.mca, select.ind = list(contrib = 5),
select.var = list(contrib = 5),
ggtheme = theme_minimal())
##: Independientemente de las funciones que decida usar, en la lista anterior, el paquete factoextra puede manejar la salida.
fviz_eig(res.mca) # Scree plot
fviz_mca_biplot(res.mca) # Biplot of rows and columns