12  Análisis de Correspondencias Simples

pacman::p_load(sjstats, ca, tidyverse, haven, factoextra, FactoMineR, gplots, ggpubr, corrplot, expss)

13 Análisis de correspondencias

El análisis de correspondencias se debe poder hacer desde una tabla legacy (tabla antigua barbwin) o desde una tabla nueva (editada) o desde una tabla importada (copy and paste???) o txt. Quiero huir de tener que generar un fichero Barbwin para ello.

Sea cual sea la forma esa tabla debe crearse como table. Este primer chunk lo que hace es eso, y habría que obviarlo. La primera columna de esa tabla (puntos fila) deben ser rownames.

tabla <- suppressMessages(read_csv("http://download.tesigandia.com/tmim/tabla.hatco.anacor.csv"))
  Error in open.connection(structure(4L, class = c("curl", "connection"), conn_id = <pointer: 0x0000029b731eac60>), : no se puede abrir la conexión
tabla <- subset(tabla, select = -1)
  Error: objeto 'tabla' no encontrado
# en este ejemplo, quito la columna 1 porque ahi viene los textos que quiero pase a
# los nombres de las columnas vienen definidos en los nombres de las variables
rownames(tabla) <- c("x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8") # asignamos los nombres de fila con la propiedad rownames, pues así lo necesita el paquete `ca`.
  Error: objeto 'tabla' no encontrado
tabla <- as.table(as.matrix(tabla))
  Error: objeto 'tabla' no encontrado

13.1 Tabla de datos

Generamos una salida de tabla en modo gráfico, donde visualmente el diámetro de la circunferencia es mayor cuanto mayor sea el valor de la celda

balloonplot(
     t(tabla),
     main = "Empresa * Atributo", # título libre
     xlab = "Empresa", # qué son las columnas
     ylab = "Atributo", # qué son las filas
     label = T, # pone el valor en la bola
     show.margins = TRUE # muestra los totales marginales
)
  Error: objeto 'tabla' no encontrado

13.2 Prueba Chi2 de homogeneidad

crosstable_statistics(tabla)
  Error: objeto 'tabla' no encontrado

13.3 Resultados

res.ca <- CA(tabla,
     ncp = 7, # se puede definir un número pero lo normal es no poner nada. El máximo de componentes es el menor de filas o columnas - 1 . En este caso 10 columnas, 8 filas, será 7.
     row.sup = NULL, # como vector, el índice de filas complementarias, por ejmplo si fueran de la 8 a la 10, sería 8:10
     col.sup = NULL, # como vector, el índice de columnas complementarias, por ejmplo si fuera la 11 y la 12, sería 11:12
     graph = FALSE
)
  Error: objeto 'tabla' no encontrado
res.ca
  Error: objeto 'res.ca' no encontrado

13.3.1 Mapa básico

plot.CA(
     res.ca,
     axes = c(1, 2),
     col.row = "steelblue",
     col.col = "orange",
     col.row.sup = "darkblue",
     col.col.sup = "darkred",
     autoLab = c("auto", "yes", "no"),
     title = "Correspondence Analysis",
)
  Error: objeto 'res.ca' no encontrado
# plot(res.ca, axes(1,3)) combinaciones de números entre 1 y máximo dimensiones
# plot(res.ca, axes(2,3))

13.3.2 Valores propios

res.ca$eig
  Error: objeto 'res.ca' no encontrado

13.3.3 Análisis de las columnas

13.3.3.1 Masa de las columnas

res.ca$call$marge.col
  Error: objeto 'res.ca' no encontrado

13.3.3.2 Inercia de las columnas

res.ca$col$inertia
  Error: objeto 'res.ca' no encontrado

13.3.3.3 Contribuciones de las columnas

res.ca$col$contrib
  Error: objeto 'res.ca' no encontrado

13.3.3.4 Calidad (cos2)

res.ca$col$cos2
  Error: objeto 'res.ca' no encontrado
fviz_cos2(res.ca, choice = "col", axes = 1:2)
  Error: objeto 'res.ca' no encontrado

13.3.3.5 Coordenadas de las columnas

res.ca$col$coord
  Error: objeto 'res.ca' no encontrado
fviz_ca_col(
     res.ca,
     col.col = "cos2",
     gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
     repel = TRUE
)
  Error: objeto 'res.ca' no encontrado

13.3.4 Análisis de las filas

13.3.4.1 Masa de las filas

res.ca$call$marge.row
  Error: objeto 'res.ca' no encontrado

13.3.4.2 Inercia de las filas

res.ca$row$inertia
  Error: objeto 'res.ca' no encontrado

13.3.4.3 Contribuciones de las filas

res.ca$row$contrib
  Error: objeto 'res.ca' no encontrado

13.3.4.4 Calidad (cos2)

res.ca$row$cos2
  Error: objeto 'res.ca' no encontrado
fviz_cos2(res.ca, choice = "row", axes = 1:2)
  Error: objeto 'res.ca' no encontrado

13.3.4.5 Coordenadas de las filas

res.ca$row$coord
  Error: objeto 'res.ca' no encontrado
fviz_ca_row(
     res.ca,
     col.row = "cos2",
     gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
     repel = TRUE
)
  Error: objeto 'res.ca' no encontrado

13.3.5 Calidad de las dimensiones

Calculamos el gráfico de las calidad de la varianza explicada por las dimensiones, descendente por representación.

fviz_eig(
     res.ca,
     choice = c("variance", "eigenvalue"),
     geom = c("bar", "line"),
     barfill = "grey",
     barcolor = "grey",
     linecolor = "firebrick",
     addlabels = TRUE,
     hjust = 0,
     main = "Análisis de correspondencias",
     xlab = "Dimensiones",
     ylab = "% varianza",
     ylim = c(0, 100),
     repel = TRUE
)
  Error: objeto 'res.ca' no encontrado

13.3.6 Mapas de puntos

The default plot of CA is a “symmetric” plot in which both rows and columns are in principal coordinates. In this situation, it’s not possible to interpret the distance between row points and column points. To overcome this problem, the simplest way is to make an asymmetric plot. This means that, the column profiles must be presented in row space or vice-versa. The allowed options for the argument map are:

  • “rowprincipal” or “colprincipal”: asymmetric plots with either rows in principal coordinates and columns in standard coordinates, or vice versa. These plots preserve row metric or column metric respectively.

  • “symbiplot”: Both rows and columns are scaled to have variances equal to the singular values (square roots of eigenvalues), which gives a symmetric biplot but does not preserve row or column metrics.

  • “rowgab” or “colgab”: Asymmetric maps, proposed by Gabriel & Odoroff (1990), with rows (respectively, columns) in principal coordinates and columns (respectively, rows) in standard coordinates multiplied by the mass of the corresponding point.

  • “rowgreen” or “colgreen”: The so-called contribution biplots showing visually the most contributing points (Greenacre 2006b). These are similar to “rowgab” and “colgab” except that the points in standard coordinates are multiplied by the square root of the corresponding masses, giving reconstructions of the standardized residuals.

fviz_ca_biplot(
     res.ca,
     map = "symmetric",
     title = "análisis de correspondencias: simétrico",
     arrow = c(TRUE, TRUE), # se pueden poner ambas a FALSE y no salen las flechas
     repel = TRUE,
     col.col = "orange",
     col.row = "steelblue"
)
  Error: objeto 'res.ca' no encontrado
fviz_ca_biplot(
     res.ca,
     map = "colprincipal",
     title = "análisis de correspondencias: principal columna",
     arrow = c(TRUE, TRUE), # se pueden poner ambas a FALSE y no salen las flechas
     repel = TRUE,
     col.col = "orange",
     col.row = "steelblue"
)
  Error: objeto 'res.ca' no encontrado
fviz_ca_biplot(
     res.ca,
     map = "rowprincipal",
     title = "análisis de correspondencias: principal fila",
     arrow = c(TRUE, TRUE), # se pueden poner ambas a FALSE y no salen las flechas
     repel = TRUE,
     col.col = "orange",
     col.row = "steelblue"
)
  Error: objeto 'res.ca' no encontrado
fviz_ca_biplot(
     res.ca,
     map = "symbiplot",
     title = "análisis de correspondencias: simétrico sin preservar métrica de filas y/o columnas",
     arrow = c(TRUE, TRUE), # se pueden poner ambas a FALSE y no salen las flechas
     repel = TRUE,
     col.col = "orange",
     col.row = "steelblue"
)
  Error: objeto 'res.ca' no encontrado
fviz_ca_biplot(
     res.ca,
     map = "colgreen",
     title = "análisis de correspondencias: puntos columna más representativos",
     arrow = c(TRUE, TRUE), # se pueden poner ambas a FALSE y no salen las flechas
     repel = TRUE,
     col.col = "orange",
     col.row = "steelblue"
)
  Error: objeto 'res.ca' no encontrado
fviz_ca_biplot(
     res.ca,
     map = "rowgreen",
     title = "análisis de correspondencias: puntos fila más representativos",
     arrow = c(TRUE, TRUE), # se pueden poner ambas a FALSE y no salen las flechas
     repel = TRUE,
     col.col = "orange",
     col.row = "steelblue"
)
  Error: objeto 'res.ca' no encontrado
fviz_ca_biplot(
     res.ca,
     map = "colgab",
     title = "análisis de correspondencias: asimétrico columnas",
     arrow = c(TRUE, TRUE), # se pueden poner ambas a FALSE y no salen las flechas
     repel = TRUE,
     col.col = "orange",
     col.row = "steelblue"
)
  Error: objeto 'res.ca' no encontrado
fviz_ca_biplot(
     res.ca,
     map = "rowgab",
     title = "análisis de correspondencias: asimétrico filas",
     arrow = c(TRUE, TRUE), # se pueden poner ambas a FALSE y no salen las flechas
     repel = TRUE,
     col.col = "orange",
     col.row = "steelblue"
)
  Error: objeto 'res.ca' no encontrado

13.3.7 Otros gráficos

Calculamos otros gráficos de soporte a la comprensión del análisis

13.3.7.1 Mapa de columnas

fviz_ca_col(res.ca, repel = TRUE, col.col = "orange", title = " sólo columnas")
  Error: objeto 'res.ca' no encontrado

13.3.7.2 Mapa de filas

fviz_ca_row(res.ca, repel = TRUE, col.row = "steelblue", title = " sólo filas")
  Error: objeto 'res.ca' no encontrado

13.4 Correlaciones

13.4.1 Columnas

13.4.1.1 Correlación entre calidad columnas/dimensiones

corrplot(res.ca$col$cos2, is.corr = T)
  Error: objeto 'res.ca' no encontrado

13.4.1.2 Correlación entre contribuciones columnas/dimensiones

corrplot(res.ca$col$contrib, is.corr = F)
  Error: objeto 'res.ca' no encontrado

13.4.2 Filas

13.4.2.1 Correlación entre calidad filas/dimensiones

corrplot(res.ca$row$cos2, is.corr = T)
  Error: objeto 'res.ca' no encontrado

13.4.2.2 Correlación entre contribución filas/dimensiones

corrplot(res.ca$row$contrib, is.corr = F)
  Error: objeto 'res.ca' no encontrado