La base de datos ‘Internet.xlsx’ contiene diferentes indicadores sobre el uso y la tenencia de radio, tv, teléfono fijo, etc, en diferentes países como se describe en la siguiente tabla:

df = read_excel("Internet.xlsx"); head(df)

Calcular la matriz de distancia (Euclidiana):

Z <- df %>%
  select(-Country) %>%
  mutate(across(everything(), ~ scale(.) %>% as.vector()))

D <- dist(Z, method = "euclidean")
  1. Realice un análsis de conglomerados jerárquico determinando el número de grupos (k = 2, 3, 4, 5, 6) y el método (Single, Complete, Centroid o Ward) de agrupamiento adecuado:

Métodos jerárquicos:

agjers <- hclust(D, method = "single")
agjercom <- hclust(D, method = "complete")
agjercen <- hclust(D, method = "centroid")
agjerward <- hclust(D, method = "ward.D2")

# Visualización de los dendrogramas
par(mfrow = c(2, 2))
plot(agjers, main = "Single Linkage", xlab = "", sub = "")
plot(agjercom, main = "Complete Linkage", xlab = "", sub = "")
plot(agjercen, main = "Centroid Linkage", xlab = "", sub = "")
plot(agjerward, main = "Ward's Method", xlab = "", sub = "")

El método Ward minimiza la varianza dentro de los clusters, lo que generalmente produce resultados más equilibrados. Ahora se determina el número óptimo de clusters (método del codo y silhouette):

fviz_nbclust(Z, FUN = hcut, method = "wss") + 
  ggtitle("Número óptimo de clusters - Método del Codo")

fviz_nbclust(Z, FUN = hcut, method = "silhouette") + 
  ggtitle("Número óptimo de clusters - Silhouette")

Los Gràficos muestran que el valor optimo de k = 2. Revisando un dendograma, cortamos el dendrograma en k=2:

k <- 2
clusters <- cutree(agjerward, k = k)
dfTotal <- df %>%
  mutate(Cluster = clusters)
fviz_cluster(list(data = Z, cluster = clusters))

  1. Realice un análsis de conglomerados con el método de las k medias determinando el número de grupos adecuado:

Comenzamos con el método del Codo para encontrar el mejor k

fviz_nbclust(Z, kmeans, method = "wss") +
  ggtitle("Número óptimo de clusters - Método del Codo")

Luego revisamosel método del Silhouette para encontrar el mejor k

fviz_nbclust(Z, kmeans, method = "silhouette") +
  ggtitle("Número óptimo de clusters - Silhouette")

Ejecutamos k-means con el k óptimo

set.seed(123)  
k_optimo <- 2 
modelo_kmeans <- kmeans(Z, centers = k_optimo, nstart = 25)

# Visualización de los clusters
fviz_cluster(modelo_kmeans, data = Z)

3. Qué método entre jerárquico y k-medias resultó mejor?

Segùn los gràficos anteriores, el metodo jeràrquico y el metodo kmeans arrojan los mismo valores, es decir sugieren un k=2 Ward. Igualmente se revisa el el valor pormedio que arroja cada mètodo:

# Índice Silhouette para método jerárquico
clusters_jerarquico <- cutree(agjerward, k = 3)
silhouette_jerarquico <- silhouette(clusters_jerarquico, dist(Z))
summary(silhouette_jerarquico)
## Silhouette of 153 units in 3 clusters from silhouette.default(x = clusters_jerarquico, dist = dist(Z)) :
##  Cluster sizes and average silhouette widths:
##        50        60        43 
## 0.1715465 0.3703138 0.3180427 
## Individual silhouette widths:
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -0.2267  0.1838  0.3193  0.2907  0.4287  0.5336
# Índice Silhouette para k-medias (con k=3 por ejemplo)
silhouette_kmeans <- silhouette(modelo_kmeans$cluster, dist(Z))
summary(silhouette_kmeans)
## Silhouette of 153 units in 2 clusters from silhouette.default(x = modelo_kmeans$cluster, dist = dist(Z)) :
##  Cluster sizes and average silhouette widths:
##       100        53 
## 0.4354434 0.3698745 
## Individual silhouette widths:
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## -0.006238  0.340684  0.465204  0.412730  0.532679  0.607825

Se comparan los promedio:

mean(silhouette_jerarquico[, 3])
## [1] 0.2906666
mean(silhouette_kmeans[, 3])
## [1] 0.41273

Basándonos en los valores promedio del índice Silhouette, el método de k-medias (0.41273) supera al método jerárquico (0.2906666).

  1. Caracterice los grupos resultantes en (a) y (b) mediante medidas descriptivas (¯x, cv, Q1, Q3) y diagramas de cajas. ¾Se observan diferencias entre los agrupamientos realizados con ambos métodos?

Caracterizamos los clusters Método jerárquico:

  clusters_jerarquico <- cutree(agjerward, k = 3)  # Cambia k según corresponda
  datos_jerarquico <- Z %>%
    mutate(Cluster = clusters_jerarquico) %>%
    group_by(Cluster) %>%
    summarise(across(everything(), list(
      Media = mean,
      CV = ~ sd(.) / mean(.),
      Q1 = ~ quantile(., 0.25),
      Q3 = ~ quantile(., 0.75)
    ))); datos_jerarquico

Caracterizamos los clusters - Método kMeans:

  datos_kmeans <- Z %>%
    mutate(Cluster = modelo_kmeans$cluster) %>%
    group_by(Cluster) %>%
    summarise(across(everything(), list(
      Media = mean,
      CV = ~ sd(.) / mean(.),
      Q1 = ~ quantile(., 0.25),
      Q3 = ~ quantile(., 0.75)
    ))); datos_kmeans

Realizamos un diagrama de cajas para jerárquico:

  datos_jerarquico_boxplot <- Z %>%
    mutate(Cluster = clusters_jerarquico) %>%
    pivot_longer(cols = -Cluster, names_to = "Variable", values_to = "Valor")
  
  ggplot(datos_jerarquico_boxplot, aes(x = as.factor(Cluster), y = Valor, fill = as.factor(Cluster))) +
    geom_boxplot() +
    facet_wrap(~ Variable, scales = "free") +
    labs(title = "Diagramas de cajas - Método jerárquico", x = "Cluster", y = "Valor") +
    theme_minimal()

Ahora realizamos el diagrama de cajas para k-means:

  datos_kmeans_boxplot <- Z %>%
    mutate(Cluster = modelo_kmeans$cluster) %>%
    pivot_longer(cols = -Cluster, names_to = "Variable", values_to = "Valor")
  
  ggplot(datos_kmeans_boxplot, aes(x = as.factor(Cluster), y = Valor, fill = as.factor(Cluster))) +
    geom_boxplot() +
    facet_wrap(~ Variable, scales = "free") +
    labs(title = "Diagramas de cajas - Método k-means", x = "Cluster", y = "Valor") +
    theme_minimal()

Sí, se observan diferencias entre los agrupamientos realizados con los métodos jerárquico y k-means. El método k-means generalmente produce clusters más compactos y homogéneos, como lo reflejan valores más bajos en el coeficiente de variación (CV) y distribuciones más centradas en los diagramas de cajas. Por otro lado, el método jerárquico, al ser más sensible a valores atípicos y la estructura jerárquica de los datos, tiende a formar clusters con mayor variabilidad interna y puede incluir valores extremos en sus grupos.