-
Notifications
You must be signed in to change notification settings - Fork 0
/
MCA.R
182 lines (150 loc) · 7.26 KB
/
MCA.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
##############################################
### ANÀLISIS DE COMPONENTS MÚLTIPLES ###
### (ACM) ###
##############################################
# Cargamos las librerias necesarias
library(FactoMineR)
library(Matrix)
library(factoextra)
library(corrplot)
# Base de datos
## Vamos a utilizar los datos “poison†del paquete FactoMineR, que es una encuesta
## a niños de primaria que tuvieron intoxicación por alimentos, información de
## los sintomas y comida. Estos datos poseen información de 55 niños, asà como
## también algunas 15 variables.
data(poison)
head(poison)
str(poison)
# Nos quedamos con las variables categoricas
tipo <- sapply(poison, class)
varCat <- names(tipo)[which(tipo %in% c("factor", "character"))]
## [1] "Enfermo" "Sexo" "Náuseas" "Vómitos" "Abdominales"
## [6] "Fiebre" "Diarrea" "Patata" "Pescado" "Mayonesa"
## [11] "CalabacÃn" "Queso" "Helado"
for (ca in varCat) {
plot(poison[, ca], main = ca, ylab = "Count", col = "steelblue",
las = 2)
}
# ==============================================================================
# Análisi de Correspondencies Multiples (ACM)
res.mca <- MCA(poison, quanti.sup = c(1, 2), quali.sup = c(3, 10:15), graph = FALSE)
## Visualizamos los objetos que encontramos en el ACM
res.mca
# ------------------------------------------------------------------------------
# Visualizar los resultados
## Extrae los valores propios y varianzas
eig.val <- get_eigenvalue(res.mca)
head(eig.val)
## Visualizar porcentajes de inercia por cada dimension
### Para determinar el numero de componentes principales se puede mirar un Scree Plot,
### que es un plot de los eigenvalues ordenados de mayor a menor.
### El número de componentes es determinado en el punto mas allá del cual los
### valores propios (egeinvalues) restantes son todos relativamente pequeños y
### de tamaño comparable.
fviz_screeplot(res.mca, addlabels = TRUE, ylim = c(0, 45))
# ------------------------------------------------------------------------------
## Biplot de individuos y categorias (similitud)
### Luego, hacemos un diagrama simetrico:
### individuos: puntos azules
### categorÃas: triángulos rojos.
fviz_mca_biplot(res.mca,
repel = TRUE, # evita la superposicion de texto
ggtheme = theme_minimal())
# ==============================================================================
# Anà lisi del ACM obtenido
## Variables
var <- get_mca_var(res.mca)
var
### Coordenadas en las dimensiones
head(var$coord)
### Calidad de representacion (Cos2)
### Cuánto de la variabilidad de los datos originales se captura en el espacio
### dimensional creado por el MCA. Una alta calidad de representación significa
### que los puntos en este espacio representan adecuadamente las relaciones entre
### las categorÃas de las variables originales. El valor va de 0 a 1
head(var$cos2)
### Contribuciones a las dimensiones
### Cuanto contribuye cada variable a la generación de los ejes
head(var$contrib)
### Se puede representar visualmente de la siguiente manera:
fviz_mca_var(res.mca, choice = "mca.cor",
repel = TRUE,
ggtheme = theme_minimal())
#### Esta gráfica ayuda a identificar las variables que están más correlacionadas con cada dimensión.
#### Las correlaciones cuadradas entre variables y las dimensiones son usadas como coordenadas.
### Visualización sólo de modalidades de las variables
fviz_mca_var(res.mca,
repel = TRUE,
ggtheme = theme_minimal())
# Calidad de la representación de las categorias de las variables
## La calidad de la representación se llama el coseno cuadrado (Cos2), el cual
## mide el grado de asociación entre las categorÃas de las variables y un eje en
## particular. Si la categorÃa de una variable está bien representada por dos
## dimensiones, la suma del cos2 es cercana a uno. Para algunos Ãtems de las filas,
## más de dos dimensiones son requeridas para represetar perfectamente los datos.
head(var$cos2)
### Grado de asociacion entre las categorias de las variables
fviz_mca_var(res.mca, col.var = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
ggtheme = theme_minimal())
### Podemos realizar la misma información pero poniendo transparente aquellas etiquetas
### que se representan de mala forma
fviz_mca_var(res.mca, alpha.var = "cos2",
repel = TRUE,
ggtheme = theme_minimal())
### Podemos visualizar la medida del coseno2 a través de un correlograma
corrplot(var$cos2, is.corr = FALSE)
### TambÃen podemos visualizar el coseno en los ejes de las dos variables
fviz_cos2(res.mca, choice = "var", axes = 1:2)
### Podemos visualizar la contribución en el 1r eje
#### La linea roja indica el valor promedio esperado si las contribuciones fueran uniformes.
fviz_contrib(res.mca, choice = "var", axes = 1, top = 15)
fviz_contrib(res.mca, choice = "var", axes = 2, top = 15)
### Incluso podemos visualizar la dispersión del cos2 segun las modalidades
fviz_mca_var(res.mca, col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
ggtheme = theme_minimal())
# ==============================================================================
# Individuos
ind <- get_mca_ind(res.mca)
ind
## Coordenadas
head(ind$coord)
## calidad de representacion
head(ind$cos2)
## Contribuciones
head(ind$contrib)
## contribucion y calidad de representacion
fviz_mca_ind(res.mca, col.ind = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
ggtheme = theme_minimal())
## Cos2 de individuos
fviz_cos2(res.mca, choice = "ind", axes = 1:2, top = 20)
## contribucion de individuos a las variables
fviz_contrib(res.mca, choice = "ind", axes = 1:2, top = 20)
## Podemos agrupar los individuos
### El siguiente código agrupa los individuos por colores utilizando los niveles
### de la variable de elección
### El argumento habillage se usa para especificar el factor de la variable para agrupar
### los individuos por color. Se agrega también un elipse de concentración alrededor
### de cada grupo usando el argumento addEllipses = TRUE.
fviz_mca_ind(res.mca,
label = "none",
habillage = "Vomiting", # color por grupos
palette = c("#00AFBB", "#E7B800"),
addEllipses = TRUE, ellipse.type = "confidence", #elipse de concentracion y punto medio
ggtheme = theme_minimal())
fviz_ellipses(res.mca, c("Vomiting", "Fever"),
geom = "point")
fviz_ellipses(res.mca, 1:4, geom = "point")
# ==============================================================================
# Descripcion de la dimensión
## Correlacion de varaibles con las dimensiones
res.desc <- dimdesc(res.mca, axes = c(1,2)) #es com fer el profiling pero del acm
### Descripcion de dimension 1
res.desc[[1]]
### Descripcion de dimension 2
res.desc[[2]]