#1.- INTRODUCCIÓN

El Análisis Discriminante Lineal o Linear Discrimiant Analysis (LDA) es un método de clasificación supervisado de variables cualitativas en el que dos o más grupos son conocidos a priori y nuevas observaciones se clasifican en uno de ellos en función de sus características. Haciendo uso del teorema de Bayes, LDA estima la probabilidad de que una observación, dado un determinado valor de los predictores, pertenezca a cada una de las clases de la variable cualitativa, P(Y=k|X=x). Finalmente se asigna la observación a la clase k para la que la probabilidad predicha es mayor. Es una alternativa a la regresión logística cuando la variable cualitativa tiene más de dos niveles. Si bien existen extensiones de la regresión logística para múltiples clases, el LDA presenta una serie de ventajas:

Si las clases están bien separadas, los parámetros estimados en el modelo de regresión logística son inestables. El método de LDA no sufre este problema. Si el número de observaciones es bajo y la distribución de los predictores es aproximadamente normal en cada una de las clases, LDA es más estable que la regresión logística. Cuando se trata de un problema de clasificación con solo dos niveles, ambos métodos suelen llegar a resultados similares.

El proceso de un análisis discriminante puede resumirse en 6 pasos:

Disponer de un conjunto de datos de entrenamiento (training data) en el que se conoce a que grupo pertenece cada observación. Calcular las probabilidades previas (prior probabilities): la proporción esperada de observaciones que pertenecen a cada grupo. Determinar si la varianza o matriz de covarianzas es homogénea en todos los grupos. De esto dependerá que se emplee LDA o QDA. Estimar los parámetros necesarios para las funciones de probabilidad condicional, verificando que se cumplen las condiciones para hacerlo. Calcular el resultado de la función discriminante. El resultado de esta determina a qué grupo se asigna cada observación. Utilizar validación cruzada (cross-validation) para estimar las probabilidades de clasificaciones erróneas.

#2.- EJEMPLO

library(ggplot2)
ggplot(data.frame(x = c(-6, 10)), aes(x)) +
stat_function(fun = dnorm, args = list(mean = -1.25, sd = 1.5),
              color = "red") + 
stat_function(fun = dnorm, args = list(mean = 1.25, sd = 1.5), color = "blue") +
geom_vline(xintercept = 0, linetype = "longdash") +
theme_bw()

set.seed(6911)
library(ggplot2)

grupo_a <- rnorm(n = 300, mean = -1.25, sd = 1.5)
grupo_b <- rnorm(n = 300, mean = 1.25, sd = 1.5)

datos <- data.frame(valor =c(grupo_a, grupo_b), 
                    grupo = rep(c("A", "B"), each = 300))
ggplot(data = datos, aes(x = valor, fill = grupo)) +
  geom_histogram(alpha = 0.5, position = "identity") +
  geom_vline(xintercept = 0, linetype = "longdash") +
  geom_vline(xintercept = (mean(grupo_a) + mean(grupo_b))/2)  +
  annotate(geom = "text", x = 1.5, y = 9, label = "Límite decisión LDA") +
  annotate(geom = "text", x = -1.5, y = 10, label = "Límite decisión Bayes") +
  theme_bw() + theme(legend.position = "top")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

mu1 <- 0 # set mean x1
mu2 <- 0 # set mean x2
s11 <- 10 # set variance x1
s22 <- 10 # set variance x2
s12 <- 15 # set covariance x1 and x2
rho <- 0.5 # set correlation coefficient  x1 and x2
x1 <- seq(-10,10,length = 41) # generate vector  x1
x2 <- x1 # copy x1 to x2
f <- function(x1,x2) # multivariate function
{
  term1 <- 1/(2 * pi * sqrt(s11*s22*(1 - rho^2)))
  term2 <- -1/(2 * (1 - rho^2))
  term3 <- (x1 - mu1)^2/s11
  term4 <- (x2 - mu2)^2/s22
  term5 <- -2*rho*((x1 - mu1)*(x2 - mu2))/(sqrt(s11)*sqrt(s22))
  term1*exp(term2*(term3 + term4 - term5))
}
z <- outer(x1,x2,f) # calculate density values

persp(x1, x2, z, # 3-D plot
  main = "Distribución multivariante con dos predictores",
  col = "lightgreen",
  theta = 30, phi = 20,
  r = 50,
  d = 0.1,
  expand = 0.5,
  ltheta = 90, lphi = 180,
  shade = 0.75,
  ticktype = "simple",
  nticks = 5)

# Otra forma de representar una distribución bivariante
library(mvtnorm)
library(scatterplot3d)

sigma.zero <- matrix(c(1,0,0,1), ncol = 2) 
x1000 <- rmvnorm(n = 1000, mean = c(0,0), sigma = sigma.zero)
scatterplot3d(x1000[,1], x1000[,2],
              dmvnorm(x1000, mean = c(0,0), sigma = sigma.zero),
              highlight = TRUE, xlab = "x", ylab = "y", zlab = "z")

Esto es importante para un análisis discriminante lineal para que se pueda aplicar correctamente.

Condiciones de LDA

Las condiciones que se deben cumplir para que un Análisis Discriminante Lineal sea válido son:

Cada predictor que forma parte del modelo se distribuye de forma normal en cada una de las clases de la variable respuesta. En el caso de múltiples predictores, las observaciones siguen una distribución normal multivariante en todas las clases.

La varianza del predictor es igual en todas las clases de la variable respuesta. En el caso de múltiples predictores, la matriz de covarianza es igual en todas las clases. Si esto no se cumple se recurre a Análisis Discriminante Cuadrático (QDA).

Cuando la condición de normalidad no se cumple, el LDA pierde precisión pero aun así puede llegar a clasificaciones relativamente buenas. Using discriminant analysis for multi-class classification: an experimental investigation (Tao Li, Shenghuo Zhu, Mitsunori Ogihara).

Dos aproximaciones a LDA: Bayes y Fisher

Existen varios enfoques posibles para realizar un LDA. La aproximación descrita anteriormente está basada en el clasificador de Bayes, y utiliza todas las variables originales para calcular las probabilidades posteriores de que una observación pertenezca a cada grupo. La aproximación de Fisher se puede ver como un proceso con dos partes:

Reducción de dimensionalidad: Se pasa de p variables predictoras originales a k combinaciones lineales de dichos predictores (variables discriminantes) que permiten explicar la separación de los grupos pero con menos dimensiones (k < p).

Clasificación de las observaciones empleando las variables discriminantes.

Los resultados de clasificación obtenidos mediante el método de Fisher son iguales a los obtenidos por el método de Bayes cuando:

En el método de Bayes se asume que la matriz de covarianzas en igual en todos los grupos y se emplea como estimación la pooled within-class covariance matrix.

En el método de Fisher, todos los discriminantes lineales se utilizan para la clasificación. El número máximo de discriminantes obtenido tras la reducción de dimensionalidad es número grupos-1.

Precisión del LDA

Una vez que las normas de clasificación se han establecido, se tiene que evaluar como de buena es la clasificación resultante. En otras palabras, evaluar el porcentaje de aciertos en las clasificaciones.

Las matrices de confusión son una de las mejores formas de evaluar la capacidad de acierto que tiene un modelo LDA. Muestran el número de verdaderos positivos, verdaderos negativos, falsos positivos y falsos negativos. El método LDA busca los límites de decisión que más se aproximan al clasificador de Bayes, que por definición, tiene el menor ratio de error total de entre todos los clasificadores (si se cumple la condición de normalidad). Por lo tanto, el LDA intenta conseguir el menor número de clasificaciones erróneas posibles, pero no diferencia entre falsos positivos o falsos negativos. Si se quiere intentar reducir el número de errores de clasificación en una dirección determinada (por ejemplo, menos falsos negativos) se puede modificar el límite de decisión, aunque como consecuencia aumentará el número de falsos positivos.

Cuando para evaluar el error de clasificación se emplean las mismas observaciones con las que se ha creado el modelo, se obtiene lo que se denomina el training error. Si bien esta es una forma sencilla de estimar la precisión en la clasificación, tiende a ser excesivamente optimista. Es más adecuado evaluar el modelo empleando observaciones nuevas que el modelo no ha visto, obteniendo así el test error. En el capítulo Validación de modelos de regresión se describen diferentes estrategias para estimar el test error.

#3.- EJERCICIO DISCRIMINANTE 1

Un equipo de biólogos quiere generar un modelo estadístico que permita identificar a que especie (a o b) pertenece un determinado insecto. Para ello se han medido tres variables (longitud de las patas, diámetro del abdomen y diámetro del órgano sexual) en 10 individuos de cada una de las dos especies.

input <- ("
especie pata abdomen organo_sexual 
a 191 131 53
a 185 134 50
a 200 137 52
a 173 127 50
a 171 128 49
a 160 118 47
a 188 134 54
a 186 129 51
a 174 131 52
a 163 115 47
b 186 107 49
b 211 122 49
b 201 144 47
b 242 131 54
b 184 108 43
b 211 118 51
b 217 122 49
b 223 127 51
b 208 125 50
b 199 124 46
")

datos <- read.table(textConnection(input), header = TRUE)
datos$especie <- as.factor(datos$especie)

Exploración de datos

library(ggplot2)
library(ggpubr)

p1 <- ggplot(data = datos, aes(x=pata, fill = especie))+
  geom_histogram(position = "identity", alpha = 0.5)

p2 <- ggplot(data = datos, aes(x=abdomen, fill=especie)) +
  geom_histogram(position = "identity", alpha = 0.5)

p3 <- ggplot(data = datos, aes(x=organo_sexual, fill=especie)) +
  geom_histogram(position = "identity", alpha = 0.5)

ggarrange(p1, p2, p3, nrow = 3, common.legend = TRUE)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

# correlaciones por separación
#---------------------------------
pairs(x=datos[,c("pata", "abdomen", "organo_sexual")],
      col = c("red", "blue")[datos$especie], pch=19)

El par de variables abdomen-pata y el par pata-organo_sexual parecen separar bien las dos especies.

library(scatterplot3d)
scatterplot3d(datos$pata, datos$abdomen, datos$organo_sexual, 
              color = c("red", "blue")[datos$especie], pch=19,
              grid = TRUE, xlab = "pata", ylab = "abdomen", zlab = "organo sexual",
              angle = 65, cex.axis = 0.6)
legend("topleft", bty = "n", cex = 0.8, title ="especie", c("a", "b"), fill= c("red", "blue"))

par(mfcol = c(2, 3))
for(k in 2:4) {
  j0 <- names(datos)[k]
  x0  <- seq(min(datos[, k]), max(datos[, k]), le = 50)
  for (i in 1:2) {
    i0 <- levels(datos$especie)[i]
    x <- datos [datos$especie == i0, j0]
    hist(x, proba = TRUE, col = "lightblue", main = paste ("especie", i0), xlab = j0)
    lines(x0, dnorm(x0, mean(x), sd(x)), col = "red", lwd = 2)
  }      
}

par(mfcol = c(2,3))
for(k in 2:4) {
  j0 <- names(datos)[k]
  x0  <- seq(min(datos[, k]), max(datos[, k]), le = 50)
  for (i in 1:2) {
    i0 <- levels(datos$especie)[i]
    x <- datos [datos$especie == i0, j0]
    qqnorm(x, main = paste("especie", i0, j0), pch =19, col = i + 1)
    qqline(x)
  }
}

library(reshape2)
library(knitr)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
datos_tidy <- melt(datos, value.name = "valor")
## Using especie as id variables
datos_tidy
##    especie      variable valor
## 1        a          pata   191
## 2        a          pata   185
## 3        a          pata   200
## 4        a          pata   173
## 5        a          pata   171
## 6        a          pata   160
## 7        a          pata   188
## 8        a          pata   186
## 9        a          pata   174
## 10       a          pata   163
## 11       b          pata   186
## 12       b          pata   211
## 13       b          pata   201
## 14       b          pata   242
## 15       b          pata   184
## 16       b          pata   211
## 17       b          pata   217
## 18       b          pata   223
## 19       b          pata   208
## 20       b          pata   199
## 21       a       abdomen   131
## 22       a       abdomen   134
## 23       a       abdomen   137
## 24       a       abdomen   127
## 25       a       abdomen   128
## 26       a       abdomen   118
## 27       a       abdomen   134
## 28       a       abdomen   129
## 29       a       abdomen   131
## 30       a       abdomen   115
## 31       b       abdomen   107
## 32       b       abdomen   122
## 33       b       abdomen   144
## 34       b       abdomen   131
## 35       b       abdomen   108
## 36       b       abdomen   118
## 37       b       abdomen   122
## 38       b       abdomen   127
## 39       b       abdomen   125
## 40       b       abdomen   124
## 41       a organo_sexual    53
## 42       a organo_sexual    50
## 43       a organo_sexual    52
## 44       a organo_sexual    50
## 45       a organo_sexual    49
## 46       a organo_sexual    47
## 47       a organo_sexual    54
## 48       a organo_sexual    51
## 49       a organo_sexual    52
## 50       a organo_sexual    47
## 51       b organo_sexual    49
## 52       b organo_sexual    49
## 53       b organo_sexual    47
## 54       b organo_sexual    54
## 55       b organo_sexual    43
## 56       b organo_sexual    51
## 57       b organo_sexual    49
## 58       b organo_sexual    51
## 59       b organo_sexual    50
## 60       b organo_sexual    46
datos
##    especie pata abdomen organo_sexual
## 1        a  191     131            53
## 2        a  185     134            50
## 3        a  200     137            52
## 4        a  173     127            50
## 5        a  171     128            49
## 6        a  160     118            47
## 7        a  188     134            54
## 8        a  186     129            51
## 9        a  174     131            52
## 10       a  163     115            47
## 11       b  186     107            49
## 12       b  211     122            49
## 13       b  201     144            47
## 14       b  242     131            54
## 15       b  184     108            43
## 16       b  211     118            51
## 17       b  217     122            49
## 18       b  223     127            51
## 19       b  208     125            50
## 20       b  199     124            46
kable(datos_tidy %>% group_by(especie, variable) %>% summarise(p_value_Shapiro.test = shapiro.test(valor)$p.value))
## `summarise()` has grouped output by 'especie'. You can override using the
## `.groups` argument.
especie variable p_value_Shapiro.test
a pata 0.7763034
a abdomen 0.1845349
a organo_sexual 0.6430844
b pata 0.7985711
b abdomen 0.5538213
b organo_sexual 0.8217855

No hay evidencias de falta de normalidad univariante en ninguna de las variables empleadas como predictores en ninguno de los grupos.

# OUTLIERS
#---------------------------------
library(MVN)
outlier <- mvn(data = datos[, -1], mvnTest = "hz", multivariateOutlierMethod = "quan")

# Test de ROYSTON para normalidad multivariante
#---------------------------------------------------
royston_test <- mvn(data = datos[, -1], mvnTest = "royston", multivariatePlot = "qq")

royston_test$multivariateNormality
##      Test         H   p value MVN
## 1 Royston 0.4636176 0.9299447 YES
hz_test <- mvn(data = datos[, -1], mvnTest = "hz")
hz_test$multivariateNormality
##            Test        HZ    p value MVN
## 1 Henze-Zirkler 0.7870498 0.07666139 YES

A pesar de los 5 outliers detectados, ninguno de los dos test encuentra evidencias significativas ( α = 0.05) de falta de normalidad multivariante.

M box

library(biotools)
## Loading required package: MASS
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
## ---
## biotools version 4.2

H0: las matrices de varianzas y covarianzas son iguales en los grupos (SÍ DISC) H1: las matrices de varianzas y covarianzas son iguales en los grupos (NO DISC)

boxM(data=datos[,2:4], grouping = datos[,1])
## 
##  Box's M-test for Homogeneity of Covariance Matrices
## 
## data:  datos[, 2:4]
## Chi-Sq (approx.) = 9.831, df = 6, p-value = 0.132

Al nivel de significación del 5% no se rechaza la hipótesis H0. Las matrices de varianzas y covarianzas son iguales en los grupos (SÍ DISC).

MODELO LDA

#Modelo LDA
#--------------
modelo <- lda(formula = especie ~pata + abdomen + organo_sexual, data = datos)
print(modelo)
## Call:
## lda(especie ~ pata + abdomen + organo_sexual, data = datos)
## 
## Prior probabilities of groups:
##   a   b 
## 0.5 0.5 
## 
## Group means:
##    pata abdomen organo_sexual
## a 179.1   128.4          50.5
## b 208.2   122.8          48.9
## 
## Coefficients of linear discriminants:
##                       LD1
## pata           0.13225339
## abdomen       -0.07941509
## organo_sexual -0.52655608
nuevas_observaciones <- data.frame(pata = 194, abdomen = 124, organo_sexual = 49)
predict(object = modelo, newdata = nuevas_observaciones)
## $class
## [1] b
## Levels: a b
## 
## $posterior
##            a         b
## 1 0.05823333 0.9417667
## 
## $x
##         LD1
## 1 0.5419421

El resultado muestra que, según la función discriminante, la probabilidad posterior de que el espécimen pertenezca a la especie b es del 94.2% frente al 5.8% de que pertenezca a la especie a.

Calidad de la clasificación

predicciones <- predict(object = modelo, newdata = datos[,-1], method = "predictive")
table(datos$especie, predicciones$class,
      dnn = c("Clase real", "Clase predicha"))
##           Clase predicha
## Clase real  a  b
##          a 10  0
##          b  0 10
fiabilidad = (10 + 10)/(10+0+0+10) *100
paste("Fiabilidad", fiabilidad, "%")
## [1] "Fiabilidad 100 %"
training_error <- mean(datos$especie != predicciones$class)*100
paste("training_error", training_error, "%")
## [1] "training_error 0 %"
with(datos, {
  s3d <- scatterplot3d(pata, abdomen, organo_sexual,
                       color = c("red", "blue")[datos$especie],
                       pch = 19, grid = TRUE, xlab = "pata", ylab = "abdomen",
                       zlab = "organo sexual", angle = 65, cex.axis = 0.6)
  
  s3d.coords <- s3d$xyz.convert(pata, abdomen, organo_sexual)
  # convierte coordenadas 3D en proyecciones 2D
    
  text(s3d.coords$x, s3d.coords$y, # cordenadas x, y
       labels = datos$especie,     # texto
       cex = .8, pos = 4)   
    
  legend("topleft", 
         bty = "n", cex = 0.8,
         title = "Especie",
         c("a", "b"), fill = c("red", "blue"))
})

#4.- EJERCICIO DISCRIMINANTE 2

El set de datos Iris contiene métricas de 150 flores de 3 especies diferentes de planta Iris. Para cada flor se han registrado 4 variables: sepal length, sepal width, petal length y petal width, todas ellas en centímetros. Se desea generar un modelo discriminante que permita clasificar las flores en las distintas especies empleando las variables mencionadas.

data("iris")
kable(head(iris, n = 10))
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa
4.6 3.4 1.4 0.3 setosa
5.0 3.4 1.5 0.2 setosa
4.4 2.9 1.4 0.2 setosa
4.9 3.1 1.5 0.1 setosa
library(ggplot2)
library(ggpubr)
library(gridExtra)
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
plot1 <- ggplot(data = iris, aes(x=Sepal.Length , fill = Species)) +
  geom_histogram(position = "identity", alpha = 0.5)
plot2 <- ggplot(data = iris, aes(x=Sepal.Width, fill = Species)) +
  geom_histogram(position = "identity", alpha = 0.5)
plot3 <- ggplot(data = iris, aes(x=Petal.Length, fill = Species)) +
  geom_histogram(position = "identity", alpha = 0.5)
plot4 <- ggplot(data = iris, aes(x=Petal.Width  , fill = Species)) +
  geom_histogram(position = "identity", alpha = 0.5)

ggarrange(plot1, plot2, plot3, plot4, nrow = 4, common.legend = TRUE)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

pairs(x = iris[, -5], col = c("green", "red", "blue")[iris$Species], pch = 19)

Las variables Petal.Length y Petal.Width son las dos variables con más potencial para poder separar entre clases. Sin embargo, están altamente correlacionadas, por lo que la información que aportan es en gran medida redundante.

par(mfcol = c(3, 4))
for (k in 1:4){
  j0 <- names(iris)[k]
  x0 <- seq(min(iris[k]), max(iris[k]), le = 50)
  for (i in 1:3){
    i0 <- levels(iris$Species)[i]
    x <- iris[iris$Species == i0, j0]
    qqnorm(x, main = paste(i0, j0), pch = 19, col = i+10)
    qqline(x)
  }
}

par(mfcol = c(3, 4))
for (k in 1:4){
  j0 <- names(iris)[k]
  x0 <- seq(min(iris[k]), max(iris[k]), le = 50)
  for (i in 1:3) {
    i0 <- levels(iris$Species)[i]
    x <- iris[iris$Species == i0, j0]
    hist(x, proba = T, col = "green", main = paste("especie", i0), xlab = j0)
    lines(x0, dnorm(x0, mean(x), sd(x)), col = "red", lwd = 2)
  }
}

library(reshape2)
library(knitr)
library(dplyr)
datos_tidy2 <- melt(iris, value.name = "valor")
## Using Species as id variables
iris
##     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
## 1            5.1         3.5          1.4         0.2     setosa
## 2            4.9         3.0          1.4         0.2     setosa
## 3            4.7         3.2          1.3         0.2     setosa
## 4            4.6         3.1          1.5         0.2     setosa
## 5            5.0         3.6          1.4         0.2     setosa
## 6            5.4         3.9          1.7         0.4     setosa
## 7            4.6         3.4          1.4         0.3     setosa
## 8            5.0         3.4          1.5         0.2     setosa
## 9            4.4         2.9          1.4         0.2     setosa
## 10           4.9         3.1          1.5         0.1     setosa
## 11           5.4         3.7          1.5         0.2     setosa
## 12           4.8         3.4          1.6         0.2     setosa
## 13           4.8         3.0          1.4         0.1     setosa
## 14           4.3         3.0          1.1         0.1     setosa
## 15           5.8         4.0          1.2         0.2     setosa
## 16           5.7         4.4          1.5         0.4     setosa
## 17           5.4         3.9          1.3         0.4     setosa
## 18           5.1         3.5          1.4         0.3     setosa
## 19           5.7         3.8          1.7         0.3     setosa
## 20           5.1         3.8          1.5         0.3     setosa
## 21           5.4         3.4          1.7         0.2     setosa
## 22           5.1         3.7          1.5         0.4     setosa
## 23           4.6         3.6          1.0         0.2     setosa
## 24           5.1         3.3          1.7         0.5     setosa
## 25           4.8         3.4          1.9         0.2     setosa
## 26           5.0         3.0          1.6         0.2     setosa
## 27           5.0         3.4          1.6         0.4     setosa
## 28           5.2         3.5          1.5         0.2     setosa
## 29           5.2         3.4          1.4         0.2     setosa
## 30           4.7         3.2          1.6         0.2     setosa
## 31           4.8         3.1          1.6         0.2     setosa
## 32           5.4         3.4          1.5         0.4     setosa
## 33           5.2         4.1          1.5         0.1     setosa
## 34           5.5         4.2          1.4         0.2     setosa
## 35           4.9         3.1          1.5         0.2     setosa
## 36           5.0         3.2          1.2         0.2     setosa
## 37           5.5         3.5          1.3         0.2     setosa
## 38           4.9         3.6          1.4         0.1     setosa
## 39           4.4         3.0          1.3         0.2     setosa
## 40           5.1         3.4          1.5         0.2     setosa
## 41           5.0         3.5          1.3         0.3     setosa
## 42           4.5         2.3          1.3         0.3     setosa
## 43           4.4         3.2          1.3         0.2     setosa
## 44           5.0         3.5          1.6         0.6     setosa
## 45           5.1         3.8          1.9         0.4     setosa
## 46           4.8         3.0          1.4         0.3     setosa
## 47           5.1         3.8          1.6         0.2     setosa
## 48           4.6         3.2          1.4         0.2     setosa
## 49           5.3         3.7          1.5         0.2     setosa
## 50           5.0         3.3          1.4         0.2     setosa
## 51           7.0         3.2          4.7         1.4 versicolor
## 52           6.4         3.2          4.5         1.5 versicolor
## 53           6.9         3.1          4.9         1.5 versicolor
## 54           5.5         2.3          4.0         1.3 versicolor
## 55           6.5         2.8          4.6         1.5 versicolor
## 56           5.7         2.8          4.5         1.3 versicolor
## 57           6.3         3.3          4.7         1.6 versicolor
## 58           4.9         2.4          3.3         1.0 versicolor
## 59           6.6         2.9          4.6         1.3 versicolor
## 60           5.2         2.7          3.9         1.4 versicolor
## 61           5.0         2.0          3.5         1.0 versicolor
## 62           5.9         3.0          4.2         1.5 versicolor
## 63           6.0         2.2          4.0         1.0 versicolor
## 64           6.1         2.9          4.7         1.4 versicolor
## 65           5.6         2.9          3.6         1.3 versicolor
## 66           6.7         3.1          4.4         1.4 versicolor
## 67           5.6         3.0          4.5         1.5 versicolor
## 68           5.8         2.7          4.1         1.0 versicolor
## 69           6.2         2.2          4.5         1.5 versicolor
## 70           5.6         2.5          3.9         1.1 versicolor
## 71           5.9         3.2          4.8         1.8 versicolor
## 72           6.1         2.8          4.0         1.3 versicolor
## 73           6.3         2.5          4.9         1.5 versicolor
## 74           6.1         2.8          4.7         1.2 versicolor
## 75           6.4         2.9          4.3         1.3 versicolor
## 76           6.6         3.0          4.4         1.4 versicolor
## 77           6.8         2.8          4.8         1.4 versicolor
## 78           6.7         3.0          5.0         1.7 versicolor
## 79           6.0         2.9          4.5         1.5 versicolor
## 80           5.7         2.6          3.5         1.0 versicolor
## 81           5.5         2.4          3.8         1.1 versicolor
## 82           5.5         2.4          3.7         1.0 versicolor
## 83           5.8         2.7          3.9         1.2 versicolor
## 84           6.0         2.7          5.1         1.6 versicolor
## 85           5.4         3.0          4.5         1.5 versicolor
## 86           6.0         3.4          4.5         1.6 versicolor
## 87           6.7         3.1          4.7         1.5 versicolor
## 88           6.3         2.3          4.4         1.3 versicolor
## 89           5.6         3.0          4.1         1.3 versicolor
## 90           5.5         2.5          4.0         1.3 versicolor
## 91           5.5         2.6          4.4         1.2 versicolor
## 92           6.1         3.0          4.6         1.4 versicolor
## 93           5.8         2.6          4.0         1.2 versicolor
## 94           5.0         2.3          3.3         1.0 versicolor
## 95           5.6         2.7          4.2         1.3 versicolor
## 96           5.7         3.0          4.2         1.2 versicolor
## 97           5.7         2.9          4.2         1.3 versicolor
## 98           6.2         2.9          4.3         1.3 versicolor
## 99           5.1         2.5          3.0         1.1 versicolor
## 100          5.7         2.8          4.1         1.3 versicolor
## 101          6.3         3.3          6.0         2.5  virginica
## 102          5.8         2.7          5.1         1.9  virginica
## 103          7.1         3.0          5.9         2.1  virginica
## 104          6.3         2.9          5.6         1.8  virginica
## 105          6.5         3.0          5.8         2.2  virginica
## 106          7.6         3.0          6.6         2.1  virginica
## 107          4.9         2.5          4.5         1.7  virginica
## 108          7.3         2.9          6.3         1.8  virginica
## 109          6.7         2.5          5.8         1.8  virginica
## 110          7.2         3.6          6.1         2.5  virginica
## 111          6.5         3.2          5.1         2.0  virginica
## 112          6.4         2.7          5.3         1.9  virginica
## 113          6.8         3.0          5.5         2.1  virginica
## 114          5.7         2.5          5.0         2.0  virginica
## 115          5.8         2.8          5.1         2.4  virginica
## 116          6.4         3.2          5.3         2.3  virginica
## 117          6.5         3.0          5.5         1.8  virginica
## 118          7.7         3.8          6.7         2.2  virginica
## 119          7.7         2.6          6.9         2.3  virginica
## 120          6.0         2.2          5.0         1.5  virginica
## 121          6.9         3.2          5.7         2.3  virginica
## 122          5.6         2.8          4.9         2.0  virginica
## 123          7.7         2.8          6.7         2.0  virginica
## 124          6.3         2.7          4.9         1.8  virginica
## 125          6.7         3.3          5.7         2.1  virginica
## 126          7.2         3.2          6.0         1.8  virginica
## 127          6.2         2.8          4.8         1.8  virginica
## 128          6.1         3.0          4.9         1.8  virginica
## 129          6.4         2.8          5.6         2.1  virginica
## 130          7.2         3.0          5.8         1.6  virginica
## 131          7.4         2.8          6.1         1.9  virginica
## 132          7.9         3.8          6.4         2.0  virginica
## 133          6.4         2.8          5.6         2.2  virginica
## 134          6.3         2.8          5.1         1.5  virginica
## 135          6.1         2.6          5.6         1.4  virginica
## 136          7.7         3.0          6.1         2.3  virginica
## 137          6.3         3.4          5.6         2.4  virginica
## 138          6.4         3.1          5.5         1.8  virginica
## 139          6.0         3.0          4.8         1.8  virginica
## 140          6.9         3.1          5.4         2.1  virginica
## 141          6.7         3.1          5.6         2.4  virginica
## 142          6.9         3.1          5.1         2.3  virginica
## 143          5.8         2.7          5.1         1.9  virginica
## 144          6.8         3.2          5.9         2.3  virginica
## 145          6.7         3.3          5.7         2.5  virginica
## 146          6.7         3.0          5.2         2.3  virginica
## 147          6.3         2.5          5.0         1.9  virginica
## 148          6.5         3.0          5.2         2.0  virginica
## 149          6.2         3.4          5.4         2.3  virginica
## 150          5.9         3.0          5.1         1.8  virginica
datos_tidy
##    especie      variable valor
## 1        a          pata   191
## 2        a          pata   185
## 3        a          pata   200
## 4        a          pata   173
## 5        a          pata   171
## 6        a          pata   160
## 7        a          pata   188
## 8        a          pata   186
## 9        a          pata   174
## 10       a          pata   163
## 11       b          pata   186
## 12       b          pata   211
## 13       b          pata   201
## 14       b          pata   242
## 15       b          pata   184
## 16       b          pata   211
## 17       b          pata   217
## 18       b          pata   223
## 19       b          pata   208
## 20       b          pata   199
## 21       a       abdomen   131
## 22       a       abdomen   134
## 23       a       abdomen   137
## 24       a       abdomen   127
## 25       a       abdomen   128
## 26       a       abdomen   118
## 27       a       abdomen   134
## 28       a       abdomen   129
## 29       a       abdomen   131
## 30       a       abdomen   115
## 31       b       abdomen   107
## 32       b       abdomen   122
## 33       b       abdomen   144
## 34       b       abdomen   131
## 35       b       abdomen   108
## 36       b       abdomen   118
## 37       b       abdomen   122
## 38       b       abdomen   127
## 39       b       abdomen   125
## 40       b       abdomen   124
## 41       a organo_sexual    53
## 42       a organo_sexual    50
## 43       a organo_sexual    52
## 44       a organo_sexual    50
## 45       a organo_sexual    49
## 46       a organo_sexual    47
## 47       a organo_sexual    54
## 48       a organo_sexual    51
## 49       a organo_sexual    52
## 50       a organo_sexual    47
## 51       b organo_sexual    49
## 52       b organo_sexual    49
## 53       b organo_sexual    47
## 54       b organo_sexual    54
## 55       b organo_sexual    43
## 56       b organo_sexual    51
## 57       b organo_sexual    49
## 58       b organo_sexual    51
## 59       b organo_sexual    50
## 60       b organo_sexual    46
datos_tidy2
##        Species     variable valor
## 1       setosa Sepal.Length   5.1
## 2       setosa Sepal.Length   4.9
## 3       setosa Sepal.Length   4.7
## 4       setosa Sepal.Length   4.6
## 5       setosa Sepal.Length   5.0
## 6       setosa Sepal.Length   5.4
## 7       setosa Sepal.Length   4.6
## 8       setosa Sepal.Length   5.0
## 9       setosa Sepal.Length   4.4
## 10      setosa Sepal.Length   4.9
## 11      setosa Sepal.Length   5.4
## 12      setosa Sepal.Length   4.8
## 13      setosa Sepal.Length   4.8
## 14      setosa Sepal.Length   4.3
## 15      setosa Sepal.Length   5.8
## 16      setosa Sepal.Length   5.7
## 17      setosa Sepal.Length   5.4
## 18      setosa Sepal.Length   5.1
## 19      setosa Sepal.Length   5.7
## 20      setosa Sepal.Length   5.1
## 21      setosa Sepal.Length   5.4
## 22      setosa Sepal.Length   5.1
## 23      setosa Sepal.Length   4.6
## 24      setosa Sepal.Length   5.1
## 25      setosa Sepal.Length   4.8
## 26      setosa Sepal.Length   5.0
## 27      setosa Sepal.Length   5.0
## 28      setosa Sepal.Length   5.2
## 29      setosa Sepal.Length   5.2
## 30      setosa Sepal.Length   4.7
## 31      setosa Sepal.Length   4.8
## 32      setosa Sepal.Length   5.4
## 33      setosa Sepal.Length   5.2
## 34      setosa Sepal.Length   5.5
## 35      setosa Sepal.Length   4.9
## 36      setosa Sepal.Length   5.0
## 37      setosa Sepal.Length   5.5
## 38      setosa Sepal.Length   4.9
## 39      setosa Sepal.Length   4.4
## 40      setosa Sepal.Length   5.1
## 41      setosa Sepal.Length   5.0
## 42      setosa Sepal.Length   4.5
## 43      setosa Sepal.Length   4.4
## 44      setosa Sepal.Length   5.0
## 45      setosa Sepal.Length   5.1
## 46      setosa Sepal.Length   4.8
## 47      setosa Sepal.Length   5.1
## 48      setosa Sepal.Length   4.6
## 49      setosa Sepal.Length   5.3
## 50      setosa Sepal.Length   5.0
## 51  versicolor Sepal.Length   7.0
## 52  versicolor Sepal.Length   6.4
## 53  versicolor Sepal.Length   6.9
## 54  versicolor Sepal.Length   5.5
## 55  versicolor Sepal.Length   6.5
## 56  versicolor Sepal.Length   5.7
## 57  versicolor Sepal.Length   6.3
## 58  versicolor Sepal.Length   4.9
## 59  versicolor Sepal.Length   6.6
## 60  versicolor Sepal.Length   5.2
## 61  versicolor Sepal.Length   5.0
## 62  versicolor Sepal.Length   5.9
## 63  versicolor Sepal.Length   6.0
## 64  versicolor Sepal.Length   6.1
## 65  versicolor Sepal.Length   5.6
## 66  versicolor Sepal.Length   6.7
## 67  versicolor Sepal.Length   5.6
## 68  versicolor Sepal.Length   5.8
## 69  versicolor Sepal.Length   6.2
## 70  versicolor Sepal.Length   5.6
## 71  versicolor Sepal.Length   5.9
## 72  versicolor Sepal.Length   6.1
## 73  versicolor Sepal.Length   6.3
## 74  versicolor Sepal.Length   6.1
## 75  versicolor Sepal.Length   6.4
## 76  versicolor Sepal.Length   6.6
## 77  versicolor Sepal.Length   6.8
## 78  versicolor Sepal.Length   6.7
## 79  versicolor Sepal.Length   6.0
## 80  versicolor Sepal.Length   5.7
## 81  versicolor Sepal.Length   5.5
## 82  versicolor Sepal.Length   5.5
## 83  versicolor Sepal.Length   5.8
## 84  versicolor Sepal.Length   6.0
## 85  versicolor Sepal.Length   5.4
## 86  versicolor Sepal.Length   6.0
## 87  versicolor Sepal.Length   6.7
## 88  versicolor Sepal.Length   6.3
## 89  versicolor Sepal.Length   5.6
## 90  versicolor Sepal.Length   5.5
## 91  versicolor Sepal.Length   5.5
## 92  versicolor Sepal.Length   6.1
## 93  versicolor Sepal.Length   5.8
## 94  versicolor Sepal.Length   5.0
## 95  versicolor Sepal.Length   5.6
## 96  versicolor Sepal.Length   5.7
## 97  versicolor Sepal.Length   5.7
## 98  versicolor Sepal.Length   6.2
## 99  versicolor Sepal.Length   5.1
## 100 versicolor Sepal.Length   5.7
## 101  virginica Sepal.Length   6.3
## 102  virginica Sepal.Length   5.8
## 103  virginica Sepal.Length   7.1
## 104  virginica Sepal.Length   6.3
## 105  virginica Sepal.Length   6.5
## 106  virginica Sepal.Length   7.6
## 107  virginica Sepal.Length   4.9
## 108  virginica Sepal.Length   7.3
## 109  virginica Sepal.Length   6.7
## 110  virginica Sepal.Length   7.2
## 111  virginica Sepal.Length   6.5
## 112  virginica Sepal.Length   6.4
## 113  virginica Sepal.Length   6.8
## 114  virginica Sepal.Length   5.7
## 115  virginica Sepal.Length   5.8
## 116  virginica Sepal.Length   6.4
## 117  virginica Sepal.Length   6.5
## 118  virginica Sepal.Length   7.7
## 119  virginica Sepal.Length   7.7
## 120  virginica Sepal.Length   6.0
## 121  virginica Sepal.Length   6.9
## 122  virginica Sepal.Length   5.6
## 123  virginica Sepal.Length   7.7
## 124  virginica Sepal.Length   6.3
## 125  virginica Sepal.Length   6.7
## 126  virginica Sepal.Length   7.2
## 127  virginica Sepal.Length   6.2
## 128  virginica Sepal.Length   6.1
## 129  virginica Sepal.Length   6.4
## 130  virginica Sepal.Length   7.2
## 131  virginica Sepal.Length   7.4
## 132  virginica Sepal.Length   7.9
## 133  virginica Sepal.Length   6.4
## 134  virginica Sepal.Length   6.3
## 135  virginica Sepal.Length   6.1
## 136  virginica Sepal.Length   7.7
## 137  virginica Sepal.Length   6.3
## 138  virginica Sepal.Length   6.4
## 139  virginica Sepal.Length   6.0
## 140  virginica Sepal.Length   6.9
## 141  virginica Sepal.Length   6.7
## 142  virginica Sepal.Length   6.9
## 143  virginica Sepal.Length   5.8
## 144  virginica Sepal.Length   6.8
## 145  virginica Sepal.Length   6.7
## 146  virginica Sepal.Length   6.7
## 147  virginica Sepal.Length   6.3
## 148  virginica Sepal.Length   6.5
## 149  virginica Sepal.Length   6.2
## 150  virginica Sepal.Length   5.9
## 151     setosa  Sepal.Width   3.5
## 152     setosa  Sepal.Width   3.0
## 153     setosa  Sepal.Width   3.2
## 154     setosa  Sepal.Width   3.1
## 155     setosa  Sepal.Width   3.6
## 156     setosa  Sepal.Width   3.9
## 157     setosa  Sepal.Width   3.4
## 158     setosa  Sepal.Width   3.4
## 159     setosa  Sepal.Width   2.9
## 160     setosa  Sepal.Width   3.1
## 161     setosa  Sepal.Width   3.7
## 162     setosa  Sepal.Width   3.4
## 163     setosa  Sepal.Width   3.0
## 164     setosa  Sepal.Width   3.0
## 165     setosa  Sepal.Width   4.0
## 166     setosa  Sepal.Width   4.4
## 167     setosa  Sepal.Width   3.9
## 168     setosa  Sepal.Width   3.5
## 169     setosa  Sepal.Width   3.8
## 170     setosa  Sepal.Width   3.8
## 171     setosa  Sepal.Width   3.4
## 172     setosa  Sepal.Width   3.7
## 173     setosa  Sepal.Width   3.6
## 174     setosa  Sepal.Width   3.3
## 175     setosa  Sepal.Width   3.4
## 176     setosa  Sepal.Width   3.0
## 177     setosa  Sepal.Width   3.4
## 178     setosa  Sepal.Width   3.5
## 179     setosa  Sepal.Width   3.4
## 180     setosa  Sepal.Width   3.2
## 181     setosa  Sepal.Width   3.1
## 182     setosa  Sepal.Width   3.4
## 183     setosa  Sepal.Width   4.1
## 184     setosa  Sepal.Width   4.2
## 185     setosa  Sepal.Width   3.1
## 186     setosa  Sepal.Width   3.2
## 187     setosa  Sepal.Width   3.5
## 188     setosa  Sepal.Width   3.6
## 189     setosa  Sepal.Width   3.0
## 190     setosa  Sepal.Width   3.4
## 191     setosa  Sepal.Width   3.5
## 192     setosa  Sepal.Width   2.3
## 193     setosa  Sepal.Width   3.2
## 194     setosa  Sepal.Width   3.5
## 195     setosa  Sepal.Width   3.8
## 196     setosa  Sepal.Width   3.0
## 197     setosa  Sepal.Width   3.8
## 198     setosa  Sepal.Width   3.2
## 199     setosa  Sepal.Width   3.7
## 200     setosa  Sepal.Width   3.3
## 201 versicolor  Sepal.Width   3.2
## 202 versicolor  Sepal.Width   3.2
## 203 versicolor  Sepal.Width   3.1
## 204 versicolor  Sepal.Width   2.3
## 205 versicolor  Sepal.Width   2.8
## 206 versicolor  Sepal.Width   2.8
## 207 versicolor  Sepal.Width   3.3
## 208 versicolor  Sepal.Width   2.4
## 209 versicolor  Sepal.Width   2.9
## 210 versicolor  Sepal.Width   2.7
## 211 versicolor  Sepal.Width   2.0
## 212 versicolor  Sepal.Width   3.0
## 213 versicolor  Sepal.Width   2.2
## 214 versicolor  Sepal.Width   2.9
## 215 versicolor  Sepal.Width   2.9
## 216 versicolor  Sepal.Width   3.1
## 217 versicolor  Sepal.Width   3.0
## 218 versicolor  Sepal.Width   2.7
## 219 versicolor  Sepal.Width   2.2
## 220 versicolor  Sepal.Width   2.5
## 221 versicolor  Sepal.Width   3.2
## 222 versicolor  Sepal.Width   2.8
## 223 versicolor  Sepal.Width   2.5
## 224 versicolor  Sepal.Width   2.8
## 225 versicolor  Sepal.Width   2.9
## 226 versicolor  Sepal.Width   3.0
## 227 versicolor  Sepal.Width   2.8
## 228 versicolor  Sepal.Width   3.0
## 229 versicolor  Sepal.Width   2.9
## 230 versicolor  Sepal.Width   2.6
## 231 versicolor  Sepal.Width   2.4
## 232 versicolor  Sepal.Width   2.4
## 233 versicolor  Sepal.Width   2.7
## 234 versicolor  Sepal.Width   2.7
## 235 versicolor  Sepal.Width   3.0
## 236 versicolor  Sepal.Width   3.4
## 237 versicolor  Sepal.Width   3.1
## 238 versicolor  Sepal.Width   2.3
## 239 versicolor  Sepal.Width   3.0
## 240 versicolor  Sepal.Width   2.5
## 241 versicolor  Sepal.Width   2.6
## 242 versicolor  Sepal.Width   3.0
## 243 versicolor  Sepal.Width   2.6
## 244 versicolor  Sepal.Width   2.3
## 245 versicolor  Sepal.Width   2.7
## 246 versicolor  Sepal.Width   3.0
## 247 versicolor  Sepal.Width   2.9
## 248 versicolor  Sepal.Width   2.9
## 249 versicolor  Sepal.Width   2.5
## 250 versicolor  Sepal.Width   2.8
## 251  virginica  Sepal.Width   3.3
## 252  virginica  Sepal.Width   2.7
## 253  virginica  Sepal.Width   3.0
## 254  virginica  Sepal.Width   2.9
## 255  virginica  Sepal.Width   3.0
## 256  virginica  Sepal.Width   3.0
## 257  virginica  Sepal.Width   2.5
## 258  virginica  Sepal.Width   2.9
## 259  virginica  Sepal.Width   2.5
## 260  virginica  Sepal.Width   3.6
## 261  virginica  Sepal.Width   3.2
## 262  virginica  Sepal.Width   2.7
## 263  virginica  Sepal.Width   3.0
## 264  virginica  Sepal.Width   2.5
## 265  virginica  Sepal.Width   2.8
## 266  virginica  Sepal.Width   3.2
## 267  virginica  Sepal.Width   3.0
## 268  virginica  Sepal.Width   3.8
## 269  virginica  Sepal.Width   2.6
## 270  virginica  Sepal.Width   2.2
## 271  virginica  Sepal.Width   3.2
## 272  virginica  Sepal.Width   2.8
## 273  virginica  Sepal.Width   2.8
## 274  virginica  Sepal.Width   2.7
## 275  virginica  Sepal.Width   3.3
## 276  virginica  Sepal.Width   3.2
## 277  virginica  Sepal.Width   2.8
## 278  virginica  Sepal.Width   3.0
## 279  virginica  Sepal.Width   2.8
## 280  virginica  Sepal.Width   3.0
## 281  virginica  Sepal.Width   2.8
## 282  virginica  Sepal.Width   3.8
## 283  virginica  Sepal.Width   2.8
## 284  virginica  Sepal.Width   2.8
## 285  virginica  Sepal.Width   2.6
## 286  virginica  Sepal.Width   3.0
## 287  virginica  Sepal.Width   3.4
## 288  virginica  Sepal.Width   3.1
## 289  virginica  Sepal.Width   3.0
## 290  virginica  Sepal.Width   3.1
## 291  virginica  Sepal.Width   3.1
## 292  virginica  Sepal.Width   3.1
## 293  virginica  Sepal.Width   2.7
## 294  virginica  Sepal.Width   3.2
## 295  virginica  Sepal.Width   3.3
## 296  virginica  Sepal.Width   3.0
## 297  virginica  Sepal.Width   2.5
## 298  virginica  Sepal.Width   3.0
## 299  virginica  Sepal.Width   3.4
## 300  virginica  Sepal.Width   3.0
## 301     setosa Petal.Length   1.4
## 302     setosa Petal.Length   1.4
## 303     setosa Petal.Length   1.3
## 304     setosa Petal.Length   1.5
## 305     setosa Petal.Length   1.4
## 306     setosa Petal.Length   1.7
## 307     setosa Petal.Length   1.4
## 308     setosa Petal.Length   1.5
## 309     setosa Petal.Length   1.4
## 310     setosa Petal.Length   1.5
## 311     setosa Petal.Length   1.5
## 312     setosa Petal.Length   1.6
## 313     setosa Petal.Length   1.4
## 314     setosa Petal.Length   1.1
## 315     setosa Petal.Length   1.2
## 316     setosa Petal.Length   1.5
## 317     setosa Petal.Length   1.3
## 318     setosa Petal.Length   1.4
## 319     setosa Petal.Length   1.7
## 320     setosa Petal.Length   1.5
## 321     setosa Petal.Length   1.7
## 322     setosa Petal.Length   1.5
## 323     setosa Petal.Length   1.0
## 324     setosa Petal.Length   1.7
## 325     setosa Petal.Length   1.9
## 326     setosa Petal.Length   1.6
## 327     setosa Petal.Length   1.6
## 328     setosa Petal.Length   1.5
## 329     setosa Petal.Length   1.4
## 330     setosa Petal.Length   1.6
## 331     setosa Petal.Length   1.6
## 332     setosa Petal.Length   1.5
## 333     setosa Petal.Length   1.5
## 334     setosa Petal.Length   1.4
## 335     setosa Petal.Length   1.5
## 336     setosa Petal.Length   1.2
## 337     setosa Petal.Length   1.3
## 338     setosa Petal.Length   1.4
## 339     setosa Petal.Length   1.3
## 340     setosa Petal.Length   1.5
## 341     setosa Petal.Length   1.3
## 342     setosa Petal.Length   1.3
## 343     setosa Petal.Length   1.3
## 344     setosa Petal.Length   1.6
## 345     setosa Petal.Length   1.9
## 346     setosa Petal.Length   1.4
## 347     setosa Petal.Length   1.6
## 348     setosa Petal.Length   1.4
## 349     setosa Petal.Length   1.5
## 350     setosa Petal.Length   1.4
## 351 versicolor Petal.Length   4.7
## 352 versicolor Petal.Length   4.5
## 353 versicolor Petal.Length   4.9
## 354 versicolor Petal.Length   4.0
## 355 versicolor Petal.Length   4.6
## 356 versicolor Petal.Length   4.5
## 357 versicolor Petal.Length   4.7
## 358 versicolor Petal.Length   3.3
## 359 versicolor Petal.Length   4.6
## 360 versicolor Petal.Length   3.9
## 361 versicolor Petal.Length   3.5
## 362 versicolor Petal.Length   4.2
## 363 versicolor Petal.Length   4.0
## 364 versicolor Petal.Length   4.7
## 365 versicolor Petal.Length   3.6
## 366 versicolor Petal.Length   4.4
## 367 versicolor Petal.Length   4.5
## 368 versicolor Petal.Length   4.1
## 369 versicolor Petal.Length   4.5
## 370 versicolor Petal.Length   3.9
## 371 versicolor Petal.Length   4.8
## 372 versicolor Petal.Length   4.0
## 373 versicolor Petal.Length   4.9
## 374 versicolor Petal.Length   4.7
## 375 versicolor Petal.Length   4.3
## 376 versicolor Petal.Length   4.4
## 377 versicolor Petal.Length   4.8
## 378 versicolor Petal.Length   5.0
## 379 versicolor Petal.Length   4.5
## 380 versicolor Petal.Length   3.5
## 381 versicolor Petal.Length   3.8
## 382 versicolor Petal.Length   3.7
## 383 versicolor Petal.Length   3.9
## 384 versicolor Petal.Length   5.1
## 385 versicolor Petal.Length   4.5
## 386 versicolor Petal.Length   4.5
## 387 versicolor Petal.Length   4.7
## 388 versicolor Petal.Length   4.4
## 389 versicolor Petal.Length   4.1
## 390 versicolor Petal.Length   4.0
## 391 versicolor Petal.Length   4.4
## 392 versicolor Petal.Length   4.6
## 393 versicolor Petal.Length   4.0
## 394 versicolor Petal.Length   3.3
## 395 versicolor Petal.Length   4.2
## 396 versicolor Petal.Length   4.2
## 397 versicolor Petal.Length   4.2
## 398 versicolor Petal.Length   4.3
## 399 versicolor Petal.Length   3.0
## 400 versicolor Petal.Length   4.1
## 401  virginica Petal.Length   6.0
## 402  virginica Petal.Length   5.1
## 403  virginica Petal.Length   5.9
## 404  virginica Petal.Length   5.6
## 405  virginica Petal.Length   5.8
## 406  virginica Petal.Length   6.6
## 407  virginica Petal.Length   4.5
## 408  virginica Petal.Length   6.3
## 409  virginica Petal.Length   5.8
## 410  virginica Petal.Length   6.1
## 411  virginica Petal.Length   5.1
## 412  virginica Petal.Length   5.3
## 413  virginica Petal.Length   5.5
## 414  virginica Petal.Length   5.0
## 415  virginica Petal.Length   5.1
## 416  virginica Petal.Length   5.3
## 417  virginica Petal.Length   5.5
## 418  virginica Petal.Length   6.7
## 419  virginica Petal.Length   6.9
## 420  virginica Petal.Length   5.0
## 421  virginica Petal.Length   5.7
## 422  virginica Petal.Length   4.9
## 423  virginica Petal.Length   6.7
## 424  virginica Petal.Length   4.9
## 425  virginica Petal.Length   5.7
## 426  virginica Petal.Length   6.0
## 427  virginica Petal.Length   4.8
## 428  virginica Petal.Length   4.9
## 429  virginica Petal.Length   5.6
## 430  virginica Petal.Length   5.8
## 431  virginica Petal.Length   6.1
## 432  virginica Petal.Length   6.4
## 433  virginica Petal.Length   5.6
## 434  virginica Petal.Length   5.1
## 435  virginica Petal.Length   5.6
## 436  virginica Petal.Length   6.1
## 437  virginica Petal.Length   5.6
## 438  virginica Petal.Length   5.5
## 439  virginica Petal.Length   4.8
## 440  virginica Petal.Length   5.4
## 441  virginica Petal.Length   5.6
## 442  virginica Petal.Length   5.1
## 443  virginica Petal.Length   5.1
## 444  virginica Petal.Length   5.9
## 445  virginica Petal.Length   5.7
## 446  virginica Petal.Length   5.2
## 447  virginica Petal.Length   5.0
## 448  virginica Petal.Length   5.2
## 449  virginica Petal.Length   5.4
## 450  virginica Petal.Length   5.1
## 451     setosa  Petal.Width   0.2
## 452     setosa  Petal.Width   0.2
## 453     setosa  Petal.Width   0.2
## 454     setosa  Petal.Width   0.2
## 455     setosa  Petal.Width   0.2
## 456     setosa  Petal.Width   0.4
## 457     setosa  Petal.Width   0.3
## 458     setosa  Petal.Width   0.2
## 459     setosa  Petal.Width   0.2
## 460     setosa  Petal.Width   0.1
## 461     setosa  Petal.Width   0.2
## 462     setosa  Petal.Width   0.2
## 463     setosa  Petal.Width   0.1
## 464     setosa  Petal.Width   0.1
## 465     setosa  Petal.Width   0.2
## 466     setosa  Petal.Width   0.4
## 467     setosa  Petal.Width   0.4
## 468     setosa  Petal.Width   0.3
## 469     setosa  Petal.Width   0.3
## 470     setosa  Petal.Width   0.3
## 471     setosa  Petal.Width   0.2
## 472     setosa  Petal.Width   0.4
## 473     setosa  Petal.Width   0.2
## 474     setosa  Petal.Width   0.5
## 475     setosa  Petal.Width   0.2
## 476     setosa  Petal.Width   0.2
## 477     setosa  Petal.Width   0.4
## 478     setosa  Petal.Width   0.2
## 479     setosa  Petal.Width   0.2
## 480     setosa  Petal.Width   0.2
## 481     setosa  Petal.Width   0.2
## 482     setosa  Petal.Width   0.4
## 483     setosa  Petal.Width   0.1
## 484     setosa  Petal.Width   0.2
## 485     setosa  Petal.Width   0.2
## 486     setosa  Petal.Width   0.2
## 487     setosa  Petal.Width   0.2
## 488     setosa  Petal.Width   0.1
## 489     setosa  Petal.Width   0.2
## 490     setosa  Petal.Width   0.2
## 491     setosa  Petal.Width   0.3
## 492     setosa  Petal.Width   0.3
## 493     setosa  Petal.Width   0.2
## 494     setosa  Petal.Width   0.6
## 495     setosa  Petal.Width   0.4
## 496     setosa  Petal.Width   0.3
## 497     setosa  Petal.Width   0.2
## 498     setosa  Petal.Width   0.2
## 499     setosa  Petal.Width   0.2
## 500     setosa  Petal.Width   0.2
## 501 versicolor  Petal.Width   1.4
## 502 versicolor  Petal.Width   1.5
## 503 versicolor  Petal.Width   1.5
## 504 versicolor  Petal.Width   1.3
## 505 versicolor  Petal.Width   1.5
## 506 versicolor  Petal.Width   1.3
## 507 versicolor  Petal.Width   1.6
## 508 versicolor  Petal.Width   1.0
## 509 versicolor  Petal.Width   1.3
## 510 versicolor  Petal.Width   1.4
## 511 versicolor  Petal.Width   1.0
## 512 versicolor  Petal.Width   1.5
## 513 versicolor  Petal.Width   1.0
## 514 versicolor  Petal.Width   1.4
## 515 versicolor  Petal.Width   1.3
## 516 versicolor  Petal.Width   1.4
## 517 versicolor  Petal.Width   1.5
## 518 versicolor  Petal.Width   1.0
## 519 versicolor  Petal.Width   1.5
## 520 versicolor  Petal.Width   1.1
## 521 versicolor  Petal.Width   1.8
## 522 versicolor  Petal.Width   1.3
## 523 versicolor  Petal.Width   1.5
## 524 versicolor  Petal.Width   1.2
## 525 versicolor  Petal.Width   1.3
## 526 versicolor  Petal.Width   1.4
## 527 versicolor  Petal.Width   1.4
## 528 versicolor  Petal.Width   1.7
## 529 versicolor  Petal.Width   1.5
## 530 versicolor  Petal.Width   1.0
## 531 versicolor  Petal.Width   1.1
## 532 versicolor  Petal.Width   1.0
## 533 versicolor  Petal.Width   1.2
## 534 versicolor  Petal.Width   1.6
## 535 versicolor  Petal.Width   1.5
## 536 versicolor  Petal.Width   1.6
## 537 versicolor  Petal.Width   1.5
## 538 versicolor  Petal.Width   1.3
## 539 versicolor  Petal.Width   1.3
## 540 versicolor  Petal.Width   1.3
## 541 versicolor  Petal.Width   1.2
## 542 versicolor  Petal.Width   1.4
## 543 versicolor  Petal.Width   1.2
## 544 versicolor  Petal.Width   1.0
## 545 versicolor  Petal.Width   1.3
## 546 versicolor  Petal.Width   1.2
## 547 versicolor  Petal.Width   1.3
## 548 versicolor  Petal.Width   1.3
## 549 versicolor  Petal.Width   1.1
## 550 versicolor  Petal.Width   1.3
## 551  virginica  Petal.Width   2.5
## 552  virginica  Petal.Width   1.9
## 553  virginica  Petal.Width   2.1
## 554  virginica  Petal.Width   1.8
## 555  virginica  Petal.Width   2.2
## 556  virginica  Petal.Width   2.1
## 557  virginica  Petal.Width   1.7
## 558  virginica  Petal.Width   1.8
## 559  virginica  Petal.Width   1.8
## 560  virginica  Petal.Width   2.5
## 561  virginica  Petal.Width   2.0
## 562  virginica  Petal.Width   1.9
## 563  virginica  Petal.Width   2.1
## 564  virginica  Petal.Width   2.0
## 565  virginica  Petal.Width   2.4
## 566  virginica  Petal.Width   2.3
## 567  virginica  Petal.Width   1.8
## 568  virginica  Petal.Width   2.2
## 569  virginica  Petal.Width   2.3
## 570  virginica  Petal.Width   1.5
## 571  virginica  Petal.Width   2.3
## 572  virginica  Petal.Width   2.0
## 573  virginica  Petal.Width   2.0
## 574  virginica  Petal.Width   1.8
## 575  virginica  Petal.Width   2.1
## 576  virginica  Petal.Width   1.8
## 577  virginica  Petal.Width   1.8
## 578  virginica  Petal.Width   1.8
## 579  virginica  Petal.Width   2.1
## 580  virginica  Petal.Width   1.6
## 581  virginica  Petal.Width   1.9
## 582  virginica  Petal.Width   2.0
## 583  virginica  Petal.Width   2.2
## 584  virginica  Petal.Width   1.5
## 585  virginica  Petal.Width   1.4
## 586  virginica  Petal.Width   2.3
## 587  virginica  Petal.Width   2.4
## 588  virginica  Petal.Width   1.8
## 589  virginica  Petal.Width   1.8
## 590  virginica  Petal.Width   2.1
## 591  virginica  Petal.Width   2.4
## 592  virginica  Petal.Width   2.3
## 593  virginica  Petal.Width   1.9
## 594  virginica  Petal.Width   2.3
## 595  virginica  Petal.Width   2.5
## 596  virginica  Petal.Width   2.3
## 597  virginica  Petal.Width   1.9
## 598  virginica  Petal.Width   2.0
## 599  virginica  Petal.Width   2.3
## 600  virginica  Petal.Width   1.8
kable(datos_tidy2 %>% group_by(Species, variable) %>% summarise(p_value_S = round(shapiro.test(valor)$p.value,4)))
## `summarise()` has grouped output by 'Species'. You can override using the
## `.groups` argument.
Species variable p_value_S
setosa Sepal.Length 0.4595
setosa Sepal.Width 0.2715
setosa Petal.Length 0.0548
setosa Petal.Width 0.0000
versicolor Sepal.Length 0.4647
versicolor Sepal.Width 0.3380
versicolor Petal.Length 0.1585
versicolor Petal.Width 0.0273
virginica Sepal.Length 0.2583
virginica Sepal.Width 0.1809
virginica Petal.Length 0.1098
virginica Petal.Width 0.0870

Se acepta normalidad excepto para setosa/petal.width y versicolor/petal.width

#OUTLIERS
#--------------------
library(MVN)
out2 <- mvn(data=iris[,-5], mvnTest ="hz", multivariateOutlierMethod = "quan")

royston_test2 <- mvn(data = iris[,-5], mvnTest = "royston", multivariatePlot = "qq")

royston_test2$multivariateNormality
##      Test        H      p value MVN
## 1 Royston 50.39667 3.098229e-11  NO

No se acepta la normalidad multivariante, debido a la presencia de atípicos.

hz_test2 <- mvn(data= iris[,-5], mvnTest ="hz")
hz_test2$multivariateNormality
##            Test       HZ p value MVN
## 1 Henze-Zirkler 2.336394       0  NO

Ambos test muestran evidencias significativas de falta de normalidad multivariante. El LDA tiene cierta robustez frente a la falta de normalidad multivariante, pero es importante tenerlo en cuenta en la conclusión del análisis.

library(biotools)
boxM(data=iris[,-5], grouping = iris[,5])
## 
##  Box's M-test for Homogeneity of Covariance Matrices
## 
## data:  iris[, -5]
## Chi-Sq (approx.) = 140.94, df = 20, p-value < 2.2e-16

Se rechaza H0 indicando que las matrices de varianza y covarianza son diferentes (tenemos problemas de heterocedasticidad).

El test Box’s M muestra evidencias de que la matriz de covarianza no es constante en todos los grupos, lo que a priori descartaría el método LDA en favor de QDA.

Sin embargo, como el test Box’s M es muy sensible a la falta de normalidad multivariante, con frecuencia resulta significativo, no porque la matriz de covarianza no sea constante sino por la falta de normalidad, cosa que ocurre para los datos de Iris. Por esta razón, se va a asumir que la matriz de covarianza sí es constante y que LDA puede alcanzar una buena precisión en la clasificación. En la evaluación del modelo se verá como de buena es esta aproximación. Además, en las conclusiones se debe explicar la asunción hecha.

library(MASS)
modelo_lda <- lda(Species ~Sepal.Width + Sepal.Length + Petal.Length + Petal.Width, data = iris)

modelo_lda
## Call:
## lda(Species ~ Sepal.Width + Sepal.Length + Petal.Length + Petal.Width, 
##     data = iris)
## 
## Prior probabilities of groups:
##     setosa versicolor  virginica 
##  0.3333333  0.3333333  0.3333333 
## 
## Group means:
##            Sepal.Width Sepal.Length Petal.Length Petal.Width
## setosa           3.428        5.006        1.462       0.246
## versicolor       2.770        5.936        4.260       1.326
## virginica        2.974        6.588        5.552       2.026
## 
## Coefficients of linear discriminants:
##                     LD1         LD2
## Sepal.Width   1.5344731 -2.16452123
## Sepal.Length  0.8293776 -0.02410215
## Petal.Length -2.2012117  0.93192121
## Petal.Width  -2.8104603 -2.83918785
## 
## Proportion of trace:
##    LD1    LD2 
## 0.9912 0.0088
predicciones2 <- predict(object = modelo_lda, newdata = iris[, -5])
table(iris$Species, predicciones2$class, dnn = c("Clase real", "Clase predicha"))
##             Clase predicha
## Clase real   setosa versicolor virginica
##   setosa         50          0         0
##   versicolor      0         48         2
##   virginica       0          1        49
fiabilidad = (50+48+49)/(50+0+0+0+48+2+0+1+49) * 100
paste("fiabilidad", fiabilidad, "%")
## [1] "fiabilidad 98 %"
training_error <- mean(iris$Species != predicciones2$class)*100
paste("training_error", training_error, "%")
## [1] "training_error 2 %"
library(klaR)
partimat(Species ~ Sepal.Width + Sepal.Length +Petal.Length + Petal.Width,
         data = iris, method = "lda", prec = 200, image.colors=c("lightblue", "pink", "green"),
         col.mean = "red")