Anàlisis de Componenntes Principales
Christiam Pistala
2022-04-07
Anàlisis de Componentes Principales
Para realizar el anàlisis de componentes principales el primer paso es importar la
base de datos “mundo” asi:
library(rio)
mundo<- import("D:/MAESTRIA/Analisis_Multivariado_de_Datos/Notas AMD
semana1/codigoR/[Link]")
head(mundo)
## V1 Region EspVida PIB_cap Natalidad Mortalidad
## 1 Austria EUROPA 79 18396 12 11.0
## 2 B‚lgica EUROPA 79 17912 12 11.0
## 3 Dinamarca EUROPA 79 18277 12 12.0
## 4 Finlandia EUROPA 80 15877 13 10.0
## 5 Francia EUROPA 82 18944 13 9.3
## 6 Alemania EUROPA 79 17539 11 11.0
La base de datos mundo contsa de 57 registros, tiene dos variables cualitativas y
cuatro variables cuantitativas. Para realizar el ACP, ùnicamente se tendrà en cuenta
las variables cuantitativas, las cuales se extraeràn acontinuacion en el dataframe df:
df=mundo[,3:6]
head(df)
## EspVida PIB_cap Natalidad Mortalidad
## 1 79 18396 12 11.0
## 2 79 17912 12 11.0
## 3 79 18277 12 12.0
## 4 80 15877 13 10.0
## 5 82 18944 13 9.3
## 6 79 17539 11 11.0
Antes de realizar el ACP es necesario determinar si es viable este tipo de anàlisis en
este caso, para esto se analiza a continuaciòn la matriz de correlaciones de “df”.
cor(df)
## EspVida PIB_cap Natalidad Mortalidad
## EspVida 1.0000000 0.6732582 -0.9210858 -0.7740436
## PIB_cap 0.6732582 1.0000000 -0.7945669 -0.1516748
## Natalidad -0.9210858 -0.7945669 1.0000000 0.5375236
## Mortalidad -0.7740436 -0.1516748 0.5375236 1.0000000
En terminos generales se observa alta correlaciòn entre las variables, la minima
correlaciòn es de -0.15 y se presenta entre las variables “Mortalidad” y “PIB_cap”.
Mediante la funciòn PCA de R se realiza el ACP, el cual se guarda en “ACPM”, esta
funciòn calcula diferentes atributos los cuales seràn analizados posteriormente.
library("FactoMineR")
library("factoextra")
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at
[Link]
library("ggplot2")
ACPM <- PCA(df, graph = FALSE)
En primer lugar usando la función get_eigenvalue() se examinarà los valores propios y
la proporción de varianzas para determinar el número de componentes principales a
considerar.
library("FactoMineR")
library("factoextra")
library("ggplot2")
get_eigenvalue(ACPM)
## eigenvalue [Link] [Link]
## Dim.1 2.98046045 74.5115112 74.51151
## Dim.2 0.89050683 22.2626706 96.77418
## Dim.3 0.10760581 2.6901453 99.46433
## Dim.4 0.02142692 0.5356729 100.00000
Como se puede observar en la salida computacional el mayor valor propio es 2.98, el
cual corresponde al valor propio de la primera componente. El segundo mayor valor
propio es 0.89, el cual corresponde al valor propio de la segunda componente. Si
analizamos el porcentaje de varianza acumulada para estos dos valores propios se
puede observar que entre las dos primeras componentes se explica el 96.7% de la
variavilidad, por lo que se concluye usar dos componentes. Sin embargo, la primera
componente explica por si sola un porcentaje de variabilidad aceptable, por lo que se
podrìa considerar usar unicamente esta componente. Tambièn podemos visualizar
mediante la siguiente gràfica este hecho usando la funciòn fviz_eig().
fviz_eig(ACPM, addlabels = TRUE, ylim = c(0, 80))
Usando las dos primeras componentes se realiza un gràfico de correlaciones para
observar que tan bien representadas estàn las variables en las componentes.
fviz_pca_var(ACPM, [Link] = "black")
Se puede observar que las cuatro variables estàn bien representadas por las dos
primeras componentes ya que los vectores se acercan al borde del circulo. Tambien se
puede observar alta correlaciòn negativa entre las variables “Natalidad” - “PIB_cap”, y
“Mortalidad” - “EspVida”.
La funciòn get_pca_var nos permite extraer diferentes atributos para el anàlisi de las
variables, estos atributos se analizaràn posteriormente.
var <- get_pca_var(ACPM)
var
## Principal Component Analysis Results for variables
## ===================================================
## Name Description
## 1 "$coord" "Coordinates for the variables"
## 2 "$cor" "Correlations between variables and dimensions"
## 3 "$cos2" "Cos2 for the variables"
## 4 "$contrib" "contributions of the variables"
Para analizar la calidad de las representaciones se usa el coseno cuadrado.
head(var$cos2, 4)
## Dim.1 Dim.2 Dim.3 Dim.4
## EspVida 0.9679858 0.01727821 0.0008538136 0.0138821863
## PIB_cap 0.5976083 0.36173994 0.0402373854 0.0004143976
## Natalidad 0.9192947 0.02607991 0.0504884078 0.0041370048
## Mortalidad 0.4955717 0.48540878 0.0160262046 0.0029933268
library("corrplot")
## corrplot 0.92 loaded
corrplot(var$cos2, [Link]=FALSE)
De la tabla y de la gràfica se puede concluir que cada una de las cuatro variables estàn
bien explicadas por las dos primeras componentes ya que al sumar los cosenos
cuadrados de las 2 primeras componentes los resultados son cercanos a 1.
En este analisis es importante conocer las contribuciones de las variables a cada
componente, asi:
head(var$contrib, 4)
## Dim.1 Dim.2 Dim.3 Dim.4
## EspVida 32.47773 1.940267 0.7934642 64.788543
## PIB_cap 20.05087 40.621804 37.3933200 1.934005
## Natalidad 30.84405 2.928659 46.9197780 19.307514
## Mortalidad 16.62735 54.509271 14.8934378 13.969938
En este caso no se puede eliminar ninguna de las variables, ya que todas contribuyen
significativamente en cada uno de las dos componentes consideradas. Por ejemplo la
varaiable “EspVida” es muy baja para el componente 2 pero es muy significativa para
la componente 1.
Finalmente realizamos un analisis de los individuos. Usando la funciòn get_pca_ind()
se puede extraer diferentes atributos para los individuos que se analizaràn màs
adelante.
ind <- get_pca_ind(ACPM)
ind
## Principal Component Analysis Results for individuals
## ===================================================
## Name Description
## 1 "$coord" "Coordinates for the individuals"
## 2 "$cos2" "Cos2 for the individuals"
## 3 "$contrib" "contributions of the individuals"
En la siguiente gràfica se muestra los cosenos cuadrados para cada individuo para
analizar la calidad de la representaciòn de cada individuo en las dos primeras
componentes.
fviz_pca_ind(ACPM, [Link] = "cos2",
[Link] = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE
)
## Warning: ggrepel: 9 unlabeled data points (too many overlaps).
Consider
## increasing [Link]
En la grafica se observa que de manera genneral los individuos estàn bien
representados en las componentes. sin embargo, los individuos 40 y 56 no estàn muy
bien representados.