Tipos de Aguacates

Vista de los Datos

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

Se quiere clasificar que tipo de aguacates pertenecen, para lo cual se evaluaron las siguientes variables

  • Type: Tipo (Orgánico,Convencional) (**Dependiente**)

  • Total.Volume: Número total de aguacates vendidos

  • X4046: Número total de aguacates con PLU 4046 vendidos

  • X4225: Número total de aguacates con PLU 4225 vendidos

  • X4770: Número total de aguacates con PLU 4770 vendidos

  • Total.Bags: Número total de Bolsas vendidas

  • Small.Bags: Número total de Bolsas pequeñas vendidas

  • Large.Bags: Número total de Bolsas grandes vendidas

  • XLarge.Bags: Número total de Bolsas muy grandes vendidas

  • AveragePrice: El precio medio de aguacates

Primeramente vems como están compuesto tipos de aguacates

table(avocado$type)

conventional      organic 
        9126         9123 

Se puede observar que de los 18249 datos, 9126 son convencionales y 9123 son orgánicos. Ahora bien, el número de variables discriminantes viene dado por por \(p=10<(18249-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(avocado[,1:9])
corrplot(cor,type="upper",tl.col="black",tl.srt=45)

Normalidad Multivariante

Ahora bien, el siguiente supuesto es verificar si las variables seleccionadas siguen una distribución normal multivariante.

avocado.organico = subset(avocado,avocado$type=='organic')
avocado.convencional = subset(avocado,avocado$type=='conventional')

lillie.test(avocado.organico$AveragePrice) 

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  avocado.organico$AveragePrice
D = 0.042489, p-value < 2.2e-16
lillie.test(avocado.convencional$AveragePrice)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  avocado.convencional$AveragePrice
D = 0.057243, p-value < 2.2e-16

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

qqnorm(avocado.organico$AveragePrice,main="Precio Promedio Orgánico") 
qqline(avocado.organico$AveragePrice,col="gray50")

qqnorm(avocado.convencional$AveragePrice,,main="Precio Promedio Orgánico") 
qqline(avocado.convencional$AveragePrice,col="gray50")

Igualdad de Matrices de Varianzas-Covarianzas

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

bartlett.test(AveragePrice~type,data=avocado)

    Bartlett test of homogeneity of variances

data:  AveragePrice by type
Bartlett's K-squared = 938.43, df = 1, p-value < 2.2e-16

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(avocado),size=14600)
entreno=avocado[muestra,]
prueba=avocado[-muestra,]
qda.entreno=qda(type~AveragePrice,data=entreno)
qda.entreno
Call:
qda(type ~ AveragePrice, data = entreno)

Prior probabilities of groups:
conventional      organic 
   0.4989041    0.5010959 

Group means:
             AveragePrice
conventional     1.157153
organic          1.654759

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:9])
m.qda.ent=table(entreno$type,p.qda.entreno$class)
m.qda.ent
              
               conventional organic
  conventional         6140    1144
  organic              1825    5491
diag(prop.table(m.qda.ent,1))
conventional      organic 
   0.8429434    0.7505467 
sum(diag(prop.table(m.qda.ent)))
[1] 0.7966438

Podemos decir que el porcentaje de acierto para el tipo convencional es de 84.32% y del orgánico es de 74.42%, de la cual es un acierto de 79.35% de la base de entrenamiento.

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

p.qda.prueba=predict(qda.entreno,prueba[,1:9])
m.qda.pru=table(prueba$type,p.qda.prueba$class)
m.qda.pru
              
               conventional organic
  conventional         1536     306
  organic               477    1330
diag(prop.table(m.qda.pru,1))
conventional      organic 
   0.8338762    0.7360266 
sum(diag(prop.table(m.qda.pru)))
[1] 0.7854207

Vemos que casi es similar con el anterior teniendo una eficacia de 83.06% para la convencional, 75.05% para el orgánico y 79.06% en total.