Especies IRIS

Vista de los Datos

El presente documento es un análisis de la técnica de discriminantes sobre la base **Iris** de R.

Se quiere evaluar el tipo de especie de las flores, la cual se evaluaron las siguientes variables

  • Species: Tipo (Setosa, Versicolor, Virginica) (**Dependiente**)

  • Sepal.Length: Longitud del Sépalo.

  • Sepal.Width: Anchura del Sépalo.

  • Petal.Length: Longitud del Pétalo.

  • Petal.Width: Anchura del Pétalo.

Primeramente vems como están compuesto los tipos de especies.

table(iris$Species)

    setosa versicolor  virginica 
        50         50         50 

Se puede observar que de los 250 datos, 50 es de cada tipo. Ahora bien, el número de variables discriminantes viene dado por por \(p=4<(150-2)\).

Ausencia de Multicolinealidad

Las variables a estudiar deben de ser linealmente independiente, por lo cual, haremos un gráfico de relación:

cor=cor(iris[,c(1,2,3,4)])
corrplot(cor,type="upper",tl.col="black",tl.srt=45)

Lo cual tomaremos como variables descriminantes las variables Sepal.Width y Petal.Length, donde garantizamos la ausencia de multicolinealidad.

Normalidad Multivariante

Ahora bien, el siguiente supuesto es verificar si las variables seleccionadas siguen una distribución normal multivariante en los diferentes grupos, donde utilizamos la transformación \(1/x\).

iris.setosa = subset(iris,iris$Species=='setosa')
iris.versicolor = subset(iris,iris$Species=='versicolor')
iris.virginica = subset(iris,iris$Species=='virginica')

lillie.test(1/iris.setosa$Sepal.Width)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  1/iris.setosa$Sepal.Width
D = 0.13453, p-value = 0.0242
lillie.test(1/iris.setosa$Petal.Width)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  1/iris.setosa$Petal.Width
D = 0.35922, p-value < 2.2e-16
lillie.test(1/iris.versicolor$Sepal.Width)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  1/iris.versicolor$Sepal.Width
D = 0.15806, p-value = 0.003158
lillie.test(1/iris.versicolor$Petal.Width)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  1/iris.versicolor$Petal.Width
D = 0.20776, p-value = 1.114e-05
lillie.test(1/iris.virginica$Sepal.Width)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  1/iris.virginica$Sepal.Width
D = 0.15282, p-value = 0.005154
lillie.test(1/iris.virginica$Petal.Width)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  1/iris.virginica$Petal.Width
D = 0.13393, p-value = 0.02536

Podemos observar que en los diferentes grupos, la variable discriminante sigue una distribución normal, lo veremos gráficamente con qqplot.

qqnorm(1/iris.setosa$Sepal.Width,main="Sepal Width Setosa") 
qqline(1/iris.setosa$Sepal.Width,col="gray50")

qqnorm(1/iris.versicolor$Sepal.Width,main="Sepal Width versicolor") 
qqline(1/iris.versicolor$Sepal.Width,col="gray50")

qqnorm(1/iris.virginica$Sepal.Width,main="Sepal Width virginica") 
qqline(1/iris.virginica$Sepal.Width,col="gray50")

qqnorm(1/iris.setosa$Petal.Length,main="Petal.Length Setosa") 
qqline(1/iris.setosa$Petal.Length,col="gray50")

qqnorm(1/iris.versicolor$Petal.Length,main="Petal.Length versicolor") 
qqline(1/iris.versicolor$Petal.Length,col="gray50")

qqnorm(1/iris.virginica$Petal.Length,main="Petal.Length virginica") 
qqline(1/iris.virginica$Petal.Length,col="gray50")

Igualdad de Matrices de Varianzas-Covarianzas

El último supuesto que nos falta evaluar es la igualdad de matrices de varianzas-covarianzas.

boxM(cbind(Sepal.Width, Petal.Length) ~ Species, data=iris)

    Box's M-test for Homogeneity of Covariance Matrices

data:  Y
Chi-Sq (approx.) = 62.768, df = 6, p-value = 1.231e-11

Vemos que el valor p es muy pequeño, por lo cual se rechaza la hipótesis nula y se dice que tenemos que en un grupo es mas variable que otro, entonces no podemos utilizar el método lineal, no obstante, utilizaremos análisis discriminante cuadrático, ya que no se necesita verificar este supuesto.

Aplicación de la Técnica

Primeramente para aplicar la técnica, vamos a dividir los datos, una de entrenamiento y la otra de prueba. En el estudio de Machine Learning, se recomienda utilizar el 80% de los datos para la de entrenamiento y 20% para la prueba.

Para aplicar la técnica de análisis lineal en R se utiliza lda y para la cuadrática se utiliza qda, ambas de la librería MASS.

muestra=sample(1:nrow(iris),size=120)
entreno=iris[muestra,]
prueba=iris[-muestra,]
qda.entreno=qda(Species~Sepal.Width+Petal.Length,data=entreno)
qda.entreno
Call:
qda(Species ~ Sepal.Width + Petal.Length, data = entreno)

Prior probabilities of groups:
    setosa versicolor  virginica 
 0.3250000  0.3583333  0.3166667 

Group means:
           Sepal.Width Petal.Length
setosa        3.392308     1.446154
versicolor    2.793023     4.318605
virginica     2.992105     5.628947

Ahora bien, vamos a predecir utilizando la función predict, para determinar el porcentaje de acierto en cada grupo.

p.qda.entreno=predict(qda.entreno,entreno[,1:4])
m.qda.ent=table(entreno$Species,p.qda.entreno$class)
m.qda.ent
            
             setosa versicolor virginica
  setosa         39          0         0
  versicolor      0         41         2
  virginica       0          3        35
diag(prop.table(m.qda.ent,1))
    setosa versicolor  virginica 
 1.0000000  0.9534884  0.9210526 
sum(diag(prop.table(m.qda.ent)))
[1] 0.9583333

Podemos decir que el porcentaje de acierto para la especie de setosa es de 100%, versicolor 93.33%, de virginica 95.35%, de la cual es un acierto de 95.8% de la base de entrenamiento.

Ahora bien, utilizaremos la data de prueba para verificar esta eficacia.

p.qda.prueba=predict(qda.entreno,prueba[,1:4])
m.qda.pru=table(prueba$Species,p.qda.prueba$class)
m.qda.pru
            
             setosa versicolor virginica
  setosa         11          0         0
  versicolor      0          7         0
  virginica       0          2        10
diag(prop.table(m.qda.pru,1))
    setosa versicolor  virginica 
 1.0000000  1.0000000  0.8333333 
sum(diag(prop.table(m.qda.pru)))
[1] 0.9333333

Vemos que casi es similar con el anterior teniendo una eficacia de 100% para la setosa, 100% para la versicolor, 71.42% para la virginica y 93.33% en total.