Definición

Análisis de correspondencia (ca) es una extensión del análisis de componentes principales (pca) adecuado para manejar variables cualitativas (o datos categóricos).

Ca se utiliza para analizar frecuencias formadas por datos categóricos (es decir, tabla de contengencia) y proporciona puntuaciones de factores (coordenadas) tanto para las filas como para las columnas de la tabla de contingencia. Estas coordenadas se utilizan para visualizar gráficamente la asociación entre las variables de fila y columna en la tabla de contingencia.

librerias

library("FactoMineR")
library("factoextra")
library(ca)

datos con formato tablas de contingencia

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

Visualizar una tabla de contingencia usando matriz gráfica

library(gplots)
# 1. convert the data as a table
dt <- as.table(as.matrix(housetasks))
# 2. Graph
balloonplot(t(dt), main ="housetasks", xlab ="", ylab="",
            label = T, show.margins = T)

Estadística chi-cuadrado

Otro método para analizar una tabla de frecuencia es utilizar la prueba de independencia de la ji cuadrada. La prueba de ji cuadrado evalúa si existe una dependencia significativa entre las categorías de fila y columna.

Chi-cuadrado estadística se puede calcular fácilmente utilizando la función chisq.test () como sigue:

chisq <- chisq.test(housetasks)
chisq
## 
##  Pearson's Chi-squared test
## 
## data:  housetasks
## X-squared = 1944.5, df = 36, p-value < 2.2e-16

En nuestro ejemplo, la fila y las variables de la columna se asocian estadísticamente significativamente (p-valor = 0).

Análisis de correspondencia (ca)

Los métodos eda descritos en las secciones anteriores son útiles sólo para la tabla de contingencia pequeña. Para una gran tabla de contingencia, los enfoques estadísticos, como ca, son necesarios para reducir la dimensión de los datos sin perder la información más importante. En otras palabras, ca se utiliza para visualizar gráficamente puntos de fila y puntos de columna en un espacio de baja dimensión.

Se puede utilizar la función ca () [en el paquete factominer]. Un formato simplificado es:

res.ca <- CA(housetasks, graph = FALSE)
summary(res.ca, nb.dec = 2, ncp = 2)
## 
## Call:
## CA(X = housetasks, graph = FALSE) 
## 
## The chi square of independence between the two variables is equal to 1944.456 (p-value =  0 ).
## 
## Eigenvalues
##                       Dim.1  Dim.2  Dim.3
## Variance               0.54   0.45   0.13
## % of var.             48.69  39.91  11.40
## Cumulative % of var.  48.69  88.60 100.00
## 
## Rows (the 10 first)
##               Iner*1000    Dim.1    ctr   cos2    Dim.2    ctr   cos2  
## Laundry     |    134.16 |  -0.99  18.29   0.74 |   0.50   5.56   0.18 |
## Main_meal   |     90.69 |  -0.88  12.39   0.74 |   0.49   4.74   0.23 |
## Dinner      |     38.25 |  -0.69   5.47   0.78 |   0.31   1.32   0.15 |
## Breakfeast  |     41.12 |  -0.51   3.82   0.50 |   0.45   3.70   0.40 |
## Tidying     |     24.67 |  -0.39   2.00   0.44 |  -0.43   2.97   0.54 |
## Dishes      |     19.59 |  -0.19   0.43   0.12 |  -0.44   2.84   0.65 |
## Shopping    |     14.97 |  -0.12   0.18   0.06 |  -0.40   2.52   0.75 |
## Official    |     53.30 |   0.23   0.52   0.05 |   0.25   0.80   0.07 |
## Driving     |    101.51 |   0.74   8.08   0.43 |   0.65   7.65   0.34 |
## Finances    |     29.56 |   0.27   0.88   0.16 |  -0.62   5.56   0.84 |
## 
## Columns
##               Iner*1000    Dim.1    ctr   cos2    Dim.2    ctr   cos2  
## Wife        |    301.02 |  -0.84  44.46   0.80 |   0.37  10.31   0.15 |
## Alternating |    117.82 |  -0.06   0.10   0.00 |   0.29   2.78   0.11 |
## Husband     |    381.37 |   1.16  54.23   0.77 |   0.60  17.79   0.21 |
## Jointly     |    314.72 |   0.15   1.20   0.02 |  -1.03  69.12   0.98 |

El resultado de la función summary () contiene la estadística chi-cuadrado y 3 tablas:

Tabla 1 - valores propios: la tabla 1 contiene las varianzas y el porcentaje de varianzas retenidas por cada dimensión. La tabla 2 contiene las coordenadas, la contribución y el cos2 (calidad de representación [en 0-1]) de las primeras 10 variables de fila activa en las dimensiones 1 y 2. La tabla 3 contiene las coordenadas, la contribución y el cos2 (calidad de representación [en 0-1]) de las primeras 10 variables de columna activas en las dimensiones 1 y 2.

Interpretación de las salidas ca

Importancia de la asociación entre filas y columnas

Para interpretar el análisis de correspondencia, el primer paso es evaluar si existe una dependencia significativa entre las filas y las columnas.

Hay dos métodos para inspeccionar el significado:

Usando el rastro Usando la estadística del chi-cuadrado La traza es la inercia total de la tabla (es decir, la suma de los valores propios). La raíz cuadrada de la traza se interpreta como el coeficiente de correlación entre filas y columnas.

El coeficiente de correlación se calcula de la siguiente manera:

eig <- get_eigenvalue(res.ca)
trace <- sum(eig$eigenvalue) 
cor.coef <- sqrt(trace)
cor.coef
## [1] 1.055907

En nuestro ejemplo, el coeficiente de correlación es 1.0559074 lo que indica una fuerte asociación entre las variables de fila y columna.

Autovalores y parcela

El número de dimensiones a retener en la solución se puede determinar examinando la tabla de valores propios.

Como se mencionó anteriormente, traza es la suma total de valores propios. Para un eje dado, la relación entre el valor propio del eje y la traza se denomina porcentaje de varianza (o inercia total o valor chi cuadrado) explicado por ese eje.

La proporción de varianzas retenidas por las diferentes dimensiones (ejes) se puede extraer usando la función get_eigenvalue () [in factoextra] como sigue:

eigenvalues <- get_eigenvalue(res.ca)
head(round(eigenvalues, 2))
##       eigenvalue variance.percent cumulative.variance.percent
## Dim.1       0.54            48.69                       48.69
## Dim.2       0.45            39.91                       88.60
## Dim.3       0.13            11.40                      100.00

Los valores propios corresponden a la cantidad de información retenida por cada eje. Las dimensiones se ordenan de forma decreciente y se enumeran de acuerdo con la cantidad de varianza explicada en la solución. La dimensión 1 explica la mayor varianza en la solución, seguida por la dimensión 2 y así sucesivamente.

No hay una “regla de oro” para elegir el número de dimensión a mantener para la interpretación de datos. Depende de la pregunta de investigación y de la necesidad del investigador. Por ejemplo, si está satisfecho con 80 de la inercia total explicada a continuación, utilice el número de dimensiones necesarias para lograrlo.

Otro método consiste en inspeccionar visualmente la parcela en la que las dimensiones se ordenan de forma decreciente de acuerdo con la cantidad de inercia explicada.

La función fviz_screeplot () [in factoextra package] se puede utilizar para dibujar la parcela de scree (los porcentajes de inercia explicados por las dimensiones ca):

fviz_screeplot(res.ca, addlabels=T)

Diagrama de dispersión: biplot de variables de fila y columna

The function plot.CA()[in FactoMineR] can be used to plot the coordinates of rows and columns presented in the correspondence analysis output.

fviz_ca_biplot(res.ca)

El gráfico anterior se denomina gráfico simétrico y muestra un patrón global dentro de los datos. Las filas están representadas por puntos azules y columnas por triángulos rojos.

La distancia entre cualquier punto de fila o punto de columna da una medida de su similitud (o disimilitud).

Los puntos de la fila con el perfil similar se cierran en el mapa del factor. Lo mismo ocurre con los puntos de columna.

El siguiente paso para la interpretación es determinar qué variables de fila y columna contribuyen más en la definición de las diferentes dimensiones retenidas en el modelo.

Variables de fila

La función get_ca_row () [in factoextra] 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"
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
fviz_ca_row(res.ca, repel = T)

plot(res.ca, invisible="col")

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
library("corrplot")
corrplot(row$contrib, is.corr=FALSE)

fviz_contrib(res.ca, choice = "row", axes = 1)

fviz_contrib(res.ca, choice = "row", axes = 2)

fviz_contrib(res.ca, choice = "row", axes = 1, top = 5)

variables columna

La función get_ca_col () [in factoextra] 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 columnas variables:

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"
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
fviz_ca_col(res.ca)

plot(res.ca, invisible="row") 

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

Biplot

fviz_ca_biplot(res.ca, repel = T)