Generación de las matrices:
xu <- matrix( runif( 57*6 ), ncol = 6 ) # Uniforme
xn <- matrix( rnorm( 57*6 ), ncol = 6 ) # Normal
Visualización de los datos mediante histogramas para comprobar que siguen las distribuciones propuestas:
hist(xu)
hist(xn)
Empleo de la función PCA para analizar ambas matrices:
library(FactoMineR)
## Warning: package 'FactoMineR' was built under R version 3.3.3
pca_xu <- PCA(xu)
pca_xn <- PCA(xn)
c(pca_xu$eig[c(1,2),2], pca_xn$eig[c(1,2),2])
## [1] 23.07361 19.84746 23.91726 19.97852
En el caso de la distribución uniforme, espero la varianza se reparta de forma casi equitativa entre las 6 dimensiones existentes. Dado que las dos primeras componentes (representadas en los ejes x e y) explican siempre más varianza que las siguientes espero que la varianza de cada eje sea ligeramente superior al 17%.
Un 25.8% y un 18.9% en el caso de los datos generados siguiendo una distribución uniforme, y un 22.1% y 20.2% en el caso de los datos generados siguiendo una distribución normal (en una de ellas, cada vez que ejecuto o genero un nuevo fichero .html a partir del .Rmd varía, obviamente).
simulations <- matrix(ncol=4, nrow = 20)
colnames(simulations) <- c("Dim1 xu", "Dim2 xu ", "Dim1 xn", "Dim2 xn")
for(n in 1:20){
xu <- matrix( runif( 57*6 ), ncol = 6 )
xn <- matrix( rnorm( 57*6 ), ncol = 6 )
pca_xu <- PCA(xu, graph = F)
pca_xn <- PCA(xn, graph = F)
simulations[n, ] <- c(pca_xu$eig[c(1,2),2], pca_xn$eig[c(1,2),2])
}
summary(simulations)
## Dim1 xu Dim2 xu Dim1 xn Dim2 xn
## Min. :21.23 Min. :18.79 Min. :21.51 Min. :18.37
## 1st Qu.:22.50 1st Qu.:20.00 1st Qu.:23.78 1st Qu.:19.96
## Median :23.70 Median :20.45 Median :24.93 Median :20.54
## Mean :24.12 Mean :20.41 Mean :24.87 Mean :20.56
## 3rd Qu.:25.55 3rd Qu.:20.88 3rd Qu.:26.35 3rd Qu.:21.07
## Max. :28.06 Max. :21.86 Max. :27.79 Max. :23.11
La tabla resumen incluye la información relativa a la varianza explicada por cada una de las dos dimensiones (Dim1 y Dim2) en los PCAs aplicados a conjuntos de datos con una distribución normal (xn) o uniforme (xu) generados en 20 simulaciones diferentes.
Dim1 está en torno a 24 y Dim2 en torno a 20. Dim1 oscila entre el 28,7% y el 19.8%, mientras que Dim2 oscila entre el 23% y el 17.7%.
No parece, el algoritmo de análisis de componentes principales es muy robusto y las cada componente explica un porcentaje de la variable muy similar aunque se use una distribución diferente.
Como puede observarse, no hay una diferencia grande en las varianzas explicadas por ambas dimensiones sigan los datos una distribución uniforme o una distribución normal.
df <- read.table("http://gauss.inf.um.es/datos/mundodes.dat", sep = " ", dec = ".", header = T)
head(df)
## TN1000 TM1000 MortInfan EspHom EspMuj PNBpCapita
## 1 24.7 5.7 30.8 69.6 75.5 600
## 2 12.5 11.9 14.4 68.3 74.7 2250
## 3 13.4 11.7 11.3 71.8 77.7 2980
## 4 11.6 13.4 14.8 65.4 73.8 2780
## 5 14.3 10.2 16.0 67.2 75.7 1690
## 6 13.6 10.7 26.9 66.5 72.4 1640
pca_df <- PCA(df)
Un 78.80%
pca_df$eig
## eigenvalue percentage of variance cumulative percentage of variance
## comp 1 4.72777908 78.7963180 78.79632
## comp 2 0.72609661 12.1016101 90.89793
## comp 3 0.36095040 6.0158401 96.91377
## comp 4 0.11730278 1.9550464 98.86881
## comp 5 0.05404608 0.9007680 99.76958
## comp 6 0.01382505 0.2304174 100.00000
Con una dimensión ya se explica en 78.80% de la varianza, por lo que pueda explicar razonablemente bien los datos. Si se quiere más resolución se pueden usar hasta 3, pero intentar interpretarlo con más de tres dimensiones parece innecesario.
pca_df$var$contrib
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## TN1000 17.33296 3.8220714 26.35018334 46.6081523 5.4365186
## TM1000 11.65406 46.2692307 27.49758748 9.4351010 5.0494719
## MortInfan 19.35324 0.2696861 4.94867380 39.9654582 33.3606115
## EspHom 20.42687 0.7282982 0.08274044 1.2963121 40.8876499
## EspMuj 20.59995 0.1172287 1.69969008 2.5403662 14.2684003
## PNBpCapita 10.63292 48.7934849 39.42112486 0.1546101 0.9973478
EspMuj (esperanza de vida para las mujeres) es la variable que más contribuye a la primera componente (20.59995% de la Dim 1). Aunque otras variables influyen en un nivel muy similar.
Claramente TN1000 contribuye más a la primera componente (17.33296%) que PNBpCapita (10.63292%). Sin embargo, puede observarse, que mientras que la correlación de TN1000 con la primera componente es negativa, la de PNBpCapita es positiva.
PCA(df)
## **Results for the Principal Component Analysis (PCA)**
## The analysis was performed on 91 individuals, described by 6 variables
## *The results are available in the following objects:
##
## name description
## 1 "$eig" "eigenvalues"
## 2 "$var" "results for the variables"
## 3 "$var$coord" "coord. for the variables"
## 4 "$var$cor" "correlations variables - dimensions"
## 5 "$var$cos2" "cos2 for the variables"
## 6 "$var$contrib" "contributions of the variables"
## 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" "summary statistics"
## 12 "$call$centre" "mean of the variables"
## 13 "$call$ecart.type" "standard error of the variables"
## 14 "$call$row.w" "weights for the individuals"
## 15 "$call$col.w" "weights for the variables"
El primer eje podría medir el grado de desarrollo de un país. La relación con la esperanza de vida y el PIB per cápita sería directa, es decir, indicarían un mayor desarrollo, mientras que la relación con las tasas de natalidad y mortalidad (incluyendo la infantil) sería inversa (a mayor desarrollo menor natalidad y mortalidad).
Los países menos desarrollados. Como sabemos, un país del tercer mundo (con un PIB per cápita pequeño) generalmente posee esperanzas de vida bajas y tasa de mortalidad infantil elevada debido a condiciones de higiene y sanidad malas, esto está directamente relacionado con una tasa de mortalidad general mayor. Como consecuencia, es necesario que la tasa de natalidad sea elevada para que la población crezca o se mantenga.
Los países más ricos, con bajas tasas de mortalidad y natalidad pero una población envejecida.
plot.PCA( pca_df, choix = "ind" )
#Si España es el punto 34 para hallar sus coordenadas exactas:
x <- pca_df$ind$coord[34,1]
y <- pca_df$ind$coord[34,2]
points(x, y, pch = 20, cex = 2, col = "blue")
El resultado concuerda completamente con la interpretación: España es un país desarrollado y por tanto se encuentra en el cuadrante superior derecho.