class: title-slide, middle, center background-image: url(data:image/png;base64,#img/LOGOCCM-GRIS.png), url(img/P3.png) background-position: 50% 10%, 75% 75% background-size: 15%, cover .center-column[ # .my-gold[Análisis Multivariado] ### .my-gold[Seminario de Estadística] ####Haydeé Peruyero #### ] .white[.left[.footnote[Based in Overleaf template CCM3[Overleaf template CCM3](https://www.overleaf.com/latex/templates/ccm-beamer-template-3/bfqcwdmwkxkx)]]] --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle, center #
# .my-gold[¿Qué son los datos multivariados y el análisis multivariado?] --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle # .my-gold[Datos multivariados] Resulta cuando se alamacenan valores de varias variables aleatorias en varios sujetos u objetos. Lo que tenemos son observaciones multidimencionales. Este tipo de datos se colectan en una gran cantidad de disciplinas. Se pueden representar en un formato rectangular, donde `\(n\)` es el número de variables y `\(m\)` el número de unidades/sujetos/objetos. |Unidad | Variable 1 | `\(\cdots\)` | Variable n | |---|---|---|---| |1| `\(x_{11}\)` | `\(\cdots\)` | `\(x_{1n}\)` | | `\(\vdots\)` | `\(\vdots\)` | `\(\vdots\)` | `\(\vdots\)` | |m | `\(x_{m1}\)` | `\(\cdots\)` | `\(x_{mn}\)`| --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle # .my-gold[Análisis multivariado] En algunos casos tiene sentido estudiar las variables por separado, pero no en general. Las variables pueden estar relacionadas en menor o mayor grado. Si cada variable se estudia por separado, podemos perder la estructura completa. El .my-red[análisis multivariado] es el análisis estadístico simultaneo de una colección de variables que mejora el análisis de cada variable al usar información sobre las relaciones entre las variables. Existen métodos de análisis multivariado que son exploratorios y otros que se pueden usar para hacer inferencias. --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle, center .pull-left[ ###
¿Qué tipo de variables existen? .can-edit.key-likes[ - - - - ] ] .pull-right[ ###
Ejemplos: .can-edit.key-likes[ - - - - ] ] --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle # Tipos de preguntas en análisis multivariado. Supongan que tienen un conjunto de datos con medidas de busto, cintura y cadera de una muestra de hombres y mujeres. ¿ Es posible resumir el tamaño y forma del cuerpo en algún número al combinar de alguna forma esta información? ¿ Existen subtipos de cuerpos con formas similares o muy diferentes? -- En el primer caso, este tipo de análisis se puede realizar con .my-red[componentes principales], en el segundo con .my-red[clusters]. .my-red[**NOTA:**] Dependiendo del tipo de análisis, la cantidad de individuos de los cuales se toma información es importante. --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle #
Covarianzas La .my-red[covarianza] entre dos variables aleatorias es una medida de su dependencia lineal. Si un conjunto de datos multivariados tiene `\(n\)` variables observadas, entonces existen `\(n\)` varianzas y `\(n(n-1)/2\)` covarianzas. Generalmente estas cantidades se colocan en una matriz simétrica `\(\Sigma\)` de tamaño `\(n\times n\)`: `$$\left( \begin{matrix} \sigma_1^2 & \sigma_{12} & \cdots & \sigma_{1n} \\ \sigma_{21} & \sigma_2^2 & \cdots & \sigma_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ \sigma_{n1} & \sigma_{n2} & \cdots & \sigma_{n}^2 \end{matrix} \right)$$` Donde `\(\sigma_{ij}=\sigma_{ji}\)`. Esta matriz se conoce como la matriz de .my-red[varianzas y covarianzas]. Para un conjunto de observaciones, la matriz `\(\Sigma\)` se estima como: `$$S = \frac{1}{n-1} \sum_{i=1}^{n} (x_{i} - \bar{x}) (x_{i}-\bar{x}) ^{T}.$$` --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle #
Correlaciones La covarianza es difícil de interpretar en ocasiones debido a que las variables pueden tener escalas muy diferentes de medición. Por esta razón suele .my-red[estandarizarse] dividiendo por el producto de las desviaciones estándar de las dos variables, el resultado de esto se le llama el coeficiente de correlación: `$$\rho_{ij}=\frac{\sigma_{ij}}{\sigma_i \sigma_j}$$` donde `\(\sigma_i=\sqrt{\sigma_i^2}\)`. La correlación es independiente de las escalas de medición y estos coeficientes están entre `\(-1\)` y `\(1\)` y nos dan una medida de la relación lineal entre las variables `\(X_i\)` y `\(X_j\)`. Si tenemos `\(n\)` variables, entonces podemos acomodar estos coeficientes en una matriz de tamaño `\(n\times n\)` donde los elementos en la diagonal son `\(1\)`. La matriz se puede escribir en términos de la matriz de covarianzas: `$$R=D^{-1/2}SD^{1/2}$$` donde `\(D^{-1/2}=diag(1/\sigma_1,\dots, 1/\sigma_n)\)`. --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle #
Distancias El concepto de distancia entre datos multivariados es de interés e importante. Dados dos unidades `\(i\)` y `\(j\)`, ¿qué nos sirve como medida de distancia? La más común es la Euclideana pero existen muchas más. Una **similitud** es una medida entre dos objetos de que tanto se parecen. Por lo cual entre más parecidos sean los dos objetos su medida de similitud será más grande. Una **disimilitud** entre dos objetos es una medida del grado en el cual dos objetos son diferentes. Una disimilitud debe ser baja si se consideran pares de objetos que son similares. Toda distancia (o métrica) es una disimilitud, pero no toda disimilitud es una distancia. Cuando los datos se encuentran en escalas muy diferentes, tiene sentido calcular la distancia después de haber estandarizado los datos. En R, existe la función `dis()` para calcular la distancia entre dos objetos. --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle, center # Plots de matrices de correlación o distancias En R existen varios paquetes que nos permiten realizar los plots de estas matrices. ```r library(ggcorrplot) library(corrplot) ``` ```r cor.mat_all <- cor(data.matrix(iris[,-5]), use="complete.obs") corplot_all <- corrplot(cor.mat_all, method="shade", tl.col = "black", tl.srt = 45, number.cex = 0.4, addCoef.col = "black",order = "AOE",type = "upper",addshade = "all", diag = F) ``` --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle, center ![](data:image/png;base64,#mult_ana_files/figure-html/unnamed-chunk-3-1.png)<!-- --> --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle, center #
Plots univariados ¿Qué tipos de plots podrías usar para hacer un análisis univariado? .can-edit.key-likes[ - - - - ] --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle # Plots multivariados Los plots multivariados tratan de involucrar más de dos variables, hay de varios tipos por ejemplo de símbolos y .my-red[glyph] en los cuales los valores de los datos controlan el parámetro de los símbolos. Para el caso de querer representar 3 variables podemos usar el plot de burbujas donde el radio del cículo lo determinaba la tercera variable. .my-gold[¿Cómo podemos representrar datos de dimensiones muy altas?] -- Una forma son las matrices de scatterplots que vimos con el comando `pairs` donde tenemos todas las posibles combinaciones de dos a dos variables. Existen modificaciones a este que incluyen las regresiones u otros llamados .my-red[bagplot] (este lo pueden usar en R con el comando `bagplot.pairs(data, gap=, col.baghull= "color")` ). -- Otros más son: - Caritas de Chernoff - Curvas de Andrew - Estrellas - Paralelas - 3D --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle, center # Caritas de Chernoff Publicadas por Herman Chernoff en 1973 en el artículo *The use of Faces to Represent Points in k-dimensional Space Graphically* del Journal of the American Statistical Association. Estas se basan en el hecho que nuestro ojo puede reconocer los .my-blue[rostros humanos] muy facilmente. Reconocemos a nuestra gente entre miles de caras. .panelset[ .panel[.panel-name[Código y caritas] .pull-left[ ```r install.packages("aplpack") library(aplpack) data(iris) ``` ```r faces(iris[c(1,51,101),1:4], nrow.plot = 1, ncol.plot = 3, main = "La primer flor de cada especie", print.info = TRUE) ``` ] .pull-right[ ![](data:image/png;base64,#mult_ana_files/figure-html/unnamed-chunk-7-1.png)<!-- --> ``` # effect of variables: # modified item Var # "height of face " "Sepal.Length" # "width of face " "Sepal.Width" # "structure of face" "Petal.Length" # "height of mouth " "Petal.Width" # "width of mouth " "Sepal.Length" # "smiling " "Sepal.Width" # "height of eyes " "Petal.Length" # "width of eyes " "Petal.Width" # "height of hair " "Sepal.Length" # "width of hair " "Sepal.Width" # "style of hair " "Petal.Length" # "height of nose " "Petal.Width" # "width of nose " "Sepal.Length" # "width of ear " "Sepal.Width" # "height of ear " "Petal.Length" ``` Para los elementos de color de las caras, los colores son encontrados al promediar los conjuntos de variables: (7,8)-eyes:iris, (1,2,3)-lips, (14,15)-ears, (12,13)-nose, (9,10,11)-hair, (1,2)-face (From `?faces`). ] ] .panel[.panel-name[Significado] .pull-left[ ![](data:image/png;base64,#mult_ana_files/figure-html/unnamed-chunk-8-1.png)<!-- --> ``` # effect of variables: # modified item Var # "height of face " "Sepal.Length" # "width of face " "Sepal.Width" # "structure of face" "Petal.Length" # "height of mouth " "Petal.Width" # "width of mouth " "Sepal.Length" # "smiling " "Sepal.Width" # "height of eyes " "Petal.Length" # "width of eyes " "Petal.Width" # "height of hair " "Sepal.Length" # "width of hair " "Sepal.Width" # "style of hair " "Petal.Length" # "height of nose " "Petal.Width" # "width of nose " "Sepal.Length" # "width of ear " "Sepal.Width" # "height of ear " "Petal.Length" ``` ] .pull-right[ <img src="img/info-faces.png" width="50%" alt="info-faces"/> ] ] ] --- class: middle, center, inverse .my-gold[
] # .my-gold[Práctica:] ### .my-gold[Carga la base de datos y explora las caritas de Chernoff] --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle # Curvas de Andrews Se basa en el trabajo de Andrews de 1972 *Plots of High Dimensional Data*, Biometrics, vol. 28, no. 1, pp. 125-136. Si `\(x_i=(x_{i1}, x_{i,2}, \dots, x_{ip})\)` es la observación `\(i\)` ésima, entonces se transforma en una curva de la forma: Si `\(p\)` es par: `$$f_i(t)= \frac{x_{i1}}{\sqrt{2}} + x_{i2}\sin(t)+x_{i3}\cos(t)+x_{i4}\sin(2t)+x_{i5}\cos(2t)+\cdots+x_{ip}\sin(\frac{p}{2}t)$$` y si `\(p\)` es impar en: `$$f_i(t)= \frac{x_{i1}}{\sqrt{2}} + x_{i2}\sin(t)+x_{i3}\cos(t)+\cdots+x_{ip}\cos(\frac{p-1}{2}t)$$` y los valores de `\(t\in(0,2\pi)\)`. --- #### Ejemplo en Geogebra de Curvas de Andrews de Juan Pablo Hermosillo B. <iframe src="https://www.geogebra.org/m/MYNkybtM?showcase=0" width="100%" height="400px" data-external="1"></iframe> --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle La distancia entre dos curvas es el área entre ellas y será igual a la distancia entre las observaciones. Permite detectas grupos. Si las observaciones son lejanas entonces las funciones también. Si se usan en diferente orden las variables, entonces se producen curvas diferentes. En R, el paquete para graficar estas curvas es `andrews` y tiene integradas 5 funciones más para estás curvas. Explora la ayuda del paquete para ver estas curvas. Dependiendo del orden de las variables se pueden ver mejor las separaciones de los grupos. Se pueden meter muchos más individuos a diferencia del de caritas de Chernoff. Este tipo de graficos y el de caritas de Chernoff nos ayuda a representar muchas dimensiones en `\(\mathbb{R}^2\)`. --- class: middle .pull-left[ ```r library(andrews) par(mfrow=c(2,2)) andrews(iris, type = 1, clr = 5, ymax = 3, main = "Curva tipo 1") andrews(iris, type = 2, clr = 5, ymax = 3, main = "Curva tipo 2") andrews(iris, type = 3, clr = 5, ymax = 3, main = "Curva tipo 3") andrews(iris, type = 4, clr = 5, ymax = 3, main = "Curva tipo 4") ``` ] .pull-right[ ![](data:image/png;base64,#mult_ana_files/figure-html/unnamed-chunk-12-1.png)<!-- --> ] --- class: middle, center, inverse .my-gold[
] # .my-gold[Práctica:] ### .my-gold[Carga la base de datos y explora las curvas de Andrews] --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover # Gráficos de Paralelas Usualmente graficamos ejes perpendiculares, este no es el caso de los plots de paralelas, en este caso se consideran ejes paralelos para cada variable. Usualmente los datos se reescalan de tal forma que todos tengan la misma escala. Los valores multidimensionales para cada observación se conectan con lineas que podemos seguir a lo largo de todas las dimensiones. ```r library(lattice) data(mtcars) parallel(~mtcars|mtcars$cyl, main="Plot de paralelas por Cilindros") ``` --- ![](data:image/png;base64,#mult_ana_files/figure-html/unnamed-chunk-14-1.png)<!-- --> --- class: middle, center, inverse .my-gold[
] # .my-gold[Práctica:] ### .my-gold[Carga la base de datos y explora los plots de paralelas] --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover # Estrellas La función `stars` del paquete de `graphics` nos permite realizar plots de estreyas o radares para representar datos multivariados, las variables se mandan a las longitudes de los rayos y cantidad de estos. ```r palette(rainbow(12, s = 0.6, v = 0.75)) stars(mtcars[, 1:7], len = 0.8, key.loc = c(12, 1.5), main = "Motor Trend Cars", draw.segments = TRUE) ``` --- ![](data:image/png;base64,#mult_ana_files/figure-html/unnamed-chunk-16-1.png)<!-- --> --- class: middle, center, inverse .my-gold[
] # .my-gold[Práctica:] ### .my-gold[Carga la base de datos y explora las gráficas de estrellas] --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle # Plots 3D ![](data:image/png;base64,#mult_ana_files/figure-html/unnamed-chunk-17-1.png)<!-- --> --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle #
Clusters -- El objetivo del análisis por conglomerados es formar grupos de ordenaciones, de manera que todas las unidades de un grupo sean parecidas entre ellas pero diferentes a las de los otros grupos. Generalmente no se sabe el número de grupos a formar ni sus tamaños. Lo importante es definir a que nos referimos con **similares**. Para esto hacemos uso de distancias, similitudes y disimilitudes. --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle # Tipos de Clusters Los métodos de conglomerados pueden ser jerárquicos y no jerárquicos. Los métodos **jerárquicos aglomerativos** dan origen a un gráfico llamado *dendrogramas*. Estos métodos son iterativos y en cada paso debe recalcularse la matriz de distancias. Algunos de los métodos de conglomerados son: - *Single linkage agglomerative clustering* o método de la liga sencilla o del vecino más cercano. - *Complete linkage agglomerative clustering* o método de la liga completa o del vecino más lejano. - *Average linkage agglomerative clustering* o métdod de la liga promedio. - *Ward’s minimum variance clustering* o método Ward. --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle # Método del vecino más cercano En el método de vecinos más cercanos, en cada paso la agrupación combina dos muestras que contienen las distancias más cortas entre pares (o la mayor similitud), es decir, se toma la mínima de todas las posibles distancias entre los objetos que pertenecen a distintos conglomerados: `$$d_{AB}=\min_{i\in A, j\in B} (d_{ij}).$$` .center[ <img src="data:image/png;base64,#img/single_linkage.png" width="25%" /> ] --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle # Ejemplo .pull-left[ ```r A <- c(0,4,15,6,2,9) B <- c(4,0,5,7,6,10) C <- c(15,5,0,9,3,15) D <- c(6,7,9,0,10,3) E <- c(2,6,3,10,0,2) F <- c(9,10,15,3,2,0) df <- data.frame(A,B,C,D,E,F, row.names = c("A","B","C","D","E","F")) df %>% knitr::kable(format = "html") dist <- as.dist(df, diag= TRUE) ``` ] .pull-right[.center[ <table> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:right;"> A </th> <th style="text-align:right;"> B </th> <th style="text-align:right;"> C </th> <th style="text-align:right;"> D </th> <th style="text-align:right;"> E </th> <th style="text-align:right;"> F </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> A </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 4 </td> <td style="text-align:right;"> 15 </td> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> 2 </td> <td style="text-align:right;"> 9 </td> </tr> <tr> <td style="text-align:left;"> B </td> <td style="text-align:right;"> 4 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 5 </td> <td style="text-align:right;"> 7 </td> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> 10 </td> </tr> <tr> <td style="text-align:left;"> C </td> <td style="text-align:right;"> 15 </td> <td style="text-align:right;"> 5 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 9 </td> <td style="text-align:right;"> 3 </td> <td style="text-align:right;"> 15 </td> </tr> <tr> <td style="text-align:left;"> D </td> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> 7 </td> <td style="text-align:right;"> 9 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 10 </td> <td style="text-align:right;"> 3 </td> </tr> <tr> <td style="text-align:left;"> E </td> <td style="text-align:right;"> 2 </td> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> 3 </td> <td style="text-align:right;"> 10 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 2 </td> </tr> <tr> <td style="text-align:left;"> F </td> <td style="text-align:right;"> 9 </td> <td style="text-align:right;"> 10 </td> <td style="text-align:right;"> 15 </td> <td style="text-align:right;"> 3 </td> <td style="text-align:right;"> 2 </td> <td style="text-align:right;"> 0 </td> </tr> </tbody> </table> ] ] .my-blue[[Ejemplo](https://docs.google.com/spreadsheets/d/1gKUcDjZaIzY5pGH1f9uwozl6s0F_l-dV/edit?usp=sharing&ouid=104705813957870442432&rtpof=true&sd=true) ] --- ```r hc_clust <- hclust (d = dist, method = 'single') plot(hc_clust) ``` <img src="data:image/png;base64,#mult_ana_files/figure-html/unnamed-chunk-21-1.png" style="display: block; margin: auto;" /> --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle # Método de la liga completa El clustering de la liga completa también se conoce como *clustering del vecino más lejano*. Permite que que una muestra (o un grupo) se aglomere con otra muestra (o grupo) *sólo a la distancia más lejana entre sí*. Así, todos los miembros de ambos grupos están vinculados. `$$d_{AB}=\max_{i\in A, j\in B} (d_{ij}).$$` .center[ <img src="data:image/png;base64,#img/complete-linkage.png" width="25%" /> ] --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle ```r hc_clust <- hclust (d = dist, method = 'complete') plot(hc_clust) ``` <img src="data:image/png;base64,#mult_ana_files/figure-html/unnamed-chunk-23-1.png" style="display: block; margin: auto;" /> --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle # Método de la liga promedio La agrupación de liga promedio permite agrupar una muestra en un clúster en la media de las distancias entre esta muestra y todos los miembros del clúster. Los dos clusters se unen a la *media de las distancias entre todos los miembros de un clúster y todos los miembros del otro*. `$$d_{AB}=\frac{1}{n_An_B} \sum_{i\in A} \sum_{j\in B} (\ d_{ij}\ ).$$` <img src="data:image/png;base64,#img/average_linkage.png" width="25%" style="display: block; margin: auto;" /> --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle ```r hc_clust <- hclust (d = dist, method = 'average') plot(hc_clust) ``` <img src="data:image/png;base64,#mult_ana_files/figure-html/unnamed-chunk-25-1.png" style="display: block; margin: auto;" /> --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle # Método de agrupación de varianza mínima de Ward La agrupación de varianza mínima de Ward (también conocida como agrupación de Ward) presentada originalmente por Ward (1963) se basa en el criterio del *modelo lineal de mínimos cuadrados*. Este método método minimiza las sumas de las distancias al cuadrado (es decir, el error al cuadrado de ANOVA) entre las muestras. Considera el análisis de conglomerados como un análisis de la varianza, en lugar de utilizar métricas de distancia o medidas de asociación. Este método es más apropiado para las variables cuantitativas, y no variables binarias. --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle # Método de agrupación de varianza mínima de Ward El clustering de Ward se implementa mediante la búsqueda del par de clusters en cada paso que conduce al mínimo incremento de la varianza total dentro del cluster después de la fusión. Este incremento es una distancia cuadrada ponderada entre los centros de los clusters. Aunque las distancias iniciales de los clusters se definen como la distancia euclidiana al cuadrado entre puntos en el clustering de Ward, otros métodos de distancia pueden producir resultados significativos. <img src="data:image/png;base64,#img/wards_linkage.png" width="25%" style="display: block; margin: auto;" /> --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle ```r hc_clust <- hclust (d = dist, method = 'ward.D2') plot(hc_clust) ``` <img src="data:image/png;base64,#mult_ana_files/figure-html/unnamed-chunk-27-1.png" style="display: block; margin: auto;" /> --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle # Método del centroide Al redefinir la distancia entre dos conglomerados se toma la diferencia entre las medias (centroide) de cada conglomerado. Se unen los dos conglomerados más cercanos. # Método de la mediana Al redefinir la distancia entre dos conglomerados se toma la diferencia ponderada entre las medias (centroide) de cada conglomerado, la ponderación está dada por el tamaño (número de unidades del conglomerado) de los conglomerados. Se unen los dos conglomerados más cercanos. Se espera un mejor rendimiento que el del centroide cuando los grupos varían mucho en tamaño. --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle, center # Análisis de Componentes Principales El análisis de componentes principales tiene como objetivo reducir la dimensión y conservar en lo posible la estructura de estos, la cual no depende de los ejes utilizados para las coordenadas. Dadas `\(n\)` observaciones de `\(p\)` variables, se analiza si es posible representar adecuadamente la información con un número menor de variables construidas como combinaciones lineales de las originales. El *primer componente principal* es la combinación lineal de las variables originales que tienen varianza máxima. Por ejemplo, supongamos que tenemos las mediciones de dos variables: altura `\(X_1\)` y peso `\(X_2\)` de un grupo de personas. --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle .pull-left[ ![Primera y segunda componentes](data:image/png;base64,#img/cp_estaturapeso.png) ] .pull-right[ Lo que se busca es proyectar los datos sobre un eje que reproduzca de la mejor manera la .my-red[forma] de los datos. Lo primero que se hace es centrar los datos en el centroide `\((\bar{X_1}, \bar{X_2})\)`. Después se realiza una rotación de manera que las .my-red[proyecciones] sean lo más parecidas posibles a los vectores originales. - Los individuos que quedan a la izquierda en el eje `\(OY1\)` son los más pequeños en .my-red[talla] y a la derecha son los más grandes. - En el eje `\(OY2\)` los sujetos que quedan por encima son los que tienen un mayor .my-red[peso] dada la estatura y por debajo los que tienen poco peso dad su estatura, es decir .my-gold[este eje habla de la **forma** de los sujetos]. - Para estos sujetos ocurre que varían mucho en talla y hay poca variación en la forma. ] --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle Rotar los ejes un ángulo `\(\alpha\)` corresponde a aplicar una transformación lineal de los datos: `$$\left[ \begin{matrix} Y1 \\ Y2 \end{matrix} \right] = \left[ \begin{matrix} \cos \alpha & \sin \alpha \\ -\sin \alpha & \cos \alpha \end{matrix}\right] \left[ \begin{matrix} X1 \\ X2 \end{matrix} \right] = \left[ \begin{matrix} X1\cos \alpha + X2\sin \alpha \\ -X1 \sin \alpha + X2 \cos \alpha \end{matrix}\right]$$` -- Las proyecciones de los puntos sobre el eje `\(OY1\)` son una buena aproximación de los datos ya que en la otra dirección hay poca variación. Entonces se puede usar únicamente `$$Y1=X1\cos \alpha + X2\sin \alpha$$` y así la nueva variable `\(Y1\)` resume a las otras dos. --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle .pull-left[ ![Proyección de un punto](data:image/png;base64,#img/cp_proyeccion.png) ] .pull-right[ Supongamos que tenemos el punto `\(P_i\)`, entonces se cumple `$$(OP_i)^2 = (OP_i^{'})^2 + (P_i P_i^{'})^2.$$` La cantidad `\((P_i P_i^{'})^2\)` se puede ver como un error que se desea minimizar. Si sumamos sobre todos los sujetos y se divide entre `\(n-1\)` `$$C = \frac{\sum_{i=1}^{n}(OP_i)^2}{n-1} = \frac{\sum_{i=1}^{n}(OP_i^{'})^2}{n-1} + \frac{\sum_{i=1}^{n}(P_i P_i^{'})^2}{n-1}.$$` El objetivo es minimizar `\(\frac{\sum_{i=1}^{n}(OP_i)^2}{n-1}\)`. ] --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle La cantidad `$$\frac{\sum_{i=1}^{n}(OP_i)^2}{n-1}$$` es fija, es decir no depende de las coordenadas. Entonces minimizar `$$\frac{\sum_{i=1}^{n}(P_i P_i^{'})^2}{n-1}$$` es equivalente a maximizar `$$\frac{\sum_{i=1}^{n}(OP_i^{'})^2}{n-1}$$` que coincide con .my-red[la varianza de las proyecciones] sobre el eje `\(OY1\)` (ya que los datos están centrados). Entonces el ángulo de rotación que se busca es aquel que .my-red[maximice la varianza de las proyecciones]. --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle En general, supongamos que tenemos datos en un espacio de `\(p\)` variables en `\(n\)` elementos de una población y vamos a suponer que hemos restado a cada variable su media, de tal forma que las variables tienen media cero. Lo que se busca es una transformación lineal `$$a_1^{'}X=(a_{11},a_{12},\dots,a_{1p})(X_1,X2,\dots,X_p)= Y_1$$` Se debe elegir `\(a_1=(a_{11},a_{12},\dots,a_{1p})\)` de tal forma que la `\(var(Y_1)\)` sea máxima. Si el vector aleatorio `\(X=(X_1,X2,\dots,X_p)^{'}\)` tiene matriz de varianzas y covarianzas `\(\Sigma\)` entonces `\(var(Y_1) = var(a_1^{'}X) = a_1^{'}\Sigma a_1\)`. Si se elige un `\(a_1\)` que tenga una norma muy grande, entonces la varianza de `\(Y_1\)` podría resultar muy grande también. Entonces es necesario imponer condiciones sobre `\(a_1\)` para acotar el tamaño de la varianza de `\(Y_1\)` y no hacerla muy grande de manera arbitraria. La condición que se impone es: `$$||a_1||=a_1'\cdot a_1=1.$$` Importando únicamente la dirección del vector `\(a_1\)`. --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle Para maximar imponiendo esta condición se utilizan los multiplicadores de Lagrange: maximizar `\(f(x_1,...,x_p)\)` sujeto a `\(g(x_1,...,x_p)=c\)`, donde `\(f\)` es una función diferenciable y sabemos que existe una `\(\lambda\)` tal que `\(\frac{\partial f}{\partial x_i}-\lambda\frac{\partial g}{\partial x_i}=0\)`. En el caso de componentes principales se tiene que: `$$L(a_i) = a_1' \Sigma a_1 - \lambda(a_1'a_1 -1).$$` Después, se maximizará esta expresión derivando con respecto a los componentes de `\(a_1\)` e igualando a `\(0\)`: $$ \frac{\partial L}{\partial a_1} =\ 2\Sigma a_1 -2\lambda a_1 =0 $$ cuya solución es: $$ \Sigma a_1=\lambda I a_1 $$ entonces `\(a_1\)` es un vector propio de la matriz `\(\Sigma\)` y `\(\lambda\)` será su correspondiente valor propio. Como `\(\Sigma\)` es simétrica y semi positiva definida todas las `\(\lambda_i\geq 0\)`. --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle ### ¿Qué valor propio determina a la primera componente? Para determinar que valor propio de `\(\Sigma\)` es la solución de la ecuación anterior, multiplicamos por `\(a_1\)` a la izquierda: $$a_1'\Sigma a_1=\lambda a_1'a_1 =\lambda $$ entonces, `\(\lambda\)` es la varianza de `\(Y_1\)`. Como esta es la cantidad que queríamos maximizar, entonces `\(\lambda\)` será el valor propio mayor de la matriz `\(\Sigma\)` y su vector asociado `\(a_1\)` serán los coeficientes de cada variable de la primera componente. -- #### ¿Segunda componente? La segunda componente tendrá la dirección donde las proyecciones tengan la segunda mayor varianza. Para encontrar la segunda componente `\(Y_2=a_{2}^{'}X\)` se impone la condición `\(a_2^{'}a_2=1\)` y además que `\(Y_2\)` .my-red[debe ser no correlacionada con] `\(Y_1\)`, es decir `$$cov(Y_2,Y_1)=a_{2}^{'}\Sigma a_{1}=0$$` Se vuelven a usar los multiplicadores de Lagrange pero con estás dos condiciones. --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle La matriz `\(\Sigma\)` la podemos escribir como `$$\Sigma = A \Lambda A^{'}$$` donde la matriz `\(\Lambda\)` sera la matriz diagonal con elementos los valores propios `\(\lambda_1,...,\lambda_p\)` y `\(A=[\bar{a_1} | \bar{a_{2}} | \dots | \bar{a_p}]\)`. -- Como generalmente `\(\Sigma\)` es desconocida, entonces se suele trabajar con la matriz `\(S\)`. -- Cuando se trabaja con distintas unidades de medición, conviene hacer el análisis de componentes principales haciendo los calculos con la matriz de correlaciones, es decir además de centrar los datos los estandarizamos. Los valores propios de la matriz de correlaciones y la de varianzas y covarianzas no coinciden y no hay forma de obtener unos a partir de otros. --- class: middle, center, inverse .my-gold[
] # .my-gold[Práctica:] ### .my-gold[PCA en R] --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle, center # Análisis de discriminante --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle, center # Análisis de Factores --- background-image: url(data:image/png;base64,#img/FONDO.png) background-size: cover class: middle, center # Escalamiento multidimensional