ANALISIS DE CORRESPONDENCIAS MULTIPLES (MCA)

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.

MCA se usa generalmente para analizar un conjunto de datos de una encuesta. El objetivo es identificar:

A continuacion, se va a calcular y visualizar análisis de correspondencias múltiples en el software \(\mathrm{R}\) usando FactoMineR (para el análisis) y factoextra (para la visualización de datos).

library(FactoMineR)
library(factoextra)
library(gplots)
library(corrplot)
library(dplyr)
library(readxl)

base<- read_excel("C:/Users/wsand/Downloads/base_diciembre_audiometrias (5).xlsx")
## New names:
## • `` -> `...1`
dim(base)
## [1] 10311    20
poison=base[3:20]
poison
## # A tibble: 10,311 × 18
##    HIPOACUSIA TIPOZONA…¹ TRATA…² HABIT…³ HABIT…⁴ HABIT…⁵ HABIT…⁶ FUMAO…⁷ TIENE…⁸
##         <dbl>      <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
##  1          0          0       0       1       1       0       0       0       0
##  2          0          0       0       0       0       0       0       0       0
##  3          1          0       0       0       0       0       0       1       0
##  4          0          1       0       1       0       0       0       0       0
##  5          0          1       0       1       0       0       0       0       0
##  6          0          1       0       0       0       0       0       0       0
##  7          0          1       0       1       0       1       0       0       0
##  8          0          1       0       1       0       1       0       0       0
##  9          1          1       0       1       0       0       0       0       0
## 10          0          1       0       1       0       0       0       1       0
## # … with 10,301 more rows, 9 more variables:
## #   EXAMENFÍSICOCONDUCTOAUDITIVOEXTERNOOD <dbl>,
## #   EXAMENFÍSICOCONDUCTOAUDITIVOEXTERNOOI <dbl>,
## #   EXAMENFÍSICOMEMBRANATIMPANICAOD <dbl>,
## #   EXAMENFÍSICOMEMBRANATIMPANICAOI <dbl>, HAPRESENTADOALGÚNSÍNTOMA <dbl>,
## #   PERCIBERUIDOENLAVIVIENDA <dbl>, ENALGUNAACTIVIDADLEMOLESTAELRUIDO <dbl>,
## #   MOLESTIARUIDOENACTIVIDADESEXTRAMURALES <dbl>, …
## # ℹ Use `print(n = ...)` to see more rows, and `colnames()` to see all variable names
dim(poison)
## [1] 10311    18
poison%>%DT::datatable()
## Warning in instance$preRenderHook(instance): It seems your data is too big
## for client-side DataTables. You may consider server-side processing: https://
## rstudio.github.io/DT/server.html
#balloonplot(as.table(t(as.matrix(poison))), label=F, main="Tareas del hogar")

observemos la frecuencias de la comida consumida

summary(poison)
##    HIPOACUSIA     TIPOZONAEXPOSICIÓNARUIDO
##  Min.   :0.0000   Min.   :0.0000          
##  1st Qu.:0.0000   1st Qu.:0.0000          
##  Median :0.0000   Median :1.0000          
##  Mean   :0.3544   Mean   :0.5161          
##  3rd Qu.:1.0000   3rd Qu.:1.0000          
##  Max.   :1.0000   Max.   :1.0000          
##  TRATAMIENTOCONALGUNMEDICAMENTOOTOTÓXICOPORMÁSDEDOSMESES
##  Min.   :0.00000                                        
##  1st Qu.:0.00000                                        
##  Median :0.00000                                        
##  Mean   :0.03569                                        
##  3rd Qu.:0.00000                                        
##  Max.   :1.00000                                        
##  HABITOAUDIFONOSRECREACIONAL HABITOMOTOCICLETA HABITODISCOTECA 
##  Min.   :0.0000              Min.   :0.00000   Min.   :0.0000  
##  1st Qu.:0.0000              1st Qu.:0.00000   1st Qu.:0.0000  
##  Median :0.0000              Median :0.00000   Median :0.0000  
##  Mean   :0.2677              Mean   :0.08224   Mean   :0.1328  
##  3rd Qu.:1.0000              3rd Qu.:0.00000   3rd Qu.:0.0000  
##  Max.   :1.0000              Max.   :1.00000   Max.   :1.0000  
##    HABITOTEJO       FUMAOFUMÓ      TIENEALGÚNFAMILIARCONPERDIDASAUDITIVAS
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.0000                        
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000                        
##  Median :0.0000   Median :0.0000   Median :0.0000                        
##  Mean   :0.0545   Mean   :0.1499   Mean   :0.1208                        
##  3rd Qu.:0.0000   3rd Qu.:0.0000   3rd Qu.:0.0000                        
##  Max.   :1.0000   Max.   :1.0000   Max.   :1.0000                        
##  EXAMENFÍSICOCONDUCTOAUDITIVOEXTERNOOD EXAMENFÍSICOCONDUCTOAUDITIVOEXTERNOOI
##  Min.   :0.0000                        Min.   :0.0000                       
##  1st Qu.:0.0000                        1st Qu.:0.0000                       
##  Median :0.0000                        Median :0.0000                       
##  Mean   :0.1143                        Mean   :0.1119                       
##  3rd Qu.:0.0000                        3rd Qu.:0.0000                       
##  Max.   :1.0000                        Max.   :1.0000                       
##  EXAMENFÍSICOMEMBRANATIMPANICAOD EXAMENFÍSICOMEMBRANATIMPANICAOI
##  Min.   :0.0000                  Min.   :0.000                  
##  1st Qu.:0.0000                  1st Qu.:0.000                  
##  Median :0.0000                  Median :0.000                  
##  Mean   :0.1395                  Mean   :0.133                  
##  3rd Qu.:0.0000                  3rd Qu.:0.000                  
##  Max.   :1.0000                  Max.   :1.000                  
##  HAPRESENTADOALGÚNSÍNTOMA PERCIBERUIDOENLAVIVIENDA
##  Min.   :0.000            Min.   :0.0000          
##  1st Qu.:0.000            1st Qu.:0.0000          
##  Median :1.000            Median :1.0000          
##  Mean   :0.533            Mean   :0.6762          
##  3rd Qu.:1.000            3rd Qu.:1.0000          
##  Max.   :1.000            Max.   :1.0000          
##  ENALGUNAACTIVIDADLEMOLESTAELRUIDO MOLESTIARUIDOENACTIVIDADESEXTRAMURALES
##  Min.   :0.0000                    Min.   :0.0000                        
##  1st Qu.:0.0000                    1st Qu.:0.0000                        
##  Median :1.0000                    Median :1.0000                        
##  Mean   :0.5754                    Mean   :0.6898                        
##  3rd Qu.:1.0000                    3rd Qu.:1.0000                        
##  Max.   :1.0000                    Max.   :1.0000                        
##  SÍNDROMEALTERACIÓNENSALUD
##  Min.   :0.0000           
##  1st Qu.:0.0000           
##  Median :0.0000           
##  Mean   :0.2878           
##  3rd Qu.:1.0000           
##  Max.   :1.0000
colnames(poison)
##  [1] "HIPOACUSIA"                                             
##  [2] "TIPOZONAEXPOSICIÓNARUIDO"                               
##  [3] "TRATAMIENTOCONALGUNMEDICAMENTOOTOTÓXICOPORMÁSDEDOSMESES"
##  [4] "HABITOAUDIFONOSRECREACIONAL"                            
##  [5] "HABITOMOTOCICLETA"                                      
##  [6] "HABITODISCOTECA"                                        
##  [7] "HABITOTEJO"                                             
##  [8] "FUMAOFUMÓ"                                              
##  [9] "TIENEALGÚNFAMILIARCONPERDIDASAUDITIVAS"                 
## [10] "EXAMENFÍSICOCONDUCTOAUDITIVOEXTERNOOD"                  
## [11] "EXAMENFÍSICOCONDUCTOAUDITIVOEXTERNOOI"                  
## [12] "EXAMENFÍSICOMEMBRANATIMPANICAOD"                        
## [13] "EXAMENFÍSICOMEMBRANATIMPANICAOI"                        
## [14] "HAPRESENTADOALGÚNSÍNTOMA"                               
## [15] "PERCIBERUIDOENLAVIVIENDA"                               
## [16] "ENALGUNAACTIVIDADLEMOLESTAELRUIDO"                      
## [17] "MOLESTIARUIDOENACTIVIDADESEXTRAMURALES"                 
## [18] "SÍNDROMEALTERACIÓNENSALUD"
poison$HIPOACUSIA<- factor(poison$HIPOACUSIA)
#poison$TIPOZONAEXPOSICIÓNARUIDO <-factor(poison$TIPOZONAEXPOSICIÓNARUIDO)
#poison$TRATAMIENTOCONALGUNMEDICAMENTOOTOTÓXICOPORMÁSDEDOSMESES<-factor(poison$TRATAMIENTOCONALGUNMEDICAMENTOOTOTÓXICOPORMÁSDEDOSMESES)
#poison$HABITOAUDIFONOSRECREACIONAL <-factor(poison$HABITOAUDIFONOSRECREACIONAL)
poison$HABITOAUDIFONOSRECREACIONAL<-factor(poison$HABITOAUDIFONOSRECREACIONAL)
#poison$HAPRESENTADONINGUNSÍNTOMA<-factor(poison$HAPRESENTADONINGUNSÍNTOMA)
poison$EXAMENFÍSICOMEMBRANATIMPANICAOD<-factor(poison$EXAMENFÍSICOMEMBRANATIMPANICAOD)
poison$MOLESTIARUIDOENACTIVIDADESEXTRAMURALES<-factor(poison$MOLESTIARUIDOENACTIVIDADESEXTRAMURALES)
poison$TRATAMIENTOCONALGUNMEDICAMENTOOTOTÓXICOPORMÁSDEDOSMESES<-factor(poison$TRATAMIENTOCONALGUNMEDICAMENTOOTOTÓXICOPORMÁSDEDOSMESES)
poison$TIPOZONAEXPOSICIÓNARUIDO<-factor(poison$TIPOZONAEXPOSICIÓNARUIDO)
poison$HABITODISCOTECA<-factor(poison$HABITODISCOTECA)
poison$HABITOTEJO<-factor(poison$HABITOTEJO)
poison$EXAMENFÍSICOMEMBRANATIMPANICAOI<-factor(poison$EXAMENFÍSICOMEMBRANATIMPANICAOI)
poison$SÍNDROMEALTERACIÓNENSALUD<-factor(poison$SÍNDROMEALTERACIÓNENSALUD)
poison$FUMAOFUMÓ <- factor(poison$FUMAOFUMÓ)
poison$HABITOMOTOCICLETA<-factor(poison$HABITOMOTOCICLETA)
for (i in 1:4) {
  plot(poison[, i], main=colnames(poison) [i],
        ylab ="Count", col="steelblue", las =2)
  }

Tabla de contingencia nauseas vs los que consumieron mayoneasa

poison
## # A tibble: 10,311 × 18
##    HIPOACUSIA TIPOZONA…¹ TRATA…² HABIT…³ HABIT…⁴ HABIT…⁵ HABIT…⁶ FUMAO…⁷ TIENE…⁸
##    <fct>      <fct>      <fct>   <fct>   <fct>   <fct>   <fct>   <fct>     <dbl>
##  1 0          0          0       1       1       0       0       0             0
##  2 0          0          0       0       0       0       0       0             0
##  3 1          0          0       0       0       0       0       1             0
##  4 0          1          0       1       0       0       0       0             0
##  5 0          1          0       1       0       0       0       0             0
##  6 0          1          0       0       0       0       0       0             0
##  7 0          1          0       1       0       1       0       0             0
##  8 0          1          0       1       0       1       0       0             0
##  9 1          1          0       1       0       0       0       0             0
## 10 0          1          0       1       0       0       0       1             0
## # … with 10,301 more rows, 9 more variables:
## #   EXAMENFÍSICOCONDUCTOAUDITIVOEXTERNOOD <dbl>,
## #   EXAMENFÍSICOCONDUCTOAUDITIVOEXTERNOOI <dbl>,
## #   EXAMENFÍSICOMEMBRANATIMPANICAOD <fct>,
## #   EXAMENFÍSICOMEMBRANATIMPANICAOI <fct>, HAPRESENTADOALGÚNSÍNTOMA <dbl>,
## #   PERCIBERUIDOENLAVIVIENDA <dbl>, ENALGUNAACTIVIDADLEMOLESTAELRUIDO <dbl>,
## #   MOLESTIARUIDOENACTIVIDADESEXTRAMURALES <fct>, …
## # ℹ Use `print(n = ...)` to see more rows, and `colnames()` to see all variable names
table(poison[,c(1,4)])
##           HABITOAUDIFONOSRECREACIONAL
## HIPOACUSIA    0    1
##          0 4518 2139
##          1 3033  621

Tabla de contingencia nauseas vs los que consumieron mayonesa y vomito

table(poison[,c(1,2,3)])
## , , TRATAMIENTOCONALGUNMEDICAMENTOOTOTÓXICOPORMÁSDEDOSMESES = 0
## 
##           TIPOZONAEXPOSICIÓNARUIDO
## HIPOACUSIA    0    1
##          0 3366 3133
##          1 1450 1994
## 
## , , TRATAMIENTOCONALGUNMEDICAMENTOOTOTÓXICOPORMÁSDEDOSMESES = 1
## 
##           TIPOZONAEXPOSICIÓNARUIDO
## HIPOACUSIA    0    1
##          0   84   74
##          1   90  120

Una forma más apropiada

Para observar todas las variables cualitativas en una sola tabla es usando la funcion Burt

library("GDAtools")
#burt(poison[,c(1,2,3,4)])

Análisis de correspondencia Múltiple

colnames(poison)
##  [1] "HIPOACUSIA"                                             
##  [2] "TIPOZONAEXPOSICIÓNARUIDO"                               
##  [3] "TRATAMIENTOCONALGUNMEDICAMENTOOTOTÓXICOPORMÁSDEDOSMESES"
##  [4] "HABITOAUDIFONOSRECREACIONAL"                            
##  [5] "HABITOMOTOCICLETA"                                      
##  [6] "HABITODISCOTECA"                                        
##  [7] "HABITOTEJO"                                             
##  [8] "FUMAOFUMÓ"                                              
##  [9] "TIENEALGÚNFAMILIARCONPERDIDASAUDITIVAS"                 
## [10] "EXAMENFÍSICOCONDUCTOAUDITIVOEXTERNOOD"                  
## [11] "EXAMENFÍSICOCONDUCTOAUDITIVOEXTERNOOI"                  
## [12] "EXAMENFÍSICOMEMBRANATIMPANICAOD"                        
## [13] "EXAMENFÍSICOMEMBRANATIMPANICAOI"                        
## [14] "HAPRESENTADOALGÚNSÍNTOMA"                               
## [15] "PERCIBERUIDOENLAVIVIENDA"                               
## [16] "ENALGUNAACTIVIDADLEMOLESTAELRUIDO"                      
## [17] "MOLESTIARUIDOENACTIVIDADESEXTRAMURALES"                 
## [18] "SÍNDROMEALTERACIÓNENSALUD"
poison_active_mca=MCA(poison[,c(1,2,3,4,5,6,7,8,12,13,17)], graph = F)
poison_active_mca
## **Results of the Multiple Correspondence Analysis (MCA)**
## The analysis was performed on 10311 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"
get_eigenvalue(poison_active_mca)
##        eigenvalue variance.percent cumulative.variance.percent
## Dim.1  0.15342114        15.342114                    15.34211
## Dim.2  0.13485006        13.485006                    28.82712
## Dim.3  0.11859058        11.859058                    40.68618
## Dim.4  0.10417987        10.417987                    51.10416
## Dim.5  0.08742382         8.742382                    59.84655
## Dim.6  0.08428616         8.428616                    68.27516
## Dim.7  0.07891360         7.891360                    76.16652
## Dim.8  0.07182832         7.182832                    83.34935
## Dim.9  0.06645991         6.645991                    89.99535
## Dim.10 0.06418586         6.418586                    96.41393
## Dim.11 0.03586068         3.586068                   100.00000
fviz_screeplot(poison_active_mca,addlabel=T)

corrplot(poison_active_mca$var$cos2, tl.cex=0.4)

corrplot(poison_active_mca$var$contrib*0.01, tl.cex=0.4)

fviz_mca_var(poison_active_mca, repel = F, col.var = "cos2", gradient.cols=c("red", "yellow", "green"), cex=0.3)
## Warning: Duplicated aesthetics after name standardisation: size

fviz_mca_var(poison_active_mca, repel = F, choice = "mca.cor" )

fviz_mca_var(poison_active_mca, repel = F, axes = c(1,3),choice = "mca.cor" )

fviz_mca_biplot(poison_active_mca,  col.var = "cos2", gradient.cols=c("red", "yellow", "green"), arrows = c(T,F))
## Scale for 'colour' is already present. Adding another scale for 'colour',
## which will replace the existing scale.