Análisis de Correspondencia Simple y Múltiple

Autor/a

Pamela E. Pairo

Código
data(housetasks)
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
Shopping     33          23       9      55
Official     12          46      23      15
Driving      10          51      75       3
Finances     13          13      21      66
Insurance     8           1      53      77
Repairs       0           3     160       2
Holidays      0           1       6     153
Código
dt <- as.table(as.matrix(housetasks))
gplots::balloonplot(t(dt), 
                    main ="Tareas del hogar", 
                    xlab ="", 
                    ylab="",
                    label = FALSE, 
                    show.margins = FALSE)

Análisis de Correspondencia Simple

Test de Independencia

Supuestos

  • El tamaño de muestra n debe ser mayor a 50
  • Las observaciones deben ser independientes
  • Las frecuencias esperadas deben ser mayores a 5. Se admite como máximo un 20% de casillas con frecuencias esperadas menores a 5. Si no se cumple, puede solucionarse aumentando el tamaño de la muestra o agrupando categorías.

Ho Las tareas de hogar y quien las realiza son independientes.

Código
chisq.test(housetasks)

    Pearson's Chi-squared test

data:  housetasks
X-squared = 1944.5, df = 36, p-value < 2.2e-16

Análisis de perfiles

Perfil Fila

Código
CrossTable(as.matrix(housetasks),
           prop.t=FALSE,
           prop.r=TRUE, #proporciones filas
           prop.c=FALSE, 
           prop.chisq=FALSE)

 
   Cell Contents
|-------------------------|
|                       N |
|           N / Row Total |
|-------------------------|

 
Total Observations in Table:  1744 

 
             |  
             |        Wife | Alternating |     Husband |     Jointly |   Row Total | 
-------------|-------------|-------------|-------------|-------------|-------------|
     Laundry |         156 |          14 |           2 |           4 |         176 | 
             |       0.886 |       0.080 |       0.011 |       0.023 |       0.101 | 
-------------|-------------|-------------|-------------|-------------|-------------|
   Main_meal |         124 |          20 |           5 |           4 |         153 | 
             |       0.810 |       0.131 |       0.033 |       0.026 |       0.088 | 
-------------|-------------|-------------|-------------|-------------|-------------|
      Dinner |          77 |          11 |           7 |          13 |         108 | 
             |       0.713 |       0.102 |       0.065 |       0.120 |       0.062 | 
-------------|-------------|-------------|-------------|-------------|-------------|
  Breakfeast |          82 |          36 |          15 |           7 |         140 | 
             |       0.586 |       0.257 |       0.107 |       0.050 |       0.080 | 
-------------|-------------|-------------|-------------|-------------|-------------|
     Tidying |          53 |          11 |           1 |          57 |         122 | 
             |       0.434 |       0.090 |       0.008 |       0.467 |       0.070 | 
-------------|-------------|-------------|-------------|-------------|-------------|
      Dishes |          32 |          24 |           4 |          53 |         113 | 
             |       0.283 |       0.212 |       0.035 |       0.469 |       0.065 | 
-------------|-------------|-------------|-------------|-------------|-------------|
    Shopping |          33 |          23 |           9 |          55 |         120 | 
             |       0.275 |       0.192 |       0.075 |       0.458 |       0.069 | 
-------------|-------------|-------------|-------------|-------------|-------------|
    Official |          12 |          46 |          23 |          15 |          96 | 
             |       0.125 |       0.479 |       0.240 |       0.156 |       0.055 | 
-------------|-------------|-------------|-------------|-------------|-------------|
     Driving |          10 |          51 |          75 |           3 |         139 | 
             |       0.072 |       0.367 |       0.540 |       0.022 |       0.080 | 
-------------|-------------|-------------|-------------|-------------|-------------|
    Finances |          13 |          13 |          21 |          66 |         113 | 
             |       0.115 |       0.115 |       0.186 |       0.584 |       0.065 | 
-------------|-------------|-------------|-------------|-------------|-------------|
   Insurance |           8 |           1 |          53 |          77 |         139 | 
             |       0.058 |       0.007 |       0.381 |       0.554 |       0.080 | 
-------------|-------------|-------------|-------------|-------------|-------------|
     Repairs |           0 |           3 |         160 |           2 |         165 | 
             |       0.000 |       0.018 |       0.970 |       0.012 |       0.095 | 
-------------|-------------|-------------|-------------|-------------|-------------|
    Holidays |           0 |           1 |           6 |         153 |         160 | 
             |       0.000 |       0.006 |       0.037 |       0.956 |       0.092 | 
-------------|-------------|-------------|-------------|-------------|-------------|
Column Total |         600 |         254 |         381 |         509 |        1744 | 
-------------|-------------|-------------|-------------|-------------|-------------|

 

Si hay independencia, los perfiles fila serán homogéneos y similares al perfil medio

Código
# Calcular perfiles fila
perfil_fila <- prop.table(as.matrix(housetasks), margin = 1)

# Convertir a data frame largo
df <- as.data.frame(perfil_fila)
df$fila <- rownames(perfil_fila)
df_long <- pivot_longer(df, -fila, names_to = "columna", values_to = "proporcion")

# Calcular perfil fila medio
perfil_fila_medio <- colMeans(perfil_fila)
perfil_fila_medio_df <- data.frame(
  fila = "Promedio filas",
  columna = names(perfil_fila_medio),
  proporcion = as.numeric(perfil_fila_medio)
)

# Unir ambos
df_plot <- bind_rows(df_long, perfil_fila_medio_df)

# Graficar
ggplot(df_plot, aes(x = columna, y = proporcion, group = fila)) +
  # Líneas normales con color automático
  geom_line(data = subset(df_plot, fila != "Promedio filas"),
            aes(color = fila),
            linewidth = 0.5) +
  # Línea negra y punteada para el promedio
  geom_line(data = subset(df_plot, fila == "Promedio filas"),
            color = "black", linetype = "dashed", linewidth = 1.2) +
  labs(title = "Perfiles fila con perfil fila medio punteado",
       x = " ",
       y = "Frecuencia relativa",
       color = "Fila") +
  theme_minimal()

Perfil Columna

Código
CrossTable(as.matrix(housetasks),
           prop.t=FALSE,
           prop.r=FALSE, #proporciones filas
           prop.c=TRUE, 
           prop.chisq=FALSE)

 
   Cell Contents
|-------------------------|
|                       N |
|           N / Col Total |
|-------------------------|

 
Total Observations in Table:  1744 

 
             |  
             |        Wife | Alternating |     Husband |     Jointly |   Row Total | 
-------------|-------------|-------------|-------------|-------------|-------------|
     Laundry |         156 |          14 |           2 |           4 |         176 | 
             |       0.260 |       0.055 |       0.005 |       0.008 |             | 
-------------|-------------|-------------|-------------|-------------|-------------|
   Main_meal |         124 |          20 |           5 |           4 |         153 | 
             |       0.207 |       0.079 |       0.013 |       0.008 |             | 
-------------|-------------|-------------|-------------|-------------|-------------|
      Dinner |          77 |          11 |           7 |          13 |         108 | 
             |       0.128 |       0.043 |       0.018 |       0.026 |             | 
-------------|-------------|-------------|-------------|-------------|-------------|
  Breakfeast |          82 |          36 |          15 |           7 |         140 | 
             |       0.137 |       0.142 |       0.039 |       0.014 |             | 
-------------|-------------|-------------|-------------|-------------|-------------|
     Tidying |          53 |          11 |           1 |          57 |         122 | 
             |       0.088 |       0.043 |       0.003 |       0.112 |             | 
-------------|-------------|-------------|-------------|-------------|-------------|
      Dishes |          32 |          24 |           4 |          53 |         113 | 
             |       0.053 |       0.094 |       0.010 |       0.104 |             | 
-------------|-------------|-------------|-------------|-------------|-------------|
    Shopping |          33 |          23 |           9 |          55 |         120 | 
             |       0.055 |       0.091 |       0.024 |       0.108 |             | 
-------------|-------------|-------------|-------------|-------------|-------------|
    Official |          12 |          46 |          23 |          15 |          96 | 
             |       0.020 |       0.181 |       0.060 |       0.029 |             | 
-------------|-------------|-------------|-------------|-------------|-------------|
     Driving |          10 |          51 |          75 |           3 |         139 | 
             |       0.017 |       0.201 |       0.197 |       0.006 |             | 
-------------|-------------|-------------|-------------|-------------|-------------|
    Finances |          13 |          13 |          21 |          66 |         113 | 
             |       0.022 |       0.051 |       0.055 |       0.130 |             | 
-------------|-------------|-------------|-------------|-------------|-------------|
   Insurance |           8 |           1 |          53 |          77 |         139 | 
             |       0.013 |       0.004 |       0.139 |       0.151 |             | 
-------------|-------------|-------------|-------------|-------------|-------------|
     Repairs |           0 |           3 |         160 |           2 |         165 | 
             |       0.000 |       0.012 |       0.420 |       0.004 |             | 
-------------|-------------|-------------|-------------|-------------|-------------|
    Holidays |           0 |           1 |           6 |         153 |         160 | 
             |       0.000 |       0.004 |       0.016 |       0.301 |             | 
-------------|-------------|-------------|-------------|-------------|-------------|
Column Total |         600 |         254 |         381 |         509 |        1744 | 
             |       0.344 |       0.146 |       0.218 |       0.292 |             | 
-------------|-------------|-------------|-------------|-------------|-------------|

 
Código
# Calcular perfiles columna
perfil_columna <- prop.table(as.matrix(housetasks), margin = 2)

# Convertir a data frame largo, primero transponer
df_col <- as.data.frame(perfil_columna)
df_col$fila <- rownames(df_col)
df_col_long <- pivot_longer(df_col, -fila, names_to = "columna", values_to = "proporcion")


# Calcular perfil columna medio (promedio por fila)
perfil_columna_medio <- rowMeans(perfil_columna)
perfil_columna_medio_df <- data.frame(
  columna = "Promedio columnas",
  fila = names(perfil_columna_medio),
  proporcion = as.numeric(perfil_columna_medio)
)

# Unir ambos
df_plot_col <- bind_rows(df_col_long, perfil_columna_medio_df)

ggplot(df_plot_col, aes(x = fila, y = proporcion, group = columna)) +
  geom_line(data = subset(df_plot_col, columna != "Promedio columnas"),
            aes(color = columna),
            linewidth = 0.5) +
  geom_line(data = subset(df_plot_col, columna == "Promedio columnas"),
            color = "black", linetype = "dashed", linewidth = 1.2) +
  labs(title = "Perfiles columna con perfil columna medio punteado",
       x = " ",
       y = "Frecuencia relativa",
       color = "Columna") +
  theme_minimal()+theme(axis.text.x = element_text(angle = 45, hjust = 1))

Biplot

  • El AC es similar a PCA, pero para variables categóricas

  • Es una técnica descriptiva que busca representar gráficamente datos categóricos a fin de identificar correspondencia o asociación entre las categorías de filas y columnas.

  • El objetivo es reducir la dimensionalidad (en general 2 ejes principales): se pretende proyectar los puntos fila en un espacio de dimensión menor de manera que las filas que tengan la misma estructura estén próximas y las que tengan una estructura muy diferente, alejadas (ídem columnas)

  • En lugar de trabajar con la matriz varianzas/covarianzas o correlaciones como en PCA, se utiliza la matriz de distancias chi-cuadrado

  • Se extraen los ejes principales de manera de maximizar la asociación entre filas y columnas (máxima inercia)

  • Estos ejes son combinaciones lineales de las variables originales y son independientes entre sí

¿Están relacionadas Las tareas del hogar con quien realiza la tarea en la pareja?

Código
house.ca <- CA(housetasks, graph = FALSE)
Código
# Distancia chi² de filas al perfil medio
dist_filas <- rowSums(house.ca$row$coord^2)

# Distancia chi² de columnas al perfil medio
dist_columnas <- rowSums(house.ca$col$coord^2)

# a data frame
df_dist_filas <- data.frame(
  Categoria = rownames(housetasks),
  Distancia_Chi2 = dist_filas,
  Tipo = "Fila"
)

df_dist_columnas <- data.frame(
  Categoria = colnames(housetasks),
  Distancia_Chi2 = dist_columnas,
  Tipo = "Columna"
)

df_dists <- bind_rows(df_dist_filas, df_dist_columnas)

# Gráfico
ggplot(df_dists, aes(x = reorder(Categoria, Distancia_Chi2), y = Distancia_Chi2, fill = Tipo)) +
  geom_col(show.legend = FALSE) +
  facet_wrap(~Tipo, scales = "free") +
  coord_flip() +
  labs(title = "Distancias chi² de filas y columnas",
       x = "", y = "Distancia chi² al perfil medio") +
  theme_minimal()

Inercia

  • Es una medida de la falta de independencia, resume la información total contenida en la tabla de doble entrada.

  • Está directamente relacionada con el estadístico \(\chi^{2}\): \(I =\frac{\chi^{2}}{n}\)

  • Cuanto mayor sea la diferencia entre las frecuencias observadas y las esperadas, y por lo tanto mayor dependencia entre filas y columnas, mayor inercia, mayor \(\chi^{2}\)

  • Equivale a la varianza total en ACP

Código
# Análisis de correspondencias de filas y columnas en simultáneo
fviz_ca_biplot(house.ca) +
 theme(axis.text.x = element_text(angle=0)) + labs(title = 'Biplot de Análisis de Correspondencia Housetasks')+theme(panel.background = element_rect(fill = "grey95"))

Cuanto mayor la distancia al origen, mayor es la contribución a la falta de independencia

Código
fviz_screeplot(house.ca, addlabels = TRUE, ylim = c(0, 50))+
 theme(axis.text.x = element_text(angle=0)) + labs(title = 'Scree plot',  x = 'Dimensión', y = 'Contribución inercia explicada')+theme(panel.background = element_rect(fill = "grey95"))

Código
fviz_ca_row(house.ca, 
            repel = TRUE, 
            col.row = "cos2", # color de puntos
            label = "all", 
            title = "Perfiles fila - Análisis de Correspondencias")

Análisis de Correspondencia Múltiple

Código
data("Titanic")

# Paso a data frame
titanic <- as.data.frame(Titanic)

# Expando la tabla de frecuencias
titanic <- titanic[rep(1:nrow(titanic), titanic[,5]),-5]

# Reseteo nombre de filas
rownames(titanic) <- NULL

head(titanic)
  Class  Sex   Age Survived
1   3rd Male Child       No
2   3rd Male Child       No
3   3rd Male Child       No
4   3rd Male Child       No
5   3rd Male Child       No
6   3rd Male Child       No
Código
# Armo matriz de Burt
library(anacor)
burt <- burtTable(titanic)
burt
             Class.1st Class.2nd Class.3rd Class.Crew Sex.Male Sex.Female
Class.1st          325         0         0          0      180        145
Class.2nd            0       285         0          0      179        106
Class.3rd            0         0       706          0      510        196
Class.Crew           0         0         0        885      862         23
Sex.Male           180       179       510        862     1731          0
Sex.Female         145       106       196         23        0        470
Age.Child            6        24        79          0       64         45
Age.Adult          319       261       627        885     1667        425
Survived.No        122       167       528        673     1364        126
Survived.Yes       203       118       178        212      367        344
             Age.Child Age.Adult Survived.No Survived.Yes
Class.1st            6       319         122          203
Class.2nd           24       261         167          118
Class.3rd           79       627         528          178
Class.Crew           0       885         673          212
Sex.Male            64      1667        1364          367
Sex.Female          45       425         126          344
Age.Child          109         0          52           57
Age.Adult            0      2092        1438          654
Survived.No         52      1438        1490            0
Survived.Yes        57       654           0          711
Código
#Grafico matriz de Burt
burt2 <- as.table(as.matrix(burt))
gplots::balloonplot((burt2), main='Matriz de Burt de datos Titanic', label=F, show.margins = F,dotcolor="pink", text.size=0.7,colsrt=45,colmar=2.5)

MCA

Código
titanic_mca <- MCA(titanic, graph=F)
summary(titanic_mca)

Call:
MCA(X = titanic, graph = F) 


Eigenvalues
                       Dim.1   Dim.2   Dim.3   Dim.4   Dim.5   Dim.6
Variance               0.445   0.305   0.250   0.205   0.179   0.116
% of var.             29.672  20.336  16.667  13.669  11.901   7.755
Cumulative % of var.  29.672  50.008  66.675  80.344  92.245 100.000

Individuals (the 10 first)
          Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3    ctr   cos2  
1      |  0.186  0.004  0.006 |  1.901  0.538  0.656 | -0.318  0.018  0.018 |
2      |  0.186  0.004  0.006 |  1.901  0.538  0.656 | -0.318  0.018  0.018 |
3      |  0.186  0.004  0.006 |  1.901  0.538  0.656 | -0.318  0.018  0.018 |
4      |  0.186  0.004  0.006 |  1.901  0.538  0.656 | -0.318  0.018  0.018 |
5      |  0.186  0.004  0.006 |  1.901  0.538  0.656 | -0.318  0.018  0.018 |
6      |  0.186  0.004  0.006 |  1.901  0.538  0.656 | -0.318  0.018  0.018 |
7      |  0.186  0.004  0.006 |  1.901  0.538  0.656 | -0.318  0.018  0.018 |
8      |  0.186  0.004  0.006 |  1.901  0.538  0.656 | -0.318  0.018  0.018 |
9      |  0.186  0.004  0.006 |  1.901  0.538  0.656 | -0.318  0.018  0.018 |
10     |  0.186  0.004  0.006 |  1.901  0.538  0.656 | -0.318  0.018  0.018 |

Categories
           Dim.1     ctr    cos2  v.test     Dim.2     ctr    cos2  v.test  
1st    |   1.152  11.006   0.230  22.489 |  -1.231  18.351   0.263 -24.040 |
2nd    |   0.651   3.085   0.063  11.781 |   0.253   0.677   0.009   4.568 |
3rd    |   0.131   0.307   0.008   4.210 |   1.070  30.100   0.541  34.490 |
Crew   |  -0.737  12.266   0.365 -28.346 |  -0.483   7.679   0.157 -18.568 |
Male   |  -0.428   8.077   0.673 -38.489 |  -0.002   0.000   0.000  -0.218 |
Female |   1.575  29.746   0.673  38.489 |   0.009   0.001   0.000   0.218 |
Child  |   1.302   4.714   0.088  13.938 |   2.943  35.145   0.451  31.505 |
Adult  |  -0.068   0.246   0.088 -13.938 |  -0.153   1.831   0.451 -31.505 |
No     |  -0.509   9.870   0.544 -34.593 |   0.190   2.008   0.076  12.917 |
Yes    |   1.068  20.684   0.544  34.593 |  -0.399   4.208   0.076 -12.917 |
         Dim.3     ctr    cos2  v.test  
1st     -0.890  11.696   0.137 -17.375 |
2nd      2.392  74.091   0.851  43.272 |
3rd     -0.659  13.933   0.205 -21.243 |
Crew     0.082   0.272   0.005   3.165 |
Male     0.003   0.000   0.000   0.227 |
Female  -0.009   0.002   0.000  -0.227 |
Child    0.024   0.003   0.000   0.255 |
Adult   -0.001   0.000   0.000  -0.255 |
No      -0.004   0.001   0.000  -0.255 |
Yes      0.008   0.002   0.000   0.255 |

Categorical variables (eta2)
           Dim.1 Dim.2 Dim.3  
Class    | 0.475 0.693 1.000 |
Sex      | 0.673 0.000 0.000 |
Age      | 0.088 0.451 0.000 |
Survived | 0.544 0.076 0.000 |
Código
fviz_screeplot(titanic_mca, addlabels = TRUE)

Código
fviz_mca_biplot(titanic_mca, 
                label="var",
                repel = TRUE,
                col.ind='gray',
                invisible="quali")

Código
# Análisis de variables según representatividad
fviz_mca_var(titanic_mca,
             invisible="quali", 
             repel = TRUE,
             alpha.var="cos2")

Código
# Análisis de variables según contribución a dimensión 1 
fviz_contrib(titanic_mca, 
             choice = "var", 
             axes = 1)

Código
# Análisis de variables según contribución a dimensión 2
fviz_contrib(titanic_mca, 
             choice = "var", 
             axes = 2)

Código
# Análisis de variables según contribución a dimensiones 1 y 2 
fviz_contrib(titanic_mca, 
             choice = "var",
             axes = 1:2)

Análisis de individuos

Código
# Análisis de individuos
fviz_mca_ind(titanic_mca,
             invisible="quali", 
             col.ind = "cos2", 
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
             rapel=TRUE,
#             select.ind = list(contrib = 400)
             )

Re-analisis de datos Titanic

Código
# Flatten a 2-D, paso a dataframe y reseteo índice de filas
Titanic_2D <- as.matrix(structable(Class+Survived~Sex+Age, Titanic))
df_t2D <- as.data.frame(Titanic_2D)
df_t2D$combinacion <- rownames(df_t2D)
rownames(df_t2D) <- NULL
# Expando dataframe
df_t2D <- pivot_longer(df_t2D, cols=c(1:8),names_to='sobrevivió',values_to='valores' )
df_t2D <- as.data.frame(df_t2D)
df_t2D_exp <- df_t2D[rep(1:nrow(df_t2D), df_t2D[,3]),-3]
rownames(df_t2D_exp) <- NULL
Código
Tit2.mca <- MCA(df_t2D_exp, graph = FALSE)
summary(Tit2.mca)

Call:
MCA(X = df_t2D_exp, graph = FALSE) 


Eigenvalues
                       Dim.1   Dim.2   Dim.3   Dim.4   Dim.5   Dim.6   Dim.7
Variance               0.823   0.608   0.536   0.500   0.500   0.500   0.500
% of var.             16.460  12.157  10.714  10.000  10.000  10.000  10.000
Cumulative % of var.  16.460  28.618  39.332  49.332  59.332  69.332  79.332
                       Dim.8   Dim.9  Dim.10
Variance               0.464   0.392   0.177
% of var.              9.286   7.843   3.540
Cumulative % of var.  88.618  96.460 100.000

Individuals (the 10 first)
                Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3    ctr
1            |  1.516  0.127  0.106 |  0.657  0.032  0.020 | -2.599  0.573
2            |  1.516  0.127  0.106 |  0.657  0.032  0.020 | -2.599  0.573
3            |  1.516  0.127  0.106 |  0.657  0.032  0.020 | -2.599  0.573
4            |  1.516  0.127  0.106 |  0.657  0.032  0.020 | -2.599  0.573
5            |  1.516  0.127  0.106 |  0.657  0.032  0.020 | -2.599  0.573
6            |  1.775  0.174  0.123 |  2.431  0.442  0.232 | -1.173  0.117
7            |  1.775  0.174  0.123 |  2.431  0.442  0.232 | -1.173  0.117
8            |  1.775  0.174  0.123 |  2.431  0.442  0.232 | -1.173  0.117
9            |  1.775  0.174  0.123 |  2.431  0.442  0.232 | -1.173  0.117
10           |  1.775  0.174  0.123 |  2.431  0.442  0.232 | -1.173  0.117
               cos2  
1             0.312 |
2             0.312 |
3             0.312 |
4             0.312 |
5             0.312 |
6             0.054 |
7             0.054 |
8             0.054 |
9             0.054 |
10            0.054 |

Categories (the 10 first)
                 Dim.1     ctr    cos2  v.test     Dim.2     ctr    cos2
Female_Adult |   1.671  32.759   0.668  38.343 |  -0.691   7.585   0.114
Female_Child |   1.541   2.948   0.050  10.439 |   3.675  22.708   0.282
Male_Adult   |  -0.511  12.022   0.816 -42.361 |  -0.033   0.068   0.003
Male_Child   |   1.134   2.271   0.039   9.203 |   2.865  19.639   0.246
1st_No       |  -0.680   1.559   0.027  -7.732 |  -0.253   0.292   0.004
1st_Yes      |   1.617  14.645   0.266  24.171 |  -1.841  25.718   0.344
2nd_No       |  -0.528   1.286   0.023  -7.100 |  -0.391   0.952   0.013
2nd_Yes      |   2.086  14.174   0.247  23.289 |   0.925   3.772   0.048
3rd_No       |   0.049   0.035   0.001   1.296 |   0.777  11.906   0.190
3rd_Yes      |   1.087   5.803   0.104  15.120 |   0.878   5.123   0.068
              v.test     Dim.3     ctr    cos2  v.test  
Female_Adult -15.857 |   0.008   0.001   0.000   0.175 |
Female_Child  24.900 |   3.496  23.322   0.255  23.690 |
Male_Adult    -2.736 |   0.024   0.041   0.002   1.986 |
Male_Child    23.259 |  -3.133  26.637   0.294 -25.430 |
1st_No        -2.875 |   0.328   0.556   0.006   3.726 |
1st_Yes      -27.527 |  -0.671   3.881   0.046 -10.038 |
2nd_No        -5.248 |   0.318   0.715   0.008   4.269 |
2nd_Yes       10.324 |   1.415  10.021   0.113  15.798 |
3rd_No        20.468 |  -1.067  25.513   0.360 -28.128 |
3rd_Yes       12.210 |   0.833   5.236   0.061  11.588 |

Categorical variables (eta2)
               Dim.1 Dim.2 Dim.3  
combinacion  | 0.823 0.608 0.536 |
sobrevivió   | 0.823 0.608 0.536 |

Scree plot

Código
#scree plot
fviz_screeplot(Tit2.mca, addlabels = TRUE)

Código
# Análisis de variables
colorest1 <- as.character(c(3,3,3,3,2,1,2,1,2,1,2,1))
fviz_mca_var(Tit2.mca,invisible="quali", col.var=colorest1)+theme(legend.position='none')

Código
fviz_mca_var(Tit2.mca, 
             col.var= "contrib",
             invisible="quali", 
             repel=TRUE, 
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"))

Código
# Análisis de contribución de variables a dimensión 1
fviz_contrib(Tit2.mca,choice="var",
             axes=1, 
             fill="royalblue",
             color ="black")+ 
             theme(axis.text.x = element_text(angle=45)) + labs(title = 'Contribución de variables',  x = 'Variables', y = 'Contribución (%)')