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:
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.
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)
Podemos evaluar la independencia entre el grupo y los hábitos de fumar
pander(chisq.test(N))
| Test statistic | df | P value |
|---|---|---|
| 16.44 | 12 | 0.1718 |
#pander(fisher.test(datos,workspace = 10^7)) # No converge
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)
(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\]
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}\).
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
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
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.
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
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
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))
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 |
Se refiere a la aplicación del método CA anterior a alguna de las dos matrices alternativas siguientes:
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.
Normalmente la solcución por ajute de inercias es el preferido y está por defecto en la función mjca().
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
Greenacre, M.J. (1984). Theory and Applications of Correspondence Analysis. London: Academic Press.
Francois Husson, Exploratory Multivariate Anlaysis by Example Using R
Applied Multivariate Data Analysis, Brian S. Everitt and Graham Dunn