# Bibliotecas -------------------------------------------------------------
if(!require(tidyverse)) install.packages("tidyverse")
if(!require(readr)) install.packages("readr")
if(!require(cluster)) install.packages("cluster")
if(!require(factoextra)) install.packages("factoextra")
# Config -------------------------------------------------------------
# Para notación no numérica.
options(scipen=999)
# Para reproducibilidad.
set.seed(2024) Minería de Datos
Práctica 5. Agrupamiento
Contexto del problema
Un grupo de botánicos está estudiando diferentes especies de orquídeas en una región tropical. Han recolectado datos de 20 especímenes y desean agruparlos basándose en sus características morfológicas y ambientales para identificar posibles subespecies o patrones de adaptación. En concreto:
Aplicar técnicas de agrupamiento jerárquico para identificar posibles grupos de orquídeas basados en sus características morfológicas y ambientales.
Utilizar el método de particiones (como k-means) para agrupar los especímenes en un número específico de clusters (3, 4 y 5 clusters) y comparar los resultados.
Analizar la silueta entre los grupos formados por los diferentes métodos y proporcionar (caracterizar) una interpretación biológica de los clusters resultantes.
Base de datos
El conjunto de datos contiene información sobre 20 especímenes de orquídeas, con las siguientes variables:
ID del espécimen (1-15)
Longitud del tallo (cm)
Ancho de la hoja (cm)
Longitud de la hoja (cm)
Tamaño de la flor (diámetro en cm)
Número de pétalos
Altitud de crecimiento (metros sobre el nivel del mar)
pH del suelo
Temperatura promedio del hábitat (°C)
Precipitación anual del hábitat (mm)
Configuración Inicial
0. Dominio del problema
¿Cuál es el problema específico que estamos tratando de resolver?
Estamos tratando de agrupar especímenes de orquídeas basándonos en sus características morfológicas y ambientales para identificar posibles subespecies o patrones de adaptación en una región tropical.
¿Es factible lograr nuestros objetivos con los datos disponibles? ¿Cómo podemos alcanzarlos?
Sí, es factible lograr nuestros objetivos con los datos disponibles. Podemos alcanzarlos mediante la aplicación de técnicas de agrupamiento jerárquico y k-means, seguido de un análisis de silueta para evaluar la calidad de los grupos formados. Luego, interpretaremos biológicamente los clusters resultantes.
¿Cuáles son los beneficios si nuestra solución funciona y cuáles son las consecuencias si falla?
Si nuestra solución funciona:
Identificaremos posibles subespecies o patrones de adaptación en las orquídeas.
Mejoraremos la comprensión de la diversidad y ecología de las orquídeas en la región tropical.
Proporcionaremos información valiosa para la conservación y gestión de estas especies.
Si la solución falla:
Podríamos perder información importante sobre la diversidad de las orquídeas en la región.
Podríamos pasar por alto patrones de adaptación cruciales para la supervivencia de las especies.
Podríamos tomar decisiones de conservación basadas en información incompleta o incorrecta.
¿Qué tipo de problema se va a resolver: Predictivo/Descriptivo?
Este es principalmente un problema descriptivo, ya que estamos tratando de descubrir y describir patrones en los datos existentes sin hacer predicciones sobre nuevos especímenes.
¿El objetivo es predecir, segmentar, …?
Nuestro objetivo principal es agrupar los especímenes de orquídeas basándonos en sus características, para luego interpretar estos grupos en términos de posibles subespecies o adaptaciones.
¿De dónde vendrán los datos, cuánto cuesta conseguirlos?
Los datos provienen de un estudio de campo realizado por un grupo de botánicos en una región tropical. El costo de obtención de estos datos no se especifica, pero presumiblemente incluiría los gastos de trabajo de campo, equipamiento para medir las características de las orquídeas, y el tiempo invertido por los investigadores en la recolección y procesamiento de los datos.
1. Selección
En esta etapa, se realiza la selección del conjunto de datos. Como este es proporcionado por la empresa, únicamente lo cargamos.
# Cargar datos
orquideas_dataset <- read_csv("orquideas_dataset.csv")
# mostrar un vista previa de datos
head(orquideas_dataset)# A tibble: 6 × 10
ID longitud_tallo ancho_hoja longitud_hoja tamano_flor num_petalos altitud
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 16.0 4.98 10.4 4.93 5 465.
2 2 23.0 3.77 11.0 4.28 7 462.
3 3 21.1 3.47 10.9 5.31 5 442.
4 4 18.8 4.19 8.71 5.64 5 397.
5 5 25.0 3.69 9.19 4.76 5 415.
6 6 34.4 6.39 16.0 10.4 4 1464.
# ℹ 3 more variables: pH_suelo <dbl>, temperatura <dbl>, precipitacion <dbl>
Se observa que el conjunto de datos tiene 15 registros, uno para cada orquídea.
2. Limpieza
Para este conjunto de datos no es necesario realizar procesos de limpieza toda vez que el grupo de botánicos ha proporcionado el conjunto de datos limpio.
3. Transformación
En esta etapa, prepararemos los datos para el análisis de agrupamiento.
# Normalizar los datos (excluyendo la columna ID)
orquideas_norm <- orquideas_dataset |>
select(-ID) |>
scale()
# Añadir nombres de filas para identificación posterior
row.names(orquideas_norm) <- orquideas_dataset$ID
# Mostrar las primeras filas de los datos normalizados
head(orquideas_norm) longitud_tallo ancho_hoja longitud_hoja tamano_flor num_petalos altitud
1 -1.1027413 -0.2208674 -0.6180316 -0.7716839 -0.4966091 -0.6347663
2 -0.5059109 -0.7112335 -0.5265945 -0.9448267 1.0314189 -0.6387088
3 -0.6724486 -0.8328119 -0.5432195 -0.6704620 -0.4966091 -0.6589592
4 -0.8626565 -0.5410238 -0.9023179 -0.5825588 -0.4966091 -0.7055962
5 -0.3427548 -0.7436544 -0.8225182 -0.8169674 -0.4966091 -0.6864944
6 0.4518919 0.3505510 0.3129642 0.6907064 -1.2606231 0.3983258
pH_suelo temperatura precipitacion
1 -0.23200645 -0.7909153 -0.6025402
2 -0.80919323 -0.6672780 -0.4388317
3 -0.05092825 -0.7472786 -0.6238676
4 -0.34518033 -0.9872805 -0.5570873
5 -0.33386294 -0.9048556 -0.6768271
6 1.10344531 0.6830357 0.8407620
4 y 5. Modelado y validación
En esta etapa, aplicaremos técnicas de agrupamiento jerárquico y k-means, y luego analizaremos la silueta de los grupos formados.
Agrupamiento con método jerárquico
Para general el agrupamiento se calcula primero la matriz de distancia mediante la medida euclídea. Luego de ello, se selecciona como criterio de enlace el completo. Finalmente, agrupamos en 4, 5 y 6 grupos, lo que es visualizado a través del dendrograma.
# Calcular la matriz de distancia
dist_matrix <- dist(orquideas_norm, method = "euclidean")
# Realizar agrupamiento jerárquico
hc <- hclust(dist_matrix, method = "complete")
# Visualizar el dendrograma
plot(hc, main = "Dendrograma de Orquídeas", xlab = "Especímenes", ylab = "Distancia")
# Cortar el árbol para obtener 4, 5 y 6 clusters
hc_cut_4 <- cutree(hc, k = 4)
hc_cut_5 <- cutree(hc, k = 5)
hc_cut_6 <- cutree(hc, k = 6)
# Visualizar los clusters en el dendrograma
rect.hclust(hc, k = 4, border = "red")
rect.hclust(hc, k = 5, border = "blue")
rect.hclust(hc, k = 6, border = "green")Análisis del dendrograma:
El dendrograma muestra cómo los 20 especímenes de orquídeas se agrupan progresivamente desde individuos aislados hasta un solo grupo. La altura de las conexiones indica la distancia o disimilitud entre los grupos que se unen.
Para cada número de grupo seleccionado se genera rectángulo de colores: rojos, azules y verdes.. Estos corresponden a la división en 4, 5, y 6 clusters, respectivamente. Esto permite ver cómo se subdividen los grupos principales al aumentar el número de clusters. Así por ejemplo, para el caso de 4 grupos (rojos) se tiene identificados:
Grupo 1 (izquierda): Especímenes 2, 3, 5, 1, 4
Grupo 2: Especímenes 16, 20, 18, 17, 19
Grupo 3: Especímenes 13, 14, 12, 11, 15
Grupo 4 (derecha): Especímenes 10, 6, 8, 7, 9
La altura máxima del dendrograma es aproximadamente 7. Para el caso de 4 grupos, la homogeneidad es muy buena ya que los grupos 1 y 4 muestran una estructura interna más compacta (ramas más cortas), lo que sugiere una mayor homogeneidad entre sus miembros. El grupo 3 muestra más variabilidad interna.
Este dendrograma sugiere que las orquídeas en el estudio pueden clasificarse naturalmente en 4 grupos principales, con posibles subdivisiones más finas. La interpretación biológica de estos grupos requeriría examinar las características específicas de los especímenes en cada cluster para identificar los rasgos comunes que definen cada grupo.
Agrupamiento con método k-means
Para el agrupamiento k-means, se aplica el algoritmo para 4, 5 y 6 clusters. Se utiliza la función kmeans_silhouette que realiza el agrupamiento k-means y calcula la silueta para cada configuración. Para luego mostrar una representación gráfica del grupo.
# Función para realizar k-means y calcular la silueta
kmeans_silhouette <- function(k) {
km <- kmeans(orquideas_norm, centers = k, nstart = 25)
silhouette <- silhouette(km$cluster, dist_matrix)
list(km = km, silhouette = silhouette)
}
# Realizar k-means para 3, 4 y 5 clusters
km_4 <- kmeans_silhouette(4)
km_5 <- kmeans_silhouette(5)
km_6 <- kmeans_silhouette(6)
# Visualizar los clusters de k-means
fviz_cluster(km_4$km, data = orquideas_norm, main = "K-means con 4 clusters")fviz_cluster(km_5$km, data = orquideas_norm, main = "K-means con 5 clusters")fviz_cluster(km_6$km, data = orquideas_norm, main = "K-means con 6 clusters")Ahora evaluamos la calidad de los clusters formados con la métrica de Silueta. Esta métrica proporciona una medida de qué tan bien cada objeto se ajusta a su cluster asignado en comparación con otros clusters.
# Visualizar la silueta para cada número de clusters
plot(km_4$silhouette, main = "Silueta para 4 clusters")plot(km_5$silhouette, main = "Silueta para 5 clusters")plot(km_6$silhouette, main = "Silueta para 6 clusters")# Calcular el ancho promedio de la silueta para cada número de clusters
silhouette_avg <- c(
mean(km_4$silhouette[, 3]),
mean(km_5$silhouette[, 3]),
mean(km_6$silhouette[, 3])
)
# Visualizar el ancho promedio de la silueta
plot(4:6, silhouette_avg, type = "b", xlab = "Número de clusters",
ylab = "Ancho promedio de la silueta", main = "Comparación de siluetas")Para los 3 casos se muestra el ancho de silueta para cada grupo encontrando. Analizaremos el caso de 5 grupos. El gráfico muestra la distribución del ancho de la silueta para un agrupamiento en 5 clusters, con un promedio general de 0.52, lo que indica un agrupamiento razonable, aunque con variabilidad en la calidad de los clusters. El Cluster 4 destaca como el mejor definido con un ancho promedio de 0.61, mientras que el Cluster 2 es el menos coherente con un promedio de 0.39, lo que sugiere que algunas observaciones en este cluster podrían estar mal asignadas.
El gráfico de comparación del número de grupos sugiere que 5 es el número óptimo de clusters para este conjunto de datos, ya que maximiza el ancho promedio de la silueta, indicando una mejor definición y separación de los clusters.
Caracterización de grupos
Finalmente, caracterizamos los grupos del mejor agrupamiento.
# Función para caracterizar clusters
caracterizar_cluster <- function(cluster, data) {
cluster_data <- data[cluster, ]
cluster_means <- colMeans(cluster_data)
cluster_means
}
# Caracterizar los clusters de k-means (usando el mejor número de clusters según la silueta)
best_km <- km_5 # 5 clusters es el mejor según el análisis de silueta
for (i in 1:5) {
cat("Cluster", i, "características:\n")
print(caracterizar_cluster(best_km$km$cluster == i, orquideas_norm))
cat("\n")
}Cluster 1 características:
longitud_tallo ancho_hoja longitud_hoja tamano_flor num_petalos
0.2704194 0.4045858 0.5667714 0.6081306 -1.0059517
altitud pH_suelo temperatura precipitacion
0.3598531 0.7337440 0.6216211 0.7338453
Cluster 2 características:
longitud_tallo ancho_hoja longitud_hoja tamano_flor num_petalos
-1.0209096 -1.1440525 -1.1407193 -1.1035853 0.7258133
altitud pH_suelo temperatura precipitacion
-1.1191993 -1.3388470 -1.0401294 1.1667922
Cluster 3 características:
longitud_tallo ancho_hoja longitud_hoja tamano_flor num_petalos
-0.6973024 -0.6099182 -0.6825363 -0.7572998 -0.1910035
altitud pH_suelo temperatura precipitacion
-0.6649050 -0.3542342 -0.8195216 -0.5798308
Cluster 4 características:
longitud_tallo ancho_hoja longitud_hoja tamano_flor num_petalos
1.4260948 1.3077781 1.2466201 1.2559509 -0.4966091
altitud pH_suelo temperatura precipitacion
1.3593525 1.0129062 1.1460696 -1.2662048
Cluster 5 características:
longitud_tallo ancho_hoja longitud_hoja tamano_flor num_petalos
0.3246639 0.5086029 0.5914317 0.6001394 1.4134259
altitud pH_suelo temperatura precipitacion
0.5220997 0.5998216 0.8515219 0.5973404
Cluster 1: Las orquídeas de este grupo tienen tallos, hojas y flores de tamaño ligeramente superior al promedio, pero se destacan por tener menos pétalos. Se encuentran en altitudes y suelos moderados, con una precipitación y temperatura también moderadas.
Cluster 2: Este grupo presenta orquídeas con tallos, hojas y flores significativamente más pequeños que el promedio, pero con más pétalos. Estas orquídeas se encuentran en altitudes bajas, suelos más ácidos, y en áreas con alta precipitación, pero con temperaturas más bajas.
Cluster 3: Orquídeas en este cluster tienen tallos, hojas y flores más pequeños que el promedio, con un número de pétalos ligeramente menor. Se encuentran en altitudes moderadamente bajas y suelos con pH más ácido, en áreas con menor precipitación y temperatura.
Cluster 4: Las orquídeas de este cluster se caracterizan por tener tallos, hojas y flores más grandes que el promedio, aunque con menos pétalos. Se encuentran en altitudes más altas, suelos más alcalinos, y en áreas con baja precipitación y altas temperaturas.
Cluster 5: Este grupo presenta orquídeas con tallos, hojas y flores de tamaño superior al promedio, y se destaca por tener más pétalos que los otros clusters. Estas orquídeas están en altitudes moderadas y suelos ligeramente alcalinos, en regiones con precipitación y temperatura moderadas.
Actividad calificada
Un grupo de investigadores en educación está interesado en analizar los patrones de desempeño académico y socioeconómico de un conjunto de estudiantes. El objetivo es identificar grupos de estudiantes con características similares para poder ofrecer recomendaciones personalizadas en términos de apoyo académico y social.
Objetivo
Aplicar técnicas de agrupamiento a un conjunto de datos de estudiantes para identificar grupos con características comunes. Esto permitirá a los investigadores analizar posibles patrones y tendencias dentro de cada grupo.
Use el conjunto de datos “Students Performance in Exams” de Kaggle, que contiene información sobre el rendimiento de los estudiantes en exámenes de matemáticas, lectura y escritura, además de datos demográficos y socioeconómicos.
Instrucciones
Crear un nuevo proyecto en RStudio con el nombre
Mineria_Datos. Dentro del proyecto, organizar las carpetas de la siguiente manera:Scripts: Para almacenar tus scripts de código R.
Datos: Para almacenar cualquier dataset que utilice en la actividad.
Dentro del directorio Scripts, crear un script R llamado
agrupamiento.R. En este script, codificar las siguientes tareas:Preprocesamiento de datos:
Cargar el conjunto de datos de Kaggle con el nombre estudiantes.csv
Realizar una exploración inicial de los datos.
Identificar y tratar posibles valores faltantes.
Numerizar y normalizar los datos para asegurar que las variables a usar tengan la misma escala.
Agrupamiento:
- Aplica el algoritmo K-means para agrupar a los estudiantes en 3, 4, y 5 clusters.
- Evaluar la calidad de los clusters formados usando el método de la Silueta y el Criterio del Codo (Elbow Method).
- Visualizar los clusters resultantes utilizando gráficos de dispersión en 2D o 3D, y gráficos de barras que muestren las características promedio de cada cluster.
- Caracterizar cada cluster y proporciona recomendaciones para mejorar el rendimiento académico de lo estudiantes.
Documentación:
- Agregar comentarios al código explicando la funcionalidad de cada sección. Incluir al inicio del script información sobre carrera e integrantes del grupo.
Entrega
Una vez completada la actividad, subir comprimir el proyecto en formato .zip con el nombre MD_Practica_4_GrupoX. Donde X debe ser reemplazado por su número de grupo.
Criterios de Evaluación
Estructura y organización del proyecto (10%).
Procesamiento y agrupamiento (80%).
Documentación, formato de entrega y comentarios en el código (10%).