MUSHROOM
CLASSIFICATION
AUTORES
2025-12-17
El presente estudio se basa en el conjunto de datos sobre la clasificación de hongos, obtenido del repositorio de aprendizaje automático de la Universidad de California en Irvine (UCI) (“Mushroom” 1981) y disponible en Kaggle. Este dataset incluye información categórica correspondiente a 8,124 muestras de hongos, pertenecientes a 23 especies de los géneros Agaricus y Lepiota. Los atributos registrados incluyen características observables de los hongos, tales como olor, color y forma del sombrero, tipo de lámina, presencia de manchas, entre otros.
Cada registro está clasificado como comestible o venenoso, lo que permite evaluar la relación entre características físicas y toxicidad. La información categórica contenida en el dataset resulta fundamental, ya que cada atributo constituye una variable cualitativa capaz de discriminar entre hongos seguros y potencialmente peligrosos. El análisis de estas variables permite identificar patrones relevantes que pueden servir como base para modelos predictivos, así como para el desarrollo de criterios objetivos de clasificación basados en observaciones directas.
El propósito del estudio es analizar, de manera sistemática, la relación entre los atributos físicos de los hongos y su comestibilidad, utilizando herramientas estadísticas y de aprendizaje automático. Para ello, se emplearon R y RStudio (R Core Team 2022) con los siguientes objetivos específicos:
Realizar un análisis exploratorio de los datos, evaluando la distribución de cada variable categórica y la presencia de posibles patrones o asociaciones.
Visualizar relaciones y correlaciones entre los atributos de los hongos mediante técnicas gráficas y tabulares, facilitando la interpretación de los datos.
Implementar y evaluar modelos de clasificación que permitan predecir la comestibilidad de los hongos a partir de sus características observables, contribuyendo al entendimiento de los factores que determinan la toxicidad.
El análisis desarrollado proporciona una aproximación cuantitativa y objetiva al estudio de la clasificación de hongos, integrando la exploración de datos categóricos con técnicas de modelado predictivo, lo que resulta útil tanto en contextos de investigación como en aplicaciones prácticas de identificación de hongos comestibles y venenosos.
A continuación, veremos una primera vista de los datos del dataset
con la funcion ```knitr::kable``` del paquete (Xie 2023) ;
| class | cap.shape | cap.surface | cap.color | bruises | odor | gill.attachment | gill.spacing | gill.size | gill.color | stalk.shape | stalk.root | stalk.surface.above.ring | stalk.surface.below.ring | stalk.color.above.ring | stalk.color.below.ring | veil.type | veil.color | ring.number | ring.type | spore.print.color | population | habitat |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| p | x | s | n | t | p | f | c | n | k | e | e | s | s | w | w | p | w | o | p | k | s | u |
| e | x | s | y | t | a | f | c | b | k | e | c | s | s | w | w | p | w | o | p | n | n | g |
| e | b | s | w | t | l | f | c | b | n | e | c | s | s | w | w | p | w | o | p | n | n | m |
| p | x | y | w | t | p | f | c | n | n | e | e | s | s | w | w | p | w | o | p | k | s | u |
| e | x | s | g | f | n | f | w | b | k | t | e | s | s | w | w | p | w | o | e | n | a | g |
| e | x | y | y | t | a | f | c | b | n | e | c | s | s | w | w | p | w | o | p | k | n | g |
| e | b | s | w | t | a | f | c | b | g | e | c | s | s | w | w | p | w | o | p | k | n | m |
| e | b | y | w | t | l | f | c | b | n | e | c | s | s | w | w | p | w | o | p | n | s | m |
Nuestro dataset presenta 8124 filas 23 columnas, en nuestra tabla solo mostramos las 8 primeras filas.
Para el uso del trabajo se empleó un conjunto de datos de setas que contiene información morfológica, sensorial y toxicológica. Para el análisis se seleccionaron tres variables categóricas, consideradas relevantes para la evaluación de la toxicidad:
Class
Odor
Bruises
Se trabaja con las siguientes variables categóricas:
Variable class (clase): La variable class indica si una seta es comestible (e) o venenosa (p). Es una variable categórica dicotómica que representa la categoría toxicológica del hongo. Constituye la variable de interés principal del estudio, dado que el objetivo consiste en identificar características asociadas a la toxicidad.
Variable odor (olor): La variable odor recoge el tipo de olor que presenta cada seta (almendrado, anís, desagradable, picante, sin olor, etc.). Se trata de una variable categórica con múltiples niveles y refleja un rasgo sensorial que, en micología, puede estar relacionado con la identificación y peligrosidad de determinadas especies. Su variabilidad y naturaleza cualitativa permiten analizar si ciertos olores aparecen con mayor frecuencia en setas venenosas que en comestibles.
Variable bruises (moretones o magulladuras): La variable bruises indica si la seta se magulla (“t”) o no (“f”) al manipularla. Es también una variable categórica dicotómica. Las magulladuras o cambios de color pueden constituir características fisiológicas relevantes en la identificación de especies y, potencialmente, en la diferenciación entre setas tóxicas y no tóxicas.
A continuación, se procedió a la preparación de los datos del dataset (“Mushroom” 1981) con el fin de facilitar los análisis y la visualización. En primer lugar, se utilizó la función select para conservar únicamente las variables bruises, class y odor, consideradas relevantes para el estudio. Para ello, se emplearon funciones de los paquetes dplyr (Wickham et al. 2023) y ggplot2 (Wickham et al. 2025) (Wickham 2016), los cuales fueron cargados previamente mediante la función library.
| class | odor | bruises |
|---|---|---|
| p | p | t |
| e | a | t |
| e | l | t |
| p | p | t |
| e | n | f |
| e | a | t |
| e | a | t |
| e | l | t |
No obstante, el dataset (“Mushroom” 1981) presenta una estructura poco intuitiva. Por este motivo, se procedió a reemplazar los códigos alfabéticos por descripciones textuales más explícitas, con el fin de facilitar la interpretación y el análisis estadístico de los datos.
| class | odor | bruises |
|---|---|---|
| venenoso | Acre | Se magulla |
| comestible | Almendra | Se magulla |
| comestible | Anís | Se magulla |
| venenoso | Acre | Se magulla |
| comestible | Sin olor | No magulla |
| comestible | Almendra | Se magulla |
| comestible | Almendra | Se magulla |
| comestible | Anís | Se magulla |
| venenoso | Acre | Se magulla |
| comestible | Almendra | Se magulla |
# Primero transformamos la columna de clase con ifelse y lo tratamos como factor para nuestro analisis estadistico, donde haya p, sera venenoso, donde no, sera comestible.
pr_mushroom <- pr_mushroom %>%
mutate(
class = as.factor(ifelse(class == "p",
"venenoso",
"comestible")))
# Segundo, hacemos lo mismo con la columna bruises donde t se magulla.
pro_mushroom <- pr_mushroom %>%
mutate(
bruises = as.factor(ifelse(bruises == "t",
"Se magulla",
"No magulla")))
# Por ultimo y mas complicado vamos a hacer lo mismo pero con odor, al ser mas de un olor es bastante laborioso pero seguimos la misma dinámica anterior;
proc_mushroom <- pro_mushroom %>%
mutate(
odor = as.factor(
ifelse(odor == "a", "Almendra",
ifelse(odor == "c", "Creosota",
ifelse(odor == "f", "Fétido",
ifelse(odor == "l", "Anís",
ifelse(odor == "m", "Moho",
ifelse(odor == "n", "Sin olor",
ifelse(odor == "p", "Acre",
ifelse(odor == "s", "Picante",
ifelse(odor == "y", "Pescado", NA)))))))))))
# A continuación plasmamos la tabla correctamente con nuestro nuevo dataset
knitr::kable(head(proc_mushroom, 10), align = 'c', caption = "Tabla 3: Dataset procesado")
Hipótesis 1: class vs odor
Hipótesis nula (H₀): La toxicidad de la seta (comestible o venenosa) es independiente del olor que presenta. Es decir, la probabilidad de que una seta sea venenosa es equivalente para todos los tipos de olor, por lo que el olor no proporciona información sobre la clasificación de la seta.
Hipótesis alternativa (H₁): La toxicidad de la seta depende del olor. La probabilidad de que una seta sea venenosa varía según el tipo de olor, indicando que el olor constituye un factor relevante para la distinción entre setas comestibles y venenosas.
Hipótesis 2: class vs bruises
Hipótesis nula (H₀): La toxicidad de la seta (comestible o venenosa) es independiente de la presencia de magulladuras. La probabilidad de que una seta sea venenosa es la misma tanto si presenta magulladuras como si no, por lo que esta característica no aporta información relevante para la clasificación.
Hipótesis alternativa (H₁): La toxicidad de la seta depende de la presencia de magulladuras. La probabilidad de que una seta sea venenosa varía según si la seta presenta o no magulladuras, indicando que esta variable constituye un factor relevante para la distinción entre setas comestibles y venenosas.
Para evaluar la relación entre las variables consideradas y la toxicidad de las setas, se emplea el test de Chi-cuadrado de independencia, un procedimiento estadístico ampliamente utilizado para analizar asociaciones entre variables categóricas. Todas las variables involucradas en este estudio, tales como el olor y la presencia de magulladuras, son de tipo categórico, lo que permite clasificar las observaciones en diferentes categorías y analizar comparativamente su distribución en función de la toxicidad de la seta.
El test de Chi-cuadrado se basa en la comparación entre las frecuencias observadas en las tablas de contingencia y las frecuencias esperadas bajo la hipótesis de independencia, es decir, bajo la suposición de que no existe relación entre la variable de interés y la toxicidad. La magnitud de la discrepancia entre frecuencias observadas y esperadas permite determinar si la distribución de las categorías difiere de manera significativa de lo que se esperaría por azar.
La utilización de variables categóricas en este contexto es fundamental, ya que características como el olor y la presencia de magulladuras constituyen atributos discretos que pueden tener un papel determinante en la identificación de setas comestibles o venenosas. Analizar estas variables permite no solo verificar la existencia de asociaciones significativas, sino también identificar patrones que podrían ser relevantes para el desarrollo de modelos predictivos o guías de clasificación basadas en características observables.
Para llevar a cabo el test de Chi-cuadrado en R, el primer paso
consiste en construir una tabla de contingencia que recoja las
frecuencias observadas para cada combinación de categorías de las
variables analizadas. Esto se realiza mediante la función
table, que permite resumir de forma estructurada la
distribución conjunta de dos variables categóricas. A partir de esta
tabla, el test se aplica directamente con la función
chisq.test(), que calcula el estadístico Chi-cuadrado, los
grados de libertad y el valor p asociado.
Se generaron tablas mediante la función knitr (Xie 2023) con el objetivo de visualizar la información de manera más estructurada y práctica.
| Acre | Almendra | Anís | Creosota | Fétido | Moho | Pescado | Picante | Sin olor | |
|---|---|---|---|---|---|---|---|---|---|
| comestible | 0 | 400 | 400 | 0 | 0 | 0 | 0 | 0 | 3408 |
| venenoso | 256 | 0 | 0 | 192 | 2160 | 36 | 576 | 576 | 120 |
| No magulla | Se magulla | |
|---|---|---|
| comestible | 1456 | 2752 |
| venenoso | 3292 | 624 |
Estas tablas permiten observar la distribución conjunta de ambas variables. En las filas se presentan las diferentes clases de toxicidad (“venenoso” o “comestible”), mientras que en las columnas se representan las variables bruises y odor.
Se estableció un nivel de significación de α = 0.05. La interpretación se realizó de la siguiente manera:
Si p ≤ 0.05: Se rechaza H₀, indicando la existencia de una relación significativa entre las variables.
Si p > 0.05: No se rechaza H₀, lo que indica ausencia de evidencia para afirmar la relación entre las variables.
Los resultados obtenidos a partir de los tests de Chi-cuadrado de
independencia indican que, en ambas comparaciones, los valores p son
menores que 0,05, lo que implica el rechazo de la hipótesis nula (H₀) en
los dos casos. A continuación representaremos los resultados, con tablas
hechas a partir de knitr y broom::tidy
| statistic | p.value | parameter | method |
|---|---|---|---|
| 2041.416 | < 2.2e-16 | 1 | Pearson’s Chi-squared test with Yates’ continuity correction |
El valor p menor de 0,05 permite concluir que la toxicidad depende de la presencia o ausencia de magulladuras. La distribución de esta característica no es aleatoria, sino que se asocia significativamente con la clasificación de la seta como venenosa o comestible. Por tanto, las magulladuras representan una variable útil para la distinción entre ambos tipos de hongos. En nuestro caso, concluimos que las magulladuras son bastante típicas de las setas que son comestibles.
| estimate | p.value | conf.low | conf.high | method | alternative |
|---|---|---|---|---|---|
| 0.1003204 | < 2.2e-16 | 0.0900101 | 0.1117226 | Fisher’s Exact Test for Count Data | two.sided |
El test de Fisher lo usamos para analizar la relación entre dos variables categóricas mediante tablas de contingencia. Es especialmente adecuado cuando el tamaño muestral es pequeño (por eso quizas es mejor chi) o cuando existen frecuencias esperadas bajas, ya que calcula la probabilidad exacta sin depender de aproximaciones. Por ello, permite contrastar la independencia entre variables categóricas de forma válida en estas condiciones. En nuestro caso no ha dado problemas ya que nos sale el mismo p valor.
Dado que el valor de p es menor a 0,05, se concluye que existe una relación estadísticamente significativa entre ambas variables, indicando que la presencia de magulladuras se asocia de manera consistente con la clase de toxicidad de la seta.
| statistic | p.value | parameter | method |
|---|---|---|---|
| 7659.727 | < 2.2e-16 | 8 | Pearson’s Chi-squared test |
Con el fin de reforzar la hipótesis planteada, la variable odor se transformó en dos categorías generales: presencia de olor y ausencia de olor. Esta simplificación permite centrar el análisis en la influencia global de la presencia de olor sobre la toxicidad de las setas, sin evaluar diferencias entre tipos específicos de olor.
La representación gráfica de la variable original, compuesta por múltiples categorías, resulta menos intuitiva y dificulta la identificación visual de patrones claros, especialmente cuando el objetivo es evaluar una relación general entre olor y toxicidad. En cambio, el uso de una variable binaria facilita la comparación directa entre grupos, mejora la claridad visual del gráfico y refuerza la coherencia entre el análisis estadístico y la hipótesis de investigación planteada.
El valor p inferior a 0,05 evidencia que la toxicidad de la seta depende del olor. Esto indica que ciertos tipos de olor se presentan con mayor frecuencia en setas venenosas en comparación con las comestibles. En consecuencia, el olor constituye una característica relevante y discriminante para la diferenciación de setas tóxicas y no tóxicas.
Una vez obtenida una representación gráfica simplificada de la variable odor, se emplea su forma original con múltiples categorías para profundizar en el análisis de las diferencias observadas. Esta aproximación permite examinar de manera más detallada cómo se distribuyen los distintos tipos de olor en función de la toxicidad de las setas, aportando una visión complementaria al análisis binario previo.
La representación gráfica de la variable odor desagregada en todas sus categorías facilita la identificación de patrones específicos que no pueden apreciarse cuando se consideran únicamente dos grupos generales. De este modo, aunque la recodificación binaria resulta útil para evaluar la relación global entre olor y toxicidad, el análisis detallado por tipos de olor permite interpretar con mayor precisión qué características sensoriales se asocian de forma más marcada a setas comestibles o venenosas, enriqueciendo la interpretación de los resultados obtenidos.
El análisis realizado sobre el conjunto de datos de hongos ha permitido evaluar de manera sistemática la relación entre las características morfológicas y sensoriales de las setas y su clasificación como comestibles o venenosas. La preparación y transformación de las variables categóricas class, bruises y odor, facilitó la interpretación de los datos, convirtiendo códigos alfabéticos en descripciones significativas y estructurando la información para su análisis estadístico.
Los resultados de las tablas de contingencia y los tests de independencia, incluyendo el Chi-cuadrado y el test de Fisher, indican que existe una asociación significativa entre la toxicidad de las setas y las variables consideradas. En particular:
La presencia o ausencia de magulladuras (bruises) mostró una relación estadísticamente significativa con la clase del hongo, permitiendo diferenciar de manera consistente entre setas comestibles y venenosas.
La variable odor también se asoció de manera significativa con la toxicidad, evidenciando que ciertos tipos de olor son más frecuentes en setas venenosas que en comestibles. La representación completa de los distintos tipos de olor aportó un análisis más detallado de las diferencias observadas, permitiendo corroborar la relación global.
Los procedimientos implementados, que incluyen la transformación de variables, la generación de tablas de contingencia y la aplicación de tests estadísticos adecuados para variables categóricas, proporcionan un marco metodológico riguroso para la identificación de factores discriminantes en hongos. Asimismo, las visualizaciones gráficas refuerzan la interpretación de los resultados y permiten una evaluación clara de los patrones presentes en los datos.
Para finalizar, tanto el olor como la presencia de magulladuras y moretones constituyen variables relevantes para la clasificación de setas, mostrando una asociación estadísticamente significativa con la toxicidad. Estos hallazgos respaldan la utilidad de las características morfológicas y sensoriales como criterios objetivos en la identificación de hongos comestibles y venenosos, contribuyendo a la comprensión de los factores que determinan la seguridad en su consumo y proporcionando una base sólida para estudios predictivos y aplicaciones prácticas en micología.
## R version 4.5.2 (2025-10-31)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 20.04.6 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/liblapack.so.3; LAPACK version 3.9.0
##
## locale:
## [1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8
## [4] LC_COLLATE=C.UTF-8 LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8
## [7] LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C
## [10] LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C
##
## time zone: UTC
## tzcode source: system (glibc)
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] ggplot2_4.0.1 dplyr_1.1.4
##
## loaded via a namespace (and not attached):
## [1] vctrs_0.6.5 cli_3.6.5 knitr_1.50 rlang_1.1.6
## [5] xfun_0.54 purrr_1.2.0 generics_0.1.4 S7_0.2.1
## [9] jsonlite_2.0.0 labeling_0.4.3 glue_1.8.0 backports_1.5.0
## [13] htmltools_0.5.9 sass_0.4.10 scales_1.4.0 rmarkdown_2.30
## [17] grid_4.5.2 evaluate_1.0.5 jquerylib_0.1.4 tibble_3.3.0
## [21] fastmap_1.2.0 yaml_2.3.11 lifecycle_1.0.4 compiler_4.5.2
## [25] RColorBrewer_1.1-3 pkgconfig_2.0.3 tidyr_1.3.1 farver_2.1.2
## [29] digest_0.6.39 R6_2.6.1 tidyselect_1.2.1 pillar_1.11.1
## [33] magrittr_2.0.4 bslib_0.9.0 withr_3.0.2 tools_4.5.2
## [37] gtable_0.3.6 broom_1.0.11 cachem_1.1.0