La idea

  • Una técnica descriptiva de interdependencia para análisis multivariado de datos categóricos (nominales y/o ordinales). La aproximación es geométrica y tiene dos enfoques equivalentes:

    1. La primera y que usaremos: CA es una extensión de la Análisis de Componentes Principales (PCA) para datos categóricos (Tablas de contingencia). Se reduce la información contenida en una tabla de contingencia representando las variables en espacio de menor dimensión. Esta técnica es distinta CatPCA (orden y distancias entre categorías).
    2. Asignar valores numéricos a variables cualitativas (Escalado multidimensional).
  • Inicialmente fue desarrollada por Jean-Paul Benzecri (1960).

  • Las tablas de contingencia son analizadas uniendo dos conjuntos correspondientes: el que está representado por las filas (perfil de filas) y el representado por las columnas (perfil de columnas). Se busca analizar la relación (no-lineal) entre las categorias de las variables.

  • Usando las cargas factoriales (coordenadas), que representan las categorías de las variables, gráficamente (mapas perceptuales) se puede explorar la relación entre las variables de la tabla de contingencia.

  • Se generan más hipótesis que con una simple prueba de independencia. El estadístico \(\chi²\) se puede descomponer en componentes correpondientes a las dimensiones de la heterogeneidad entre filas y columnas (factores ortogonales). ¿Cuál es la diferencia entre los datos observados y los datos hipotéticos si las variables fueran independientes?. CA estudia las desviaciones de la independencia.

  • CA es más útil en conjunto con otras técnicas formales: modelos log-lineales o logísticos.

CA simple

Un ejemplo ficticio tomado de Greenacre (1984). En una organización se encuestan gerentes, empleados y secretarias para conocer sus hábitos de fumar.

library(ca)
data("smoke")

N <- smoke

library(gplots)
# 2. Graph
balloonplot(t(as.table(as.matrix(N))), main ="Hábitos de fumar en la organización", xlab ="", ylab="",
            label = T, show.margins = T)

  • SM y JM: Gerentes Seniors y Juniors
  • SE y JE: Empleados Seniors y Juniors
  • SC: Secretarias

Podemos evaluar la independencia entre el grupo y los hábitos de fumar

pander(chisq.test(N))
Pearson’s Chi-squared test: N
Test statistic df P value
16.44 12 0.1718
#pander(fisher.test(datos,workspace = 10^7)) # No converge

El algebra de CA

  • Para una muestra de tamaño \(n\), considere una tabla de contingencia \(N=\left \{ n_{ij} \right \}_{I*J}\) Sean \(n_{i.}\) y \(n_{.j}\) los totales para la fila \(i\) y la columna \(j\) respectivamente.

  • Considere el estadístico \[\chi²= \sum_{i=1}^I \sum_{j=1}^J=\frac{(n_{ij}-E_{ij})^2}{E_{ij}}\] donde \(E_{ij}=\frac{n_{i.}n_{.j}}{n}\) bajo independencia. Es posible decomponer la Inercia total (\(\chi²/n\)) en componentes ortogonales:

  • CA analiza la matriz de correspondencias \(P=N/n\) (frecuencias relativas). Los totales por fila y columna respectivamente se denotan \(r_i=n_{i.}/n\) y \(c_j=n_{.j}/n\). Estas frecuencias relativas marginales son llamadas masas.

(n <- sum(N))
[1] 193
balloonplot(t(as.table(as.matrix(N/n))), main ="Hábitos de fumar en la organización", xlab ="", ylab="",
            label = T, show.margins = T)

  • Las masas son usadas para centrar y normalizar a \(P\) y obtener la matriz de residuales estandarizados, \[ S=\left \{ n_{ij} \right \}_{I*J}=\left\{ \frac{p_{ij}-r_ic_j}{\sqrt{r_ic_j}} \right\}_{I*J} \] o en notación matricial, \[S=D_r^{-1/2}(P-rc^t)D_c^{-1/2}\] donde \(r\) y \(c\) son los vectores de masas y \(D_r\) y \(D_c\) son matrices diagonales con las masas en sus diagonales y \(D_r^{-1/2}\) es la raíz cuadrada de la matríz inversa de \(D_r\). Se puede ver que \(traza(SS^t)=\)Inercia total, la varibilidad total en \(P\).
(r <- rowSums(N)/n)
        SM         JM         SE         JE         SC 
0.05699482 0.09326425 0.26424870 0.45595855 0.12953368 
(Dr <- diag(r))
           [,1]       [,2]      [,3]      [,4]      [,5]
[1,] 0.05699482 0.00000000 0.0000000 0.0000000 0.0000000
[2,] 0.00000000 0.09326425 0.0000000 0.0000000 0.0000000
[3,] 0.00000000 0.00000000 0.2642487 0.0000000 0.0000000
[4,] 0.00000000 0.00000000 0.0000000 0.4559585 0.0000000
[5,] 0.00000000 0.00000000 0.0000000 0.0000000 0.1295337
# Forma diagonal de Jordan para Dr (T·J·T⁻¹)
X = eigen(Dr)
T = X$vectors
J = diag( x=X$values )
Tinv = solve(T)
# T %*% J %*% Tinv
Jinvsqrt = diag( x=1/sqrt( X$values ) )
Drinvsqrt = T %*% Jinvsqrt %*% Tinv



(c <- colSums(N)/n)
     none     light    medium     heavy 
0.3160622 0.2331606 0.3212435 0.1295337 
(Dc <- diag(c))
          [,1]      [,2]      [,3]      [,4]
[1,] 0.3160622 0.0000000 0.0000000 0.0000000
[2,] 0.0000000 0.2331606 0.0000000 0.0000000
[3,] 0.0000000 0.0000000 0.3212435 0.0000000
[4,] 0.0000000 0.0000000 0.0000000 0.1295337
# Forma diagonal de Jordan para Dc (T·J·T⁻¹)
X = eigen(Dc)
T = X$vectors
J = diag( x=X$values )
Tinv = solve(T)
# T %*% J %*% Tinv # cheuqeo
Jinvsqrt = diag( x=1/sqrt( X$values ) )
Dcinvsqrt = T %*% Jinvsqrt %*% Tinv


P <- as.matrix(N/n)

S <- Drinvsqrt %*% (P-r%*%t(c)) %*% Dcinvsqrt

n*sum(diag(S %*% t(S)))
[1] 16.44164
svd(S %*% t(S))
$d
[1] 7.475911e-02 1.001718e-02 4.135741e-04 2.922294e-18 1.443054e-18

$u
            [,1]        [,2]       [,3]        [,4]        [,5]
[1,] -0.05742524 -0.46212293  0.8332653 -0.13805296  0.26411170
[2,]  0.28923816 -0.74239515 -0.5061482 -0.22104268  0.24524446
[3,] -0.71554563 -0.05475038 -0.1303234 -0.65875305 -0.18454562
[4,]  0.57530335  0.38957951  0.1097504 -0.70478995  0.09208598
[5,] -0.26469630  0.28376408 -0.1430158  0.03737715  0.90970504

$v
            [,1]        [,2]       [,3]        [,4]        [,5]
[1,] -0.05742524 -0.46212293  0.8332653 0.149932499  0.25755359
[2,]  0.28923816 -0.74239515 -0.5061482 0.231977332  0.23492813
[3,] -0.71554563 -0.05475038 -0.1303234 0.649669463 -0.21434145
[4,]  0.57530335  0.38957951  0.1097504 0.708251204  0.05990773
[5,] -0.26469630  0.28376408 -0.1430158 0.004072341  0.91046347
# Contribución a la inercia por filas
  • Así, la inercia puede ser descompuesta a través de la descomposición en valores singulares (SVD), \(S=U\Sigma V^t\). Las columnas \(U\) son los vectores singulares izquierdos y las columnas de V son los vectores singulares derechos. La matriz diagonal \(\Sigma\) contiene los valores singulares \(\sigma_1 \geq...\geq \sigma_{rango(S)} >0\). Los vectores singulares son ortonormales (\(U^tU=I\) y \(V^tV=I\)). Por tanto, \[ SS^t=V\Sigma^2 V^t=V\Lambda V^t \] \[ S^tS=U\Sigma^2 U^t=U\Lambda U^t \] Los cuadrados de los valores singulares \(\sigma^2\) en \(\Sigma^2\) corresponden a los autovalores de \(SS^t\) (\(\lambda\) en \(\Lambda\)). En el contexto de CA, los autovalores son llamados incercias principales \[\sum \lambda=traza(\Lambda)=traza(SS^t )=Inercia\]

  • Coordendas principales para los mapas:
    • Coordendas principales de las filas: \(F=D_r^{-1/2}U\Sigma\)
    • Coordendas estandarizadas de las filas: \(X=D_r^{-1/2}U\)
    • Coordendas principales de las columnas: \(G=D_c^{-1/2}V\Sigma\)
    • Coordendas estandarizadas de las columnas: \(Y=D_c^{-1/2}V\)
  • Para los mapas se usan las dos primeras coordenadas. Ellas explican una proporción de la inercia total \(\frac{\lambda_1+\lambda_2}{\sum \lambda}\).

Perfiles y Perfiles promedios (crudos=Masas)

Perfiles por fila (Grupo laboral)

N_tot <- cbind(N,Total=rowSums(N))
N_tot <- rbind(N_tot,Total=colSums(N_tot))
N_tot
none light medium heavy Total
SM 4 2 3 2 11
JM 4 3 7 4 18
SE 25 10 12 4 51
JE 18 24 33 13 88
SC 10 6 7 2 25
Total 61 45 62 25 193
perfil_fila <-
prop.table(as.matrix(N_tot[,-ncol(N_tot)]),1) # Row prof

perfil_fila
           none     light    medium      heavy
SM    0.3636364 0.1818182 0.2727273 0.18181818
JM    0.2222222 0.1666667 0.3888889 0.22222222
SE    0.4901961 0.1960784 0.2352941 0.07843137
JE    0.2045455 0.2727273 0.3750000 0.14772727
SC    0.4000000 0.2400000 0.2800000 0.08000000
Total 0.3160622 0.2331606 0.3212435 0.12953368

El perfil de los gerentes senior es

prop.table(as.matrix(N_tot[,-ncol(N_tot)]),1)[1,] # Row prof
     none     light    medium     heavy 
0.3636364 0.1818182 0.2727273 0.1818182 

El perfil promedio (crudo) del hábito de fumar (Sin discriminar por grupo laboral) es

prop.table(as.matrix(N_tot[,-ncol(N_tot)]),1)[nrow(N)+1,] # Row prof
     none     light    medium     heavy 
0.3160622 0.2331606 0.3212435 0.1295337 

Para el análisis se comparan los perfiles de los grupos laborales entre ellos y/o con el perfil crudo (razones de contingencia).

prop.table(as.matrix(N_tot[,-ncol(N_tot)]),1)[1,] / prop.table(as.matrix(N_tot[,-ncol(N_tot)]),1)[nrow(N)+1,]
     none     light    medium     heavy 
1.1505216 0.7797980 0.8489736 1.4036364 

Perfiles de columna (Hábitos)

N_tot
none light medium heavy Total
SM 4 2 3 2 11
JM 4 3 7 4 18
SE 25 10 12 4 51
JE 18 24 33 13 88
SC 10 6 7 2 25
Total 61 45 62 25 193
perfil_columna <- 
prop.table(as.matrix(N_tot[-nrow(N_tot),]),2) # Col prof

perfil_columna
         none      light    medium heavy      Total
SM 0.06557377 0.04444444 0.0483871  0.08 0.05699482
JM 0.06557377 0.06666667 0.1129032  0.16 0.09326425
SE 0.40983607 0.22222222 0.1935484  0.16 0.26424870
JE 0.29508197 0.53333333 0.5322581  0.52 0.45595855
SC 0.16393443 0.13333333 0.1129032  0.08 0.12953368
  • Razones de contingencia
prop.table(as.matrix(N_tot[-nrow(N_tot),]),2)[,1] / prop.table(as.matrix(N_tot[-nrow(N_tot),]),2)[,ncol(N)+1]
       SM        JM        SE        JE        SC 
1.1505216 0.7030965 1.5509482 0.6471684 1.2655738 

Note la naturaleza simétrica del problema.

Distancia \(\chi²\)

Podemos calcular la distancia usamos la distancia euclidea entre los perfiles pero ponderada por el perfil crudo. Por ejemplo, la distancia entre gerentes senior al perfil crudo es

sqrt( sum( (perfil_fila[1,] - perfil_fila[6,])^2 / perfil_fila[6,] ) )
[1] 0.216559

La distancia entre gerentes senior y secretarias es

sqrt( sum( (perfil_fila[1,] - perfil_fila[5,])^2 / perfil_fila[6,] ) )
[1] 0.314483

Contribución \(\chi²\)

A continuación la exploración de los residuales estandarizados de cada casilla y su contribución. Más info acá

chisq <- chisq.test(N)
chisq

    Pearson's Chi-squared test

data:  N
X-squared = 16.442, df = 12, p-value = 0.1718
library(corrplot)
corrplot(chisq$residuals, is.cor = FALSE, main='Residuales')

# Contibution in percentage (%)
contrib <- 100*chisq$residuals^2/chisq$statistic
corrplot(contrib, is.cor = FALSE, main='Contribución de cada celda al Chi²')

# Contribución por fila
rowSums(chisq$residuals^2)/n
         SM          JM          SE          JE          SC 
0.002672932 0.011881177 0.038314129 0.026268627 0.006052995 

CA simple en R

Opción 1

res.ca <- ca(N)
res.ca

 Principal inertias (eigenvalues):
           1        2        3       
Value      0.074759 0.010017 0.000414
Percentage 87.76%   11.76%   0.49%   


 Rows:
               SM        JM        SE       JE        SC
Mass     0.056995  0.093264  0.264249 0.455959  0.129534
ChiDist  0.216559  0.356921  0.380779 0.240025  0.216169
Inertia  0.002673  0.011881  0.038314 0.026269  0.006053
Dim. 1  -0.240539  0.947105 -1.391973 0.851989 -0.735456
Dim. 2  -1.935708 -2.430958 -0.106508 0.576944  0.788435


 Columns:
             none    light   medium     heavy
Mass     0.316062 0.233161 0.321244  0.129534
ChiDist  0.394490 0.173996 0.198127  0.355109
Inertia  0.049186 0.007059 0.012610  0.016335
Dim. 1  -1.438471 0.363746 0.718017  1.074445
Dim. 2  -0.304659 1.409433 0.073528 -1.975960
summary(res.ca)

Principal inertias (eigenvalues):

 dim    value      %   cum%   scree plot               
 1      0.074759  87.8  87.8  **********************   
 2      0.010017  11.8  99.5  ***                      
 3      0.000414   0.5 100.0                           
        -------- -----                                 
 Total: 0.085190 100.0                                 


Rows:
    name   mass  qlt  inr    k=1 cor ctr    k=2 cor ctr  
1 |   SM |   57  893   31 |  -66  92   3 | -194 800 214 |
2 |   JM |   93  991  139 |  259 526  84 | -243 465 551 |
3 |   SE |  264 1000  450 | -381 999 512 |  -11   1   3 |
4 |   JE |  456 1000  308 |  233 942 331 |   58  58 152 |
5 |   SC |  130  999   71 | -201 865  70 |   79 133  81 |

Columns:
    name   mass  qlt  inr    k=1 cor ctr    k=2 cor ctr  
1 | none |  316 1000  577 | -393 994 654 |  -30   6  29 |
2 | lght |  233  984   83 |   99 327  31 |  141 657 463 |
3 | medm |  321  983  148 |  196 982 166 |    7   1   2 |
4 | hevy |  130  995  192 |  294 684 150 | -198 310 506 |
plot(res.ca) # Simétrico

plot(res.ca, map='rowprincipal') # Asimétrico

plot(res.ca, map='symbiplot') # symbiplot

plot3d.ca(ca(N, nd=3))

Opción 2

library(FactoMineR); library(factoextra)
res.CA <- CA(N)

summary(res.CA)

Call:
CA(X = N) 

The chi square of independence between the two variables is equal to 16.44164 (p-value =  0.1718348 ).

Eigenvalues
                       Dim.1   Dim.2   Dim.3
Variance               0.075   0.010   0.000
% of var.             87.756  11.759   0.485
Cumulative % of var.  87.756  99.515 100.000

Rows
         Iner*1000    Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3
SM     |     2.673 | -0.066  0.330  0.092 |  0.194 21.356  0.800 |  0.071
JM     |    11.881 |  0.259  8.366  0.526 |  0.243 55.115  0.465 | -0.034
SE     |    38.314 | -0.381 51.201  0.999 |  0.011  0.300  0.001 | -0.005
JE     |    26.269 |  0.233 33.097  0.942 | -0.058 15.177  0.058 |  0.003
SC     |     6.053 | -0.201  7.006  0.865 | -0.079  8.052  0.133 | -0.008
          ctr   cos2  
SM     69.433  0.107 |
JM     25.619  0.009 |
SE      1.698  0.000 |
JE      1.205  0.000 |
SC      2.045  0.001 |

Columns
         Iner*1000    Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3
none   |    49.186 | -0.393 65.400  0.994 |  0.030  2.934  0.006 | -0.001
light  |     7.059 |  0.099  3.085  0.327 | -0.141 46.317  0.657 |  0.022
medium |    12.610 |  0.196 16.562  0.982 | -0.007  0.174  0.001 | -0.026
heavy  |    16.335 |  0.294 14.954  0.684 |  0.198 50.575  0.310 |  0.026
          ctr   cos2  
none    0.061  0.000 |
light  27.282  0.016 |
medium 51.140  0.017 |
heavy  21.517  0.005 |

CA multiple (MCA)

Se refiere a la aplicación del método CA anterior a alguna de las dos matrices alternativas siguientes:

  • Matriz de Burt: La unión de todas las tablas de contingencia en una sola matriz cuadrada. El análisis se basa en la descomposición en autovalores de esta matriz denotada como \(C\). En la diagonal están tablas de contingencias de las variables consigo mismas. Por ende, este método sobreestima la inercia total. Para solucionar esto dos aproximaciones son usadas. El ajuste de inercias y el Análisis de Correspondencias Conjunto (JCA). JCA es un algoritmo iterativo que usa mínimos cuadrados ponderados para las tablas fuera de la diagonal.
  • Matriz indicadora: Matriz de unos y ceros. En las filas los \(n\) sujetos y en las columnas variables indicadoras. Se denota como \(Z\). Sobre Z se hace una CA simple.

Ambas matrices se relacionan de la siguiente forma \(C=Z^tZ\). MCA busca solucionar el problema de la generalización de la asociación entre más de dos variables categóricas. Esta generalización no es obvia ni está bien definida y es un concepto complejo. Para entender este problema existen dos aproximaciones correlación canónica y una aproximación geométrica.

MCA en R

Normalmente la solcución por ajute de inercias es el preferido y está por defecto en la función mjca().

El ejemplo

library(FactoMineR); library(factoextra)
data(poison)
help(poison, package = 'FactoMineR')
str(poison)
'data.frame':   55 obs. of  15 variables:
 $ Age       : int  9 5 6 9 7 72 5 10 5 11 ...
 $ Time      : int  22 0 16 0 14 9 16 8 20 12 ...
 $ Sick      : Factor w/ 2 levels "Sick_n","Sick_y": 2 1 2 1 2 2 2 2 2 2 ...
 $ Sex       : Factor w/ 2 levels "F","M": 1 1 1 1 2 2 1 1 2 2 ...
 $ Nausea    : Factor w/ 2 levels "Nausea_n","Nausea_y": 2 1 1 1 1 1 1 2 2 1 ...
 $ Vomiting  : Factor w/ 2 levels "Vomit_n","Vomit_y": 1 1 2 1 2 1 2 2 1 2 ...
 $ Abdominals: Factor w/ 2 levels "Abdo_n","Abdo_y": 2 1 2 1 2 2 2 2 2 1 ...
 $ Fever     : Factor w/ 2 levels "Fever_n","Fever_y": 2 1 2 1 2 2 2 2 2 2 ...
 $ Diarrhae  : Factor w/ 2 levels "Diarrhea_n","Diarrhea_y": 2 1 2 1 2 2 2 2 2 2 ...
 $ Potato    : Factor w/ 2 levels "Potato_n","Potato_y": 2 2 2 2 2 2 2 2 2 2 ...
 $ Fish      : Factor w/ 2 levels "Fish_n","Fish_y": 2 2 2 2 2 1 2 2 2 2 ...
 $ Mayo      : Factor w/ 2 levels "Mayo_n","Mayo_y": 2 2 2 1 2 2 2 2 2 2 ...
 $ Courgette : Factor w/ 2 levels "Courg_n","Courg_y": 2 2 2 2 2 2 2 2 2 2 ...
 $ Cheese    : Factor w/ 2 levels "Cheese_n","Cheese_y": 2 1 2 2 2 2 2 2 2 2 ...
 $ Icecream  : Factor w/ 2 levels "Icecream_n","Icecream_y": 2 2 2 2 2 2 2 2 2 2 ...
res.mca <- MCA(poison[5:15],method = 'Burt')

summary(res.mca)

Call:
MCA(X = poison[5:15], method = "Burt") 


Eigenvalues
                       Dim.1   Dim.2   Dim.3   Dim.4   Dim.5   Dim.6
Variance               0.112   0.017   0.012   0.009   0.006   0.005
% of var.             66.187   9.822   6.787   5.414   3.660   2.976
Cumulative % of var.  66.187  76.009  82.796  88.210  91.870  94.847
                       Dim.7   Dim.8   Dim.9  Dim.10  Dim.11
Variance               0.004   0.003   0.002   0.000   0.000
% of var.              2.132   1.832   1.000   0.100   0.089
Cumulative % of var.  96.979  98.811  99.811  99.911 100.000

Individuals (the 10 first)
              Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3    ctr
1          | -0.453  1.111  0.347 | -0.264  0.982  0.118 |  0.172  0.498
2          |  0.836  3.792  0.556 | -0.032  0.014  0.001 | -0.072  0.088
3          | -0.448  1.089  0.548 |  0.135  0.258  0.050 | -0.225  0.856
4          |  0.880  4.204  0.748 | -0.085  0.103  0.007 | -0.021  0.007
5          | -0.448  1.089  0.548 |  0.135  0.258  0.050 | -0.225  0.856
6          | -0.359  0.701  0.025 | -0.436  2.677  0.037 | -1.209 24.770
7          | -0.448  1.089  0.548 |  0.135  0.258  0.050 | -0.225  0.856
8          | -0.641  2.226  0.615 | -0.005  0.000  0.000 |  0.113  0.216
9          | -0.453  1.111  0.347 | -0.264  0.982  0.118 |  0.172  0.498
10         | -0.141  0.107  0.039 |  0.122  0.209  0.029 | -0.227  0.872
             cos2  
1           0.050 |
2           0.004 |
3           0.138 |
4           0.000 |
5           0.138 |
6           0.281 |
7           0.138 |
8           0.019 |
9           0.050 |
10          0.101 |

Categories (the 10 first)
              Dim.1    ctr   cos2 v.test    Dim.2    ctr   cos2 v.test  
Nausea_n   |  0.155  1.516  0.588  2.154 |  0.044  0.811  0.047  0.607 |
Nausea_y   | -0.555  5.432  0.588 -2.154 | -0.156  2.906  0.047 -0.607 |
Vomit_n    |  0.277  3.734  0.671  2.496 | -0.147  7.072  0.189 -1.323 |
Vomit_y    | -0.416  5.601  0.671 -2.496 |  0.221 10.608  0.189  1.323 |
Abdo_n     |  0.763 15.418  0.982  3.911 | -0.013  0.029  0.000 -0.066 |
Abdo_y     | -0.371  7.500  0.982 -3.911 |  0.006  0.014  0.000  0.066 |
Fever_n    |  0.678 13.541  0.959  3.769 | -0.063  0.783  0.008 -0.349 |
Fever_y    | -0.388  7.738  0.959 -3.769 |  0.036  0.447  0.008  0.349 |
Diarrhea_n |  0.685 13.797  0.967  3.804 | -0.001  0.000  0.000 -0.006 |
Diarrhea_y | -0.391  7.884  0.967 -3.804 |  0.001  0.000  0.000  0.006 |
            Dim.3    ctr   cos2 v.test  
Nausea_n   -0.087  4.670  0.186 -1.210 |
Nausea_y    0.312 16.734  0.186  1.210 |
Vomit_n     0.028  0.363  0.007  0.249 |
Vomit_y    -0.042  0.544  0.007 -0.249 |
Abdo_n     -0.002  0.001  0.000 -0.009 |
Abdo_y      0.001  0.000  0.000  0.009 |
Fever_n     0.032  0.291  0.002  0.177 |
Fever_y    -0.018  0.167  0.002 -0.177 |
Diarrhea_n -0.027  0.212  0.002 -0.151 |
Diarrhea_y  0.016  0.121  0.002  0.151 |

Categorical variables (eta2)
             Dim.1 Dim.2 Dim.3  
Nausea     | 0.256 0.053 0.253 |
Vomiting   | 0.344 0.251 0.011 |
Abdominals | 0.845 0.001 0.000 |
Fever      | 0.785 0.017 0.005 |
Diarrhae   | 0.799 0.000 0.004 |
Potato     | 0.029 0.396 0.264 |
Fish       | 0.007 0.027 0.252 |
Mayo       | 0.383 0.035 0.039 |
Courgette  | 0.015 0.446 0.053 |
Cheese     | 0.194 0.053 0.012 |
colSums(res.mca$var$contrib)
Dim 1 Dim 2 Dim 3 Dim 4 Dim 5 
  100   100   100   100   100 
res.mjca <- mjca(poison[5:15], lambda='Burt')
summary(res.mjca)

Principal inertias (eigenvalues):

 dim    value      %   cum%   scree plot               
 1      0.112380  66.2  66.2  *****************        
 2      0.016677   9.8  76.0  **                       
 3      0.011524   6.8  82.8  **                       
 4      0.009193   5.4  88.2  *                        
 5      0.006215   3.7  91.9  *                        
 6      0.005054   3.0  94.8  *                        
 7      0.003620   2.1  97.0  *                        
 8      0.003111   1.8  98.8                           
 9      0.001698   1.0  99.8                           
 10     0.000170   0.1  99.9                           
 11     0.000151   0.1 100.0                           
        -------- -----                                 
 Total: 0.169792 100.0                                 


Columns:
                    name   mass  qlt  inr    k=1 cor ctr    k=2 cor ctr  
1  |     Nausea:Nausea_n |   71  635   17 |  155 588  15 |  -44  47   8 |
2  |     Nausea:Nausea_y |   20  635   61 | -555 588  54 |  156  47  29 |
3  |    Vomiting:Vomit_n |   55  860   37 |  277 671  37 |  147 189  71 |
4  |    Vomiting:Vomit_y |   36  860   55 | -416 671  56 | -221 189 106 |
5  |   Abdominals:Abdo_n |   30  982  104 |  763 982 154 |   13   0   0 |
6  |   Abdominals:Abdo_y |   61  982   51 | -371 982  75 |   -6   0   0 |
7  |       Fever:Fever_n |   33  967   93 |  678 959 135 |   63   8   8 |
8  |       Fever:Fever_y |   58  967   53 | -388 959  77 |  -36   8   4 |
9  | Diarrhae:Diarrhea_n |   33  967   94 |  685 967 138 |    1   0   0 |
10 | Diarrhae:Diarrhea_y |   58  967   54 | -391 967  79 |   -1   0   0 |
11 |     Potato:Potato_n |    5  557   55 | -410  89   7 |  941 468 263 |
12 |     Potato:Potato_y |   86  557    3 |   24  89   0 |  -54 468  15 |
13 |         Fish:Fish_n |    2   61   51 | -359  25   2 |  436  37  19 |
14 |         Fish:Fish_y |   89   61    1 |    7  25   0 |   -8  37   0 |
15 |         Mayo:Mayo_n |   17  783   74 |  760 756  85 | -142  26  20 |
16 |         Mayo:Mayo_y |   74  783   17 | -169 756  19 |   32  26   4 |
17 |   Courgette:Courg_n |    8  609   50 | -226  50   4 | -759 559 286 |
18 |   Courgette:Courg_y |   83  609    5 |   23  50   0 |   76 559  29 |
19 |     Cheese:Cheese_n |   12  558   60 |  669 504  46 | -218  53  33 |
20 |     Cheese:Cheese_y |   79  558    9 |  -97 504   7 |   32  53   5 |
21 | Icecream:Icecream_n |    7  274   51 |  353  96   7 | -482 178  92 |
22 | Icecream:Icecream_y |   84  274    4 |  -28  96   1 |   38 178   7 |
chisq.test(poison$Abdominals,poison$Diarrhae)

    Pearson's Chi-squared test with Yates' continuity correction

data:  poison$Abdominals and poison$Diarrhae
X-squared = 35.364, df = 1, p-value = 2.735e-09
chisq.test(poison$Abdominals,poison$Courgette)

    Pearson's Chi-squared test with Yates' continuity correction

data:  poison$Abdominals and poison$Courgette
X-squared = 0.018581, df = 1, p-value = 0.8916
chisq.test(poison$Fish,poison$Courgette)

    Pearson's Chi-squared test with Yates' continuity correction

data:  poison$Fish and poison$Courgette
X-squared = 2.3445e-31, df = 1, p-value = 1
chisq.test(poison$Potato,poison$Courgette)

    Pearson's Chi-squared test with Yates' continuity correction

data:  poison$Potato and poison$Courgette
X-squared = 2.6978e-31, df = 1, p-value = 1

Referencias