Se importan los datos relativos a las dimensiones de pétalos y sépalos de tres especies del género Iris (I. setosa, I. versicolor e I. virginica)

iris_aae <- read.csv("a2_DelAngelEscalona_AndresLIMPIO.csv", header = TRUE)

También se suben a la sesión los paquete gráficos de R

library(ggplot2)
library(gridExtra)

Pregunta de investigación

¿Es posible, con fines taxonómicos, diferenciar las tres especies del género Iris con base en los tamaños de sus respectivos pétalos y sépalos?

Los datos fueron generados por Edgar Anderson en 1935 y retomados por el legendario Ronald A. Fisher (1936), con fines taxonómicos en el área biológica de la botánica. E. Anderson midió cuatro variables métricas (anchuras y longitudes) de los pétalos y sépalos de las flores en cuestión; cincuenta de cada una de las especies (denominadas por Fisher “variedades”).

Exploración del archivo

head(iris_aae)
##   sepal_length sepal_width petal_length petal_width variety id
## 1          5.1         3.5          1.4         0.2  Setosa  1
## 2          4.9         3.0          1.4         0.2  Setosa  2
## 3          4.7         3.2          1.3         0.2  Setosa  3
## 4          4.6         3.1          1.5         0.2  Setosa  4
## 5          5.0         3.6          1.4         0.2  Setosa  5
## 6          5.4         3.9          1.7         0.4  Setosa  6
tail(iris_aae)
##     sepal_length sepal_width petal_length petal_width   variety  id
## 145          6.7         3.3          5.7         2.5 Virginica 145
## 146          6.7         3.0          5.2         2.3 Virginica 146
## 147          6.3         2.5          5.0         1.9 Virginica 147
## 148          6.5         3.0          5.2         2.0 Virginica 148
## 149          6.2         3.4          5.4         2.3 Virginica 149
## 150          5.9         3.0          5.1         1.8 Virginica 150
table(iris_aae$variety)
## 
##     Setosa Versicolor  Virginica 
##         50         50         50

Generación de nuevas variables

Como las cuatro variables cuantitativas dan cuenta del tamaño de los especímenes, considero pertinente calcular de manera aproximada el área de las estructuras observadas (pétalos y sépalos), como si fueran cuadrángulos perfectos (que, en verdad, no lo son), pero que permiten estimar, a partir de ellas, el área de cada una (área del sépalo y área del pétalo, respectivamente).

iris_aae <- transform(iris_aae,
                      area.sepalo = sepal_length * sepal_width,
                      area.petalo = petal_length * petal_width)
head(iris_aae)
##   sepal_length sepal_width petal_length petal_width variety id area.sepalo
## 1          5.1         3.5          1.4         0.2  Setosa  1       17.85
## 2          4.9         3.0          1.4         0.2  Setosa  2       14.70
## 3          4.7         3.2          1.3         0.2  Setosa  3       15.04
## 4          4.6         3.1          1.5         0.2  Setosa  4       14.26
## 5          5.0         3.6          1.4         0.2  Setosa  5       18.00
## 6          5.4         3.9          1.7         0.4  Setosa  6       21.06
##   area.petalo
## 1        0.28
## 2        0.28
## 3        0.26
## 4        0.30
## 5        0.28
## 6        0.68
tail(iris_aae)
##     sepal_length sepal_width petal_length petal_width   variety  id area.sepalo
## 145          6.7         3.3          5.7         2.5 Virginica 145       22.11
## 146          6.7         3.0          5.2         2.3 Virginica 146       20.10
## 147          6.3         2.5          5.0         1.9 Virginica 147       15.75
## 148          6.5         3.0          5.2         2.0 Virginica 148       19.50
## 149          6.2         3.4          5.4         2.3 Virginica 149       21.08
## 150          5.9         3.0          5.1         1.8 Virginica 150       17.70
##     area.petalo
## 145       14.25
## 146       11.96
## 147        9.50
## 148       10.40
## 149       12.42
## 150        9.18

Gráficas que muestran la relación entre variables continuas

Tamaño del sépalo

ggplot(iris_aae, aes(x = sepal_length, y = sepal_width, color = variety,
       shape = variety)) +
  geom_point() +
  scale_color_manual(values = c("orange", "limegreen", "darkred")) +
  labs(title = "Tamaño del sépalo en el género Iris",
       x = "Longitud del sépalo (cm)", y = "Anchura del sépalo (cm)") +
  theme(legend.position = c(.65, .85))

Tamaño del pétalo

ggplot(iris_aae, aes(x = petal_length, y = petal_width, color = variety,
       shape = variety)) +
  geom_point() +
  scale_color_manual(values = c("orange", "limegreen", "darkred")) +
  labs(title = "Tamaño del pétalo en el género Iris",
       x = "Longitud del pétalo (cm)", y = "Anchura del pétalo (cm)") +
  theme(legend.position = c(.9, .2))

Área de ambas estrurcturas

ggplot(iris_aae, aes(x = area.sepalo, y = area.petalo, color = variety,
       shape = variety)) +
  geom_point() +
  scale_color_manual(values = c("orange", "limegreen", "darkred")) +
  labs(title = "Áreas de sépalo/pétalo en el género Iris",
       x = "Área del sépalo (cm cuadrados)",
       y = "Área del pétalo (cm cuadrados)") +
  theme(legend.position = c(.9, .2))

Observaciones

I. setosa es en definitiva una planta con pétalos y sépalos significativamente más pequeños que sus contrapartes. ¿Qué parte de la planta distingue mejor a cada especie? Pues los pétalos, tanto en su longitud como en su longitud, así como en su área; mientras que los sépalos muestran menor diversidad, así como un traslape más o menos intenso en las distribuciones.

Gráficas de cajas con facetado

En primer lugar, se ilustran los datos agrupados por especie para, posteriormente, exponerlos a través de facetas en ggplot2. Emplearemos las variables derivadas a partir de las originales, a saber, las área de las dos estructuras observadas: área del sépalo y área del pétalo.

ggplot(iris_aae, aes(x = variety, y = area.sepalo)) +
  geom_boxplot(fill = "cornflowerblue", color = "black", notch = TRUE,
               alpha = 0.35) +
  geom_point(position = "jitter", color = "blue", alpha = 0.5) +
  geom_rug(sides = "l", color = "black") +
  labs(x = "Especie", y = "Área del sépalo, cm cuadrados",
       title = "Comparación del tamaño del sépalo, género Iris")

ggplot(iris_aae, aes(x = variety, y = area.petalo)) +
  geom_boxplot(fill = "darkgreen", color = "black", notch = TRUE, alpha = .3) +
  geom_point(position = "jitter", color = "blue", alpha = 0.5) +
  geom_rug(sides = "l", color = "black") +
  labs(x = "Especie", y = "Área del pétalo, cm cuadrados",
       title = "Comparación del tamaño del pétalo, género Iris")
## Notch went outside hinges
## ℹ Do you want `notch = FALSE`?

Facetado por especie

Área del sépalo

ggplot(iris_aae, aes(x = variety, y = area.sepalo)) +
  geom_boxplot(fill = "cornflowerblue", color = "black", notch = TRUE,
               alpha = 0.35) +
  geom_point(position = "jitter", color = "blue", alpha = 0.5) +
  geom_rug(sides = "l", color = "black") +
  facet_grid(.~variety) +
  labs(x = "Especie", y = "Área del sépalo, cm cuadrados",
       title = "Comparación del tamaño del sépalo, género Iris")

Área del pétalo

ggplot(iris_aae, aes(x = variety, y = area.petalo)) +
  geom_boxplot(fill = "darkgreen", color = "black", notch = TRUE, alpha = .3) +
  geom_point(position = "jitter", color = "blue", alpha = 0.5) +
  geom_rug(sides = "l", color = "black") +
  facet_grid(.~variety) +
  labs(x = "Especie", y = "Área del pétalo, cm cuadrados",
       title = "Comparación del tamaño del pétalo, género Iris")
## Notch went outside hinges
## ℹ Do you want `notch = FALSE`?

Observaciones

Como ya se había apuntado líneas arriba, el pétalo muestra la mayor diferencia interespecie en las distribuciones. También es evidente que el tamaño mayor de las flores de I. versicolor e I. virginica “apachurran” la distribución de las flores de I. setosa. Conviene transformar las áreas calculadas para efectuar una comparación adecuada, quizá una estandarización (0, 1) o una a partir de un logaritmo.

Gráfico de distribución

Tamaño del pétalo

Al ponerse en evidencia que los datos provenientes de las medidas del pétalo discriminan mejor a las tres especies de Iris consideradas, realizaremos una examinación de las distribuciones a través de gráficos de densidad.

ggplot(iris_aae, aes(x = petal_length, fill = variety)) +
  geom_density(alpha = 0.3) +
  labs(title = "Pétalos del género Iris", subtitle = "Longitud del pétalo (cm)",
       y = "Densidad", x = "") +
  theme(legend.position = c(.9, .8))

ggplot(iris_aae, aes(x = petal_width, fill = variety)) +
  geom_density(alpha = 0.3) +
  labs(title = "Pétalos del género Iris", subtitle = "Anchura del pétalo (cm)",
       y = "Densidad", x = "") +
  theme(legend.position = c(.9, .8))

Observaciones

La distribución de I. setosa se aparta decididamente de sus hermanas de género y, dada la menor escala de sus pétalos, la varianza también es mucho menor. Entre las otras dos especies hay cierto traslape, lo cual, no obstante, permite diferenciarlas en cierta medida.

Conclusiones

Regresando al planteamiento inicial de este estudio, referente al poder discriminatorio de las tres especies de Iris con base en las medidas de sus flores, concluimos que, efectivamente, es posible buscar una combinación de todas ellas, especialmente de sus pétalos, para diferenciarlas.

El trabajo citado de Fisher (1936) desarrolla una serie de combinaciones lineales que confirman la separación contundente de I. setosa y su distinción razonable a pesar del relativo traslape de I. versicolor e I. virginica.

Convendría explorar la transformación de los datos originales, con el objetivo de estabilizar las escalas, en beneficio de una mejor comprensión de los datos.

Referencias

Anderson, Edgar (1935). The irises of the Gaspe Peninsula, Bulletin of the American Iris Society, 59, 2–5.

Fisher, R. A. (1936) The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179–188. doi:10.1111/j.1469-1809.1936.tb02137.x.