Instalar paquetes y llamar librerias

#install.packages("cluster") # Análisis de Agrupamiento
library(cluster)
#install.packages("ggplot2") # Graficar
library(ggplot2)
#install.packages("data.table") # Manejo de muchos datos
library(data.table) 
#install.packages("factoextra") # Gráfic optimización de numero de clusters
library(factoextra)
#install.packages("tidyverse")
# install.packages("dplyr")
library(dplyr)
# install.packages("tibble")
library(tibble)
# install.packages("forcats")
library(forcats)
#install.packages("tidyverse")
library(tidyverse)
library(tibble)  
library(dplyr)
library(ggplot2)
library(forcats)
#install.packages("tibble")
#install.packages("dplyr")
#install.packages("ggplot2")
#install.packages("forcats")

Paso1. Datos de obesidad por estado

## ==Datos (aproximados ENSANUT adultos ≥20 años) ==
datos <- tribble(
  ~estado,              ~obesidad,
  "Aguascalientes",      35,
  "Baja California",     37,
  "Baja California Sur", 35,
  "Campeche",            41,
  "Coahuila",            38,
  "Colima",              36,
  "Chiapas",             31,
  "Chihuahua",           38,
  "Ciudad de México",    36,
  "Durango",             36,
  "Guanajuato",          35,
  "Guerrero",            32,
  "Hidalgo",             34,
  "Jalisco",             36,
  "México",              37,   
  "Michoacán",           34,
  "Morelos",             35,
  "Nayarit",             36,
  "Nuevo León",          40,
  "Oaxaca",              32,
  "Puebla",              35,
  "Querétaro",           36,
  "Quintana Roo",        37,
  "San Luis Potosí",     35,
  "Sinaloa",             36,
  "Sonora",              38,
  "Tabasco",             42,
  "Tamaulipas",          40,
  "Tlaxcala",            34,
  "Veracruz",            37,
  "Yucatán",             41,
  "Zacatecas",           35
) |>
  arrange(desc(obesidad))

## Vista rápida
head(datos, 5)
## # A tibble: 5 × 2
##   estado     obesidad
##   <chr>         <dbl>
## 1 Tabasco          42
## 2 Campeche         41
## 3 Yucatán          41
## 4 Nuevo León       40
## 5 Tamaulipas       40

Paso2. Definir número de clusters y kmeans

set.seed(123)
k <- 3
x <- scale(datos$obesidad)

km <- kmeans(x, centers = k, nstart = 25)

res <- datos %>%
  mutate(cluster = factor(km$cluster))

Paso3. Resumen por cluster

resumen <- res %>%
  group_by(cluster) %>%
  summarise(
    estados = paste(estado, collapse = ", "),
    cantidad = n(),
    promedio_obesidad = round(mean(obesidad), 1),
    min = round(min(obesidad), 1),
    max = round(max(obesidad), 1),
    .groups = "drop"
  )

Paso4. Gráfica de barrasr

res %>%
  mutate(estado = fct_reorder(estado, obesidad)) %>%
  ggplot(aes(x = estado, y = obesidad, fill = cluster)) +
  geom_col() +
  coord_flip() +
  labs(title = paste0("Obesidad por estado (%) y clusters (k = ", k, ")"),
       x = NULL, y = "% obesidad", fill = "Cluster")

# Paso5. Tabla final ordenada

knitr::kable(
  res %>% arrange(cluster, desc(obesidad)),
  col.names = c("Estado", "% Obesidad", "Cluster")
)
Estado % Obesidad Cluster
Coahuila 38 1
Chihuahua 38 1
Sonora 38 1
Baja California 37 1
México 37 1
Quintana Roo 37 1
Veracruz 37 1
Colima 36 1
Ciudad de México 36 1
Durango 36 1
Jalisco 36 1
Nayarit 36 1
Querétaro 36 1
Sinaloa 36 1
Aguascalientes 35 1
Baja California Sur 35 1
Guanajuato 35 1
Morelos 35 1
Puebla 35 1
San Luis Potosí 35 1
Zacatecas 35 1
Tabasco 42 2
Campeche 41 2
Yucatán 41 2
Nuevo León 40 2
Tamaulipas 40 2
Hidalgo 34 3
Michoacán 34 3
Tlaxcala 34 3
Guerrero 32 3
Oaxaca 32 3
Chiapas 31 3

Paso6. Conclusiones

Dentro de estos codigos mostramos 3 cluster que se diferencía por alto medio y bajo y separa a los estados depende de como esten sus porcentajes, mostrando así claras diferencias entre ellos.

LS0tCnRpdGxlOiAiTcOpeGljbyIKYXV0aG9yOiAiWGltZW5hIEJvbGHDsW9zIgpkYXRlOiAiMjAyNS0wOC0xOSIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6IAogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUgCiAgICB0aGVtZTogeWV0aQotLS0KCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWU7Ij4gSW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyaWFzIDwvc3Bhbj4KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI2luc3RhbGwucGFja2FnZXMoImNsdXN0ZXIiKSAjIEFuw6FsaXNpcyBkZSBBZ3J1cGFtaWVudG8KbGlicmFyeShjbHVzdGVyKQojaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpICMgR3JhZmljYXIKbGlicmFyeShnZ3Bsb3QyKQojaW5zdGFsbC5wYWNrYWdlcygiZGF0YS50YWJsZSIpICMgTWFuZWpvIGRlIG11Y2hvcyBkYXRvcwpsaWJyYXJ5KGRhdGEudGFibGUpIAojaW5zdGFsbC5wYWNrYWdlcygiZmFjdG9leHRyYSIpICMgR3LDoWZpYyBvcHRpbWl6YWNpw7NuIGRlIG51bWVybyBkZSBjbHVzdGVycwpsaWJyYXJ5KGZhY3RvZXh0cmEpCiNpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQojIGluc3RhbGwucGFja2FnZXMoImRwbHlyIikKbGlicmFyeShkcGx5cikKIyBpbnN0YWxsLnBhY2thZ2VzKCJ0aWJibGUiKQpsaWJyYXJ5KHRpYmJsZSkKIyBpbnN0YWxsLnBhY2thZ2VzKCJmb3JjYXRzIikKbGlicmFyeShmb3JjYXRzKQojaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkodGliYmxlKSAgCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShmb3JjYXRzKQojaW5zdGFsbC5wYWNrYWdlcygidGliYmxlIikKI2luc3RhbGwucGFja2FnZXMoImRwbHlyIikKI2luc3RhbGwucGFja2FnZXMoImdncGxvdDIiKQojaW5zdGFsbC5wYWNrYWdlcygiZm9yY2F0cyIpCmBgYAoKIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZTsiPiBQYXNvMS4gRGF0b3MgZGUgb2Jlc2lkYWQgcG9yIGVzdGFkbyA8L3NwYW4+CgpgYGB7cn0KIyMgPT1EYXRvcyAoYXByb3hpbWFkb3MgRU5TQU5VVCBhZHVsdG9zIOKJpTIwIGHDsW9zKSA9PQpkYXRvcyA8LSB0cmliYmxlKAogIH5lc3RhZG8sICAgICAgICAgICAgICB+b2Jlc2lkYWQsCiAgIkFndWFzY2FsaWVudGVzIiwgICAgICAzNSwKICAiQmFqYSBDYWxpZm9ybmlhIiwgICAgIDM3LAogICJCYWphIENhbGlmb3JuaWEgU3VyIiwgMzUsCiAgIkNhbXBlY2hlIiwgICAgICAgICAgICA0MSwKICAiQ29haHVpbGEiLCAgICAgICAgICAgIDM4LAogICJDb2xpbWEiLCAgICAgICAgICAgICAgMzYsCiAgIkNoaWFwYXMiLCAgICAgICAgICAgICAzMSwKICAiQ2hpaHVhaHVhIiwgICAgICAgICAgIDM4LAogICJDaXVkYWQgZGUgTcOpeGljbyIsICAgIDM2LAogICJEdXJhbmdvIiwgICAgICAgICAgICAgMzYsCiAgIkd1YW5hanVhdG8iLCAgICAgICAgICAzNSwKICAiR3VlcnJlcm8iLCAgICAgICAgICAgIDMyLAogICJIaWRhbGdvIiwgICAgICAgICAgICAgMzQsCiAgIkphbGlzY28iLCAgICAgICAgICAgICAzNiwKICAiTcOpeGljbyIsICAgICAgICAgICAgICAzNywgICAKICAiTWljaG9hY8OhbiIsICAgICAgICAgICAzNCwKICAiTW9yZWxvcyIsICAgICAgICAgICAgIDM1LAogICJOYXlhcml0IiwgICAgICAgICAgICAgMzYsCiAgIk51ZXZvIExlw7NuIiwgICAgICAgICAgNDAsCiAgIk9heGFjYSIsICAgICAgICAgICAgICAzMiwKICAiUHVlYmxhIiwgICAgICAgICAgICAgIDM1LAogICJRdWVyw6l0YXJvIiwgICAgICAgICAgIDM2LAogICJRdWludGFuYSBSb28iLCAgICAgICAgMzcsCiAgIlNhbiBMdWlzIFBvdG9zw60iLCAgICAgMzUsCiAgIlNpbmFsb2EiLCAgICAgICAgICAgICAzNiwKICAiU29ub3JhIiwgICAgICAgICAgICAgIDM4LAogICJUYWJhc2NvIiwgICAgICAgICAgICAgNDIsCiAgIlRhbWF1bGlwYXMiLCAgICAgICAgICA0MCwKICAiVGxheGNhbGEiLCAgICAgICAgICAgIDM0LAogICJWZXJhY3J1eiIsICAgICAgICAgICAgMzcsCiAgIll1Y2F0w6FuIiwgICAgICAgICAgICAgNDEsCiAgIlphY2F0ZWNhcyIsICAgICAgICAgICAzNQopIHw+CiAgYXJyYW5nZShkZXNjKG9iZXNpZGFkKSkKCiMjIFZpc3RhIHLDoXBpZGEKaGVhZChkYXRvcywgNSkKYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlOyI+IFBhc28yLiBEZWZpbmlyIG7Dum1lcm8gZGUgY2x1c3RlcnMgeSBrbWVhbnMgPC9zcGFuPgoKYGBge3J9CnNldC5zZWVkKDEyMykKayA8LSAzCnggPC0gc2NhbGUoZGF0b3Mkb2Jlc2lkYWQpCgprbSA8LSBrbWVhbnMoeCwgY2VudGVycyA9IGssIG5zdGFydCA9IDI1KQoKcmVzIDwtIGRhdG9zICU+JQogIG11dGF0ZShjbHVzdGVyID0gZmFjdG9yKGttJGNsdXN0ZXIpKQoKYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlOyI+IFBhc28zLiBSZXN1bWVuIHBvciBjbHVzdGVyIDwvc3Bhbj4KCmBgYHtyfQpyZXN1bWVuIDwtIHJlcyAlPiUKICBncm91cF9ieShjbHVzdGVyKSAlPiUKICBzdW1tYXJpc2UoCiAgICBlc3RhZG9zID0gcGFzdGUoZXN0YWRvLCBjb2xsYXBzZSA9ICIsICIpLAogICAgY2FudGlkYWQgPSBuKCksCiAgICBwcm9tZWRpb19vYmVzaWRhZCA9IHJvdW5kKG1lYW4ob2Jlc2lkYWQpLCAxKSwKICAgIG1pbiA9IHJvdW5kKG1pbihvYmVzaWRhZCksIDEpLAogICAgbWF4ID0gcm91bmQobWF4KG9iZXNpZGFkKSwgMSksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgKQoKYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlOyI+IFBhc280LiBHcsOhZmljYSBkZSBiYXJyYXNyIDwvc3Bhbj4KCmBgYHtyfQpyZXMgJT4lCiAgbXV0YXRlKGVzdGFkbyA9IGZjdF9yZW9yZGVyKGVzdGFkbywgb2Jlc2lkYWQpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBlc3RhZG8sIHkgPSBvYmVzaWRhZCwgZmlsbCA9IGNsdXN0ZXIpKSArCiAgZ2VvbV9jb2woKSArCiAgY29vcmRfZmxpcCgpICsKICBsYWJzKHRpdGxlID0gcGFzdGUwKCJPYmVzaWRhZCBwb3IgZXN0YWRvICglKSB5IGNsdXN0ZXJzIChrID0gIiwgaywgIikiKSwKICAgICAgIHggPSBOVUxMLCB5ID0gIiUgb2Jlc2lkYWQiLCBmaWxsID0gIkNsdXN0ZXIiKQpgYGAKIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZTsiPiBQYXNvNS4gVGFibGEgZmluYWwgb3JkZW5hZGEgPC9zcGFuPgoKYGBge3J9CmtuaXRyOjprYWJsZSgKICByZXMgJT4lIGFycmFuZ2UoY2x1c3RlciwgZGVzYyhvYmVzaWRhZCkpLAogIGNvbC5uYW1lcyA9IGMoIkVzdGFkbyIsICIlIE9iZXNpZGFkIiwgIkNsdXN0ZXIiKQopCmBgYAoKIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZTsiPiBQYXNvNi4gQ29uY2x1c2lvbmVzIDwvc3Bhbj4KCkRlbnRybyBkZSBlc3RvcyBjb2RpZ29zIG1vc3RyYW1vcyAzIGNsdXN0ZXIgcXVlIHNlIGRpZmVyZW5jw61hIHBvciBhbHRvIG1lZGlvIHkgYmFqbyB5IHNlcGFyYSBhIGxvcyBlc3RhZG9zIGRlcGVuZGUgZGUgY29tbyBlc3RlbiBzdXMgcG9yY2VudGFqZXMsIG1vc3RyYW5kbyBhc8OtIGNsYXJhcyBkaWZlcmVuY2lhcyBlbnRyZSBlbGxvcy4=