Análisis de conglomerados 2: jerárquico y k medias

9/11/2020

Cargar data


load("mundo98.rda")

Adecuación de data


names(mundo98)
##  [1] "region"                 "tfr"                    "contraception"         
##  [4] "educationMale"          "educationFemale"        "lifeMale"              
##  [7] "lifeFemale"             "infantMortality"        "GDPperCapita"          
## [10] "economicActivityMale"   "economicActivityFemale" "illiteracyMale"        
## [13] "illiteracyFemale"

Adecuación y tipificación de datos


datos <- na.omit(mundo98[,c(8, 9, 12)])
datos.tip <- scale(datos[, c(2,3)] )

head(datos.tip)
##             GDPperCapita illiteracyMale
## Afghanistan   -0.1765170      1.9512080
## Algeria       -0.4152190      0.4560493
## Argentina      0.7672352     -0.7927163
## Armenia       -0.6285465     -0.9887109
## Azerbaijan    -0.6345277     -0.9887109
## Bahamas        1.5810334     -0.9215127

Selección de muestra

set.seed(4)

muestra3 <- datos.tip[sample(1:nrow(datos.tip), 50,
   replace=FALSE),]

set.seed(2)

muestra2 <- datos.tip[sample(1:nrow(datos.tip), 50,
   replace=FALSE),]

set.seed(1)

muestra1 <- datos.tip[sample(1:nrow(datos.tip), 50,
   replace=FALSE),]

Calculo de la matriz inicial de distancias


d <- dist(muestra3)

Generación de conglomerados con la función “hclust”


fit <- hclust(d)
plot(fit) 

___

Regla de Mojena


mean(fit$height) +  3*sd(fit$height) < fit$height
##  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
## [49]  TRUE

Método gráfico


plot(fit$height, col = "blue", pch=19 )


Cálculo de clusters


# Compute k-means with k = 3

set.seed(1)

conglomerados <- kmeans(datos.tip, 3, nstart = 25)

Centros de los clusters o conglomerados


# Print the results
print(conglomerados$centers)
##   GDPperCapita illiteracyMale
## 1   -0.5639932      1.3853892
## 2    1.9441196     -0.5350372
## 3   -0.3022460     -0.5248364

Agregamos los clusters


clasificacion <- cbind(datos, cluster = conglomerados$cluster)

head(clasificacion)
##             infantMortality GDPperCapita illiteracyMale cluster
## Afghanistan             154         2848           52.8       1
## Algeria                  44         1531           26.1       1
## Argentina                22         8055            3.8       3
## Armenia                  25          354            0.3       3
## Azerbaijan               33          321            0.3       3
## Bahamas                  14        12545            1.5       2

Caracterización

PBI per cápita


library(Rmisc)
est.des <- summarySE(clasificacion, measurevar="GDPperCapita", groupvars=c("cluster"), na.rm=T)
est.des
##   cluster  N GDPperCapita       sd        se        ci
## 1       1 43     710.1628 1066.928  162.7051  328.3521
## 2       2 26   14548.2692 5409.135 1060.8186 2184.7968
## 3       3 87    2154.3103 1834.268  196.6541  390.9355

Analfabetismo de hombres


est.des <- summarySE(clasificacion, measurevar="illiteracyMale", groupvars=c("cluster"), na.rm=T)
est.des
##   cluster  N illiteracyMale        sd        se       ci
## 1       1 43      42.695814 12.385992 1.8888461 3.811846
## 2       2 26       8.401538  7.873130 1.5440479 3.180026
## 3       3 87       8.583701  7.702072 0.8257488 1.641534

Contraste en otra variable

Mortalidad infantil


est.des <- summarySE(clasificacion, measurevar="infantMortality", groupvars=c("cluster"), na.rm=T)
est.des
##   cluster  N infantMortality       sd       se        ci
## 1       1 43        90.88372 35.83840 5.465305 11.029432
## 2       2 26        13.38462 17.25822 3.384615  6.970746
## 3       3 87        37.66667 23.55827 2.525712  5.020949

Graficamos las diferencias


library(ggplot2)

grafico <- ggplot(clasificacion, aes(infantMortality)) + geom_boxplot(aes(color = factor(cluster)))

grafico