Nothing Special   »   [go: up one dir, main page]

MCA Markdown Editable PDF

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 8

Multiple Correspondance Analysis

El análisis de correspondencia múltiple o MCA, se utiliza para sumarizar y visualizar


alguna tabla de datos que contenga más de 2 variables categóricas, es usualmente
utilizado en bases de encuestas para:
1) Encontrar individuos con un perfil similar en sus respuestas y;
2) Para encontrar la relación entre va. categóricas
Suponiendo que tenemos un número 𝐾 de variables nominales(categóricas), cada
variable nominal se compone a su vez de 𝐽𝑘 niveles, la suma de 𝐽𝑘 es igual a 𝐽.
𝑘

∑ 𝐽𝑘 = 𝐽
𝑖=1

Existen 𝐼 observaciones (individuos), existira un indicador para la Matriz 𝐼𝑥𝐽 el cual


denotaremos como 𝑋
𝑎 𝑏 𝑐 𝑑 𝑒
𝐗 = (𝐅𝐢𝐥𝐚𝐬 ∗ 𝐂𝐨𝐥𝐮𝐦𝐧𝐚𝐬) = 𝐈𝐱𝐉 = [𝐴 𝐵 𝐶 𝐷 𝐸]
𝑎 𝐵 𝑐 𝑥 𝑌
Las Variables_ se pueden componer/comprometer por diferentes niveles (𝐽𝑘 ) y cada
uno de estos niveles corresponde a una variable binaria tal que:
Ejemplo: Para la Variable Género(Cualitativa) tenemos Hombres y Mujeres (2 niveles),
la representación de estas variables seria:
Hombres = 1 0 || Mujeres = 0 1

Ejemplo: Para un rango de valores(Cuantitativa) de (-5,5) podemos dividirlo en 3


niveles (menor a 0, igual a 0 y mayor que 0)
Representado como:
0 0 1 para <0 , 0 1 0 para =0 y 1 0 0 para >0

Lo primero que se debrá hacer es recodificar la información de la manera indicada


anteriormente, esto con la finalidad de que el total de las sumás de los renglones en la
matriz sea igual al número de variables que analizamos, se dice que tienen la misma
masa los renglones.
1 1 0 0 1
𝐗 = [1 0 1 1 1]
1 1 1 0 0
El total de la tabla se denomina 𝑁 y el primer paso para el MCA es calcular el valor de
𝑍:
𝑍 = 𝑁 −1 ∗ 𝑋
Definiremos despues a 𝑟 como el vector de resultados por renglón y a 𝑐 como el vector
de los resultados de las columnas 𝐷𝑟 será= diag {𝑟} y 𝐷𝑐 será= diag {𝑐}
Con estas nuevas matrices 𝐷𝑟 y 𝐷𝑐 podremós obtener los Factor Scores, obteniéndolos
de la siguiente descomposición de valores singulares:
−1/2 −1/2
𝐷𝑟 (𝑍 − 𝑟𝑐 𝑇 )𝐷𝑐 = 𝑃𝛥𝑄 𝑇
(𝛥 es la matriz diagonal de valores singulares y, y 𝛬 = 𝛥2 es la matriz de eigenvalores)
Los factor scores por columnas y renglones se calculan de la siguiente manera:
−1/2
𝐹 = 𝐷𝑟 𝑃𝛥 para los renglones
−1/2
𝐺 = 𝐷𝑐 𝑄𝛥 para las columnas
Para obtener la distancia Chi-Cuadrada de los renglones y columnas a su respectivo
baricentro realizamos el siguiente cálculo:
𝑑𝑟 = 𝐹𝐹 𝑇

𝑑𝑐 = 𝐺𝐺 𝑇
Para calcular los cosenos cuadrados de un renglón i a un factor l y de una columna j a
un factor l utilizamos:
𝑂𝑖,𝑙 = 𝑓𝑖,𝑙2 /𝑑𝑟,𝑖
2

filas-factor
2 2
𝑂𝑗,𝑙 = 𝑔𝑗,𝑙 /𝑑𝑐,𝑗

columnas-factor
Para obtener las contribuciones de un renglón i a un factor l y de una columna j a un
factor l, seguimos:
𝑡𝑖,𝑙 = 𝑓𝑖,𝑙2 /𝜆𝑙

filas-factor
2
𝑡𝑗,𝑙 = 𝑔𝑗,𝑙 /𝜆𝑙

columnas-factor
Las contribuciones(como veremos más adelante) ayudan a localizar las variables u
observaciones importantes dado un factor.
Terminologia util para MCA:
–Individuos_Activos=(Renglones): Individuos utilizados en el análisis
–Variables_Activas=(Columnas): Variables que se utilizarán en el MCA
–Variables_Suplementarias: No se incluyen en el análisis y sus coordenadas serán
predecidas, se dividen en 2:
-Complementarias_Cuantitativas y
-Complementarias_Cualitativas ; Estás variables usualmente son utilizadas para
mostrar a los Individuos por grupos.

IMPORTANTE!!!
Es importante notar que las variables categóricas(en nuestro ejemplo) son las 11
variables, cada una de estás tiene 2 categorias representadas por “variable_n” y
“variable_y”, en los análisis nos fijamos en las CATEGORIAS que son un componente de
las variables categóricas, es por esto que trabajamos con 22 variables en los plots y los
análisis.
Para comenzar con nuestro analisis cargaremos las siguientes paqueterias:
install.packages("FactoMineR")
install.packages("factoextra")
library(FactoMineR)
library(factoextra)

Luego iniciaremos a ilustrar el metodo, para esto utilizaremos la base poison:


data("poison")

Ahora crearemos una división de los datos donde sólo quedarán las variables
utilizadas en el MCA:
datos_activos<-poison[1:55 , 5:15] #Tenemos a todos los individuos 1:55
y las variables de 5:15

datos_activos

Podemos utilizar la fn. summary para obtener el conteo de casos de las variables:
summary(datos_activos)

Si graficamos estás frecuencias nos podremos percatar de variables con muy baja
frecuencia, las cuales en caso de existir pueden distorcionar el análisis e idealmente
deberian eliminarse:
plot(datos_activos[,i], main=colnames(datos_activos)[i],
ylab = "Count", col="steelblue", las = 2)

Para el código : “MCA(X, ncp, graph = TRUE)”


X: data.frame con “n” #de indv. y “p” #de va.
ncp: Número de dimensiones que se conservarán en el resultado final
graph: Si es TRUE despliega una gráfica
resultados_datos<-MCA(datos_activos, graph = TRUE)

Con el comando print mostraremos todos los valores contenidos en resultados_datos


que nos proporciona el MCA:
print(resultados_datos)

print(resultados_datos) # Obtendremos en la consola:


Results of the Multiple Correspondence Analysis (MCA) The analysis was
performed on 55 individuals, described by 11 variables #11 variables con _y ó _n son
22 variables en el data.frame, no en el análisis The results are available in the
following objects:
name description
1 "$eig" "eigenvalues"
2 "$var" "results for the variables"
3 "$var$coord" "coord. of the categories"
4 "$var$cos2" "cos2 for the categories"
5 "$var$contrib" "contributions of the categories"
6 "$var$v.test" "v-test for the categories"
7 "$ind" "results for the individuals"
8 "$ind$coord" "coord. for the individuals"
9 "$ind$cos2" "cos2 for the individuals"
10 "$ind$contrib" "contributions of the individuals"
11 "$call" "intermediate results"
12 "$call$marge.col" "weights of columns"
13 "$call$marge.li" "weights of rows"

Esto nos da la nomenclatura para poder llamar cualquiera de los componentes


listados arriba x.e. resultados_datos$eig
eigen.valores<-resultados_datos$eig

Podemos hacer uso de la paqueteria factoextra para facilitar esta tarea con las
siguientes funciones:
eigen_valores<-get_eig(resultados_datos)

Para visualizar los porcentajes de inercia explicados por cada dimensión del MCA
usamos:
fviz_eig(resultados_datos) #representación visual

ó
fviz_screeplot(resultados_datos, addlabels= TRUE, ylim=c(0,45))

Añade posibilidad de formato y muestra variación porcentual.


Para obtener el Bi-Plot podemos utilizar:
fviz_mca_biplot(resultados_datos,
repel = TRUE #esto evita overlapping del texto
)

El gráfico muestra un patrón global de los datos, los individuos(filas) se ven


representados por los puntos azules y las variables(columnas) son representadas por
los triángulos rojos. La distancia entre cualquiera de los puntos de individuos o los
triángulos de variables da una medida de su similitud o su no similitud. Los individuos
con perfiles similares se encuentran más cercanos en la gráfica, los mismo es verdad
para las variables.
VARIABLES
Para obtener los resultados de las variables utilizaremos la función get_mca_var que
nos devolverá una lista de coordenadas, los cosenos cuadrados y la contribución de las
variables:
res_varz<-get_mca_var(resultados_datos)
res_varz #de aqui podemos obtener la nomenclatura para acceder a los
componentes

Multiple Correspondence Analysis Results for variables


===================================================
Name Description
1 "$coord" "Coordinates for categories"
2 "$cos2" "Cos2 for categories"
3 "$contrib" "contributions of categories"

Correlación entre las variables y las principales dimensiones:


fviz_mca_var(resultados_datos, choice = "mca.cor", repel = T) # mca.cor
muestra la correlación de las var cat con las dim

“Interpretación: las variables más cercanas el eje están más correlacionadas a la


dimensión” Aqui podemos observar como las variables Fever,Abdominals y Diarrhae
están más correlacionadas con la Dimensión 1 mientras las variables Courgette y
Potato son las más correlacionadas con la dimensión 2 Las correlaciones cuadradas
entre variables y dimensiones son utilizadas como coordenadas y podemos obtenerlas
de la siguiente manera:
head(round(res_varz$coord ,2),22) ",2 es el # de decimales y ,22 es para
desplegar las 22 variables"
#en el análisis se consideran 11
variables _y y _n son casos

x.e. Dim 1 Dim 2 Dim 3 Dim 4 Dim 5


Nausea_n 0.26739 0.12139 -0.26558 0.03376
0.07370
Nausea_y -0.95815 -0.43498 0.95167 -0.12098 -
0.26411

Para visualizar las variables categóricas sin la correlación ocupamos:


fviz_mca_var(resultados_datos, repel = T)

Interpretación del gráfico:


“Las variables con perfiles similares están agrupadas”
“Las variables negativamente correlacionadas se encuentran en cuadrantes opuestos”
“La distancia entre los puntos y el origen mide la calidad de las variables en el factor
map”
Calidad de representación de las variables categoricas: En este ejemplo las primeras 2
dimensiones son suficientes para contener el 46 por ciento del total de
inercia(variación) contenida en los datos. No todos los puntos están igualmente bien
presentados en las 2 dimensiones. La calidad de la representación es llamada squared
cosine (cos2) {coseno cuadrado}, mide el grado de asociasión entre variables y un eje
en particular. Podemos obtener los valores de cos2 con la siguiente sentencia:
head(res_varz$cos2, 22)

x.e. Dim 1 Dim 2 Dim 3 Dim 4 Dim 5


Nausea_n 0.256200730 5.280258e-02 2.527485e-01 0.004084375
0.0194661965
Nausea_y 0.256200730 5.280258e-02 2.527485e-01 0.004084375
0.0194661965

Si una variable está bien representada por 2 dimensiones la suma debe ser cercana a
1, a veces son necesarias más de 2 dimensiones para representar perfectamente la
información.
Podemos representar con gradientes que tan bien está representada una variable de
la siguiente manera:
fviz_mca_var(resultados_datos, col.var = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE)

Podemos representar el cos2 en una grafica de barras para un mejor entendimiento


de la sigueinte forma:
fviz_cos2(resultados_datos, choice = "var", axes = 1:2) #axes es para
seleccionar las dimensiones que queramos tomar en cuenta

Contribución de las variables a las dimensiones:


head(round(res_varz$contrib,2),22)

x.e. Dim 1 Dim 2 Dim 3 Dim 4 Dim 5


Nausea_n 1.52 0.81 4.67 0.08 0.49
Nausea_y 5.43 2.91 16.73 0.30 1.76

Las variables con mayor valor contribuye más a la definición de las dimensiones,
aquellas variables que contribuyen más a las dimensiones 1 y 2 son las más
importantes para explicar la variabilidad en los datos. Haciendo uso de la función
fviz_contrib() podemos generar una gráfica de barras para mostrar la contribución de
las variables a las dimensiones:
Para D1:
fviz_contrib(resultados_datos, choice = "var", axes = 1, top = 10) #top =
10 muestra las 10 variables que más contribuyen

Para D2:
fviz_contrib(resultados_datos, choice = "var", axes = 2, top = 10)

Para el Total:
fviz_contrib(resultados_datos, choice = "var", axes = 1:2, top = 10)

Con los gráficos notamos que: “Abdo_n, Diarrhea_n ,Fever_n y Mayo_n : son las
variables más importantes para explicar la Dimensión-1” “Courg_n, Potato_n, Vomit_y
y Icecream_n : son las variables más importantes para explicar la Dimensión-2”
Al igual que los cosenos cuadrados podemos mostrar el gradientes esta información
en el factor map:
fviz_mca_var(resultados_datos, col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE, )

INDIVIDUOS
Para comenzar a trabajar con los datos de los individuos generaremos una nueva
variable en R donde guardaremos:
res_indz<-get_mca_ind(resultados_datos)
res_indz #de aqui podemos obtener la nomenclatura para acceder a los
componentes

Multiple Correspondence Analysis Results for individuals


===================================================
Name Description
1 "$coord" "Coordinates for the individuals"
2 "$cos2" "Cos2 for the individuals"
3 "$contrib" "contributions of the individuals"

De igual manera que con las variables podemos representar a individuos utilizando:
fviz_mca_ind(resultados_datos, repel = TRUE)
Para representarlos por su cos2:
fviz_mca_ind(resultados_datos, col.ind = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE)

Graficos de barras de individuos:


cos2:
fviz_cos2(resultados_datos, choice = "ind", axes = 1:2, top = 10)

Contribución:
fviz_contrib(resultados_datos, choice = "ind", axes = 1:2, top = 20)

Asiganar colores a individuos por grupos: Es posible asignar grupos de individuos a


un color a la par de añadir elipses que representen la confianza alrededor del punto
que represente la media de la categoria:
fviz_mca_ind(resultados_datos,
label = "none", # Esconde las etiquetas de los individuos
habillage = "Vomiting", # Variable que se agrupara por
categoria
palette = c("#00AFBB", "#E7B800"), #esta sentencia es para
elegir los colores de los grupos
addEllipses = TRUE, ellipse.type = "confidence") #definimos
los elipses y el tipo de elipse

También podemos definir la variable de agrupación por su número de columna o


llamarla externamente como:
habillage = poison$Vomiting
habillage = 2
Podemos realizar esto para cualquier variable que elijamos y para más de una
variable, como:
fviz_ellipses(resultados_datos, c("Vomiting", "Fever"),
geom = "point")

DESCRIPCION DE DIMENSIONES
Para obtener las variables más correlacionadas con una dimensión dada podemos
utilizar:
res_descz <- dimdesc(resultados_datos, axes = c(1,2)) #Guardamos la
información en una variable con dimdesc
res_descz[[1]] #Describimos Dimensión-1
res_descz[[2]] #Describimos Dimensión-2

También podría gustarte