library(moments)
library(corrplot)
## corrplot 0.84 loaded
library(ggplot2)
library(GGally)
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
library(fdth)
##
## Attaching package: 'fdth'
## The following objects are masked from 'package:stats':
##
## sd, var
vinos=read.csv(url("https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv"), sep=";")
Cuando realizamos una cata siempre tenemos en cuenta la fase visual, olfativa y gustativa; pero un vino tiene muchos más aspectos imperceptibles al ojo humano. Todos los procesos que suceden desde la viña a la copa, influyen de forma directa en la calidad final. PodrÃamos decir que hay varios indicadores fÃsico-quÃmicos. Entre ellos tenemos:
Densidad
Grado alcohólico
pH
Acidez volátil
En el estudio realizado también se darán a conocer otras variables que pueden ayudar a determinar la calidad de un vino.
Densidad: Es un parámetro que en cata se percibe como estructura del vino o espesor en boca. Como criterio de calidad consideramos como buenos vinos aquellos que son ligeros, pero con cuerpo.
Grado alcohólico: Entre 8 y 14 grados: es uno de los grados alcohólicos más habituales. Solo unos pocos caldos llegan a esos 15 grados máximos que mencionábamos antes.
pH: el PH de los vinos oscilará entre 2,8 y 4 según la variedad, además, hay que tener en cuenta que los niveles de PH del vino blanco son más bajos que los del vino tinto.
Acidez volátil: El volátil es fácilmente perceptible a partir de los 0,8 g/L o los 0,9 g/L, según la sensibilidad del catador.
Acidez citrica: Es poco abundante en la uva, de 150 a 300 mg/ litro de mosto. Después es fermentado por las bacterias lácticas y desaparece.
hist(vinos$fixed.acidity, xlab ="Acidez Fija",col = "green",main = "Histograma de la Acidez fija")
boxplot(vinos$fixed.acidity,col = "green",main="Diagrama de caja de Acidez Fija",horizontal = TRUE)
summary(vinos$fixed.acidity)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.60 7.10 7.90 8.32 9.20 15.90
sd(vinos$fixed.acidity)
## [1] 1.741096
kurtosis(vinos$fixed.acidity)
## [1] 4.124856
skewness(vinos$fixed.acidity)
## [1] 0.9818293
AF=fdt(vinos$fixed.acidity,breaks="Sturges")
AF
## Class limits f rf rf(%) cf cf(%)
## [4.554,5.5127) 29 0.02 1.81 29 1.81
## [5.5127,6.4715) 117 0.07 7.32 146 9.13
## [6.4715,7.4303) 428 0.27 26.77 574 35.90
## [7.4303,8.389) 395 0.25 24.70 969 60.60
## [8.389,9.3478) 256 0.16 16.01 1225 76.61
## [9.3478,10.306) 161 0.10 10.07 1386 86.68
## [10.306,11.265) 92 0.06 5.75 1478 92.43
## [11.265,12.224) 67 0.04 4.19 1545 96.62
## [12.224,13.183) 34 0.02 2.13 1579 98.75
## [13.183,14.142) 12 0.01 0.75 1591 99.50
## [14.142,15.1) 3 0.00 0.19 1594 99.69
## [15.1,16.059) 5 0.00 0.31 1599 100.00
hist(vinos$volatile.acidity,xlab = "Acidez Volatil",col="yellow",main="Histograma de la Acidez Volatil")
boxplot(vinos$volatile.acidity,col="yellow",main="Diagrama de caja de Acidez Volatil",horizontal = TRUE)
summary(vinos$volatile.acidity)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.1200 0.3900 0.5200 0.5278 0.6400 1.5800
sd(vinos$volatile.acidity)
## [1] 0.1790597
kurtosis(vinos$volatile.acidity)
## [1] 4.217963
skewness(vinos$volatile.acidity)
## [1] 0.6709624
AV=fdt(vinos$volatile.acidity,breaks="Sturges")
AV
## Class limits f rf rf(%) cf cf(%)
## [0.119,0.242) 50 0.03 3.13 50 3.13
## [0.242,0.365) 260 0.16 16.26 310 19.39
## [0.365,0.488) 368 0.23 23.01 678 42.40
## [0.488,0.611) 447 0.28 27.95 1125 70.36
## [0.611,0.734) 292 0.18 18.26 1417 88.62
## [0.734,0.857) 112 0.07 7.00 1529 95.62
## [0.857,0.98) 46 0.03 2.88 1575 98.50
## [0.98,1.1) 16 0.01 1.00 1591 99.50
## [1.1,1.23) 4 0.00 0.25 1595 99.75
## [1.23,1.35) 3 0.00 0.19 1598 99.94
## [1.35,1.47) 0 0.00 0.00 1598 99.94
## [1.47,1.6) 1 0.00 0.06 1599 100.00
hist(vinos$citric.acid,xlab = "Acidez Citrico",col="red",main = "Histograma de la Acidez Citrico")
boxplot(vinos$citric.acid,col="red",main = "Diagrama de caja de Acidez Citrico",horizontal = TRUE)
summary(vinos$citric.acid)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 0.090 0.260 0.271 0.420 1.000
sd(vinos$citric.acid)
## [1] 0.1948011
kurtosis(vinos$citric.acid)
## [1] 2.209717
skewness(vinos$citric.acid)
## [1] 0.3180386
AC=fdt(vinos$citric.acid,breaks="Sturges")
AC
## Class limits f rf rf(%) cf cf(%)
## [0,0.08417) 373 0.23 23.33 373 23.33
## [0.08417,0.1683) 174 0.11 10.88 547 34.21
## [0.1683,0.2525) 247 0.15 15.45 794 49.66
## [0.2525,0.3367) 215 0.13 13.45 1009 63.10
## [0.3367,0.4208) 192 0.12 12.01 1201 75.11
## [0.4208,0.505) 208 0.13 13.01 1409 88.12
## [0.505,0.5892) 95 0.06 5.94 1504 94.06
## [0.5892,0.6733) 62 0.04 3.88 1566 97.94
## [0.6733,0.7575) 27 0.02 1.69 1593 99.62
## [0.7575,0.8417) 5 0.00 0.31 1598 99.94
## [0.8417,0.9258) 0 0.00 0.00 1598 99.94
## [0.9258,1.01) 1 0.00 0.06 1599 100.00
hist(vinos$chlorides,xlab = "Cloruros",col="sky blue",main = "Histograma de los Cloruros")
boxplot(vinos$chlorides,col="sky blue",main = "Diagrama de caja de los Cloruros",horizontal = TRUE)
summary(vinos$chlorides)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.01200 0.07000 0.07900 0.08747 0.09000 0.61100
sd(vinos$chlorides)
## [1] 0.0470653
kurtosis(vinos$chlorides)
## [1] 44.58171
skewness(vinos$chlorides)
## [1] 5.675017
C=fdt(vinos$chlorides,breaks="Sturges")
C
## Class limits f rf rf(%) cf cf(%)
## [0.01188,0.06232) 200 0.13 12.51 200 12.51
## [0.06232,0.1128) 1262 0.79 78.92 1462 91.43
## [0.1128,0.1632) 78 0.05 4.88 1540 96.31
## [0.1632,0.2136) 21 0.01 1.31 1561 97.62
## [0.2136,0.2641) 14 0.01 0.88 1575 98.50
## [0.2641,0.3145) 2 0.00 0.13 1577 98.62
## [0.3145,0.3649) 6 0.00 0.38 1583 99.00
## [0.3649,0.4154) 11 0.01 0.69 1594 99.69
## [0.4154,0.4658) 2 0.00 0.13 1596 99.81
## [0.4658,0.5162) 1 0.00 0.06 1597 99.87
## [0.5162,0.5667) 0 0.00 0.00 1597 99.87
## [0.5667,0.6171) 2 0.00 0.13 1599 100.00
hist(vinos$free.sulfur.dioxide,xlab="Dióxido de azufre libre",main="Histograma de Dióxido de azufre libre",col="purple")
boxplot(vinos$free.sulfur.dioxide,main="Diagrama de caja de Dióxido de azufre libre",col="purple",horizontal=TRUE)
summary(vinos$free.sulfur.dioxide)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 7.00 14.00 15.87 21.00 72.00
sd(vinos$free.sulfur.dioxide)
## [1] 10.46016
kurtosis(vinos$free.sulfur.dioxide)
## [1] 5.01349
skewness(vinos$free.sulfur.dioxide)
## [1] 1.249394
FS=fdt(vinos$free.sulfur.dioxide,breaks = "Sturges")
FS
## Class limits f rf rf(%) cf cf(%)
## [0.99,6.9675) 337 0.21 21.08 337 21.08
## [6.9675,12.945) 402 0.25 25.14 739 46.22
## [12.945,18.922) 352 0.22 22.01 1091 68.23
## [18.922,24.9) 198 0.12 12.38 1289 80.61
## [24.9,30.877) 147 0.09 9.19 1436 89.81
## [30.877,36.855) 97 0.06 6.07 1533 95.87
## [36.855,42.833) 36 0.02 2.25 1569 98.12
## [42.833,48.81) 12 0.01 0.75 1581 98.87
## [48.81,54.788) 11 0.01 0.69 1592 99.56
## [54.788,60.765) 3 0.00 0.19 1595 99.75
## [60.765,66.742) 1 0.00 0.06 1596 99.81
## [66.742,72.72) 3 0.00 0.19 1599 100.00
hist(vinos$total.sulfur.dioxide,xlab = "Total de Dióxido de azufre",col="brown",main = "Histograma del Total de Dióxido de azufre")
boxplot(vinos$total.sulfur.dioxide, col="brown",main = "Diagrama de caja del Total de Dióxido de azufre",horizontal = TRUE)
summary(vinos$total.sulfur.dioxide)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 6.00 22.00 38.00 46.47 62.00 289.00
sd(vinos$total.sulfur.dioxide)
## [1] 32.89532
kurtosis(vinos$total.sulfur.dioxide)
## [1] 6.794172
skewness(vinos$total.sulfur.dioxide)
## [1] 1.514109
TS=fdt(vinos$total.sulfur.dioxide,breaks="Sturges")
TS
## Class limits f rf rf(%) cf cf(%)
## [5.94,29.7692) 627 0.39 39.21 627 39.21
## [29.7692,53.5983) 466 0.29 29.14 1093 68.36
## [53.5983,77.4275) 243 0.15 15.20 1336 83.55
## [77.4275,101.257) 140 0.09 8.76 1476 92.31
## [101.257,125.086) 73 0.05 4.57 1549 96.87
## [125.086,148.915) 40 0.03 2.50 1589 99.37
## [148.915,172.744) 8 0.01 0.50 1597 99.87
## [172.744,196.573) 0 0.00 0.00 1597 99.87
## [196.573,220.402) 0 0.00 0.00 1597 99.87
## [220.402,244.232) 0 0.00 0.00 1597 99.87
## [244.232,268.061) 0 0.00 0.00 1597 99.87
## [268.061,291.89) 2 0.00 0.13 1599 100.00
hist(vinos$density,xlab="Densidad",col="orange",main="Histograma de Densidad")
boxplot(vinos$density,col="orange",main="Diagrama de caja de Densidad",horizontal = TRUE)
summary(vinos$density)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.9901 0.9956 0.9968 0.9967 0.9978 1.0037
sd(vinos$density)
## [1] 0.001887334
kurtosis(vinos$density)
## [1] 3.927411
skewness(vinos$density)
## [1] 0.07122077
D=fdt(vinos$density,breaks="Sturges")
D
## Class limits f rf rf(%) cf cf(%)
## [0.9802,0.983) 0 0.00 0.00 0 0.00
## [0.983,0.9858) 0 0.00 0.00 0 0.00
## [0.9858,0.9886) 0 0.00 0.00 0 0.00
## [0.9886,0.9914) 8 0.01 0.50 8 0.50
## [0.9914,0.9942) 117 0.07 7.32 125 7.82
## [0.9942,0.9969) 768 0.48 48.03 893 55.85
## [0.9969,0.9997) 612 0.38 38.27 1505 94.12
## [0.9997,1.003) 85 0.05 5.32 1590 99.44
## [1.003,1.005) 9 0.01 0.56 1599 100.00
## [1.005,1.008) 0 0.00 0.00 1599 100.00
## [1.008,1.011) 0 0.00 0.00 1599 100.00
## [1.011,1.014) 0 0.00 0.00 1599 100.00
hist(vinos$sulphates,xlab = "Sulfatos",col="blue",main="Histograma de Sulfatos")
boxplot(vinos$sulphates,col="blue",main="Diagrama de caja de Sulfatos",horizontal = TRUE)
summary(vinos$sulphates)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.3300 0.5500 0.6200 0.6581 0.7300 2.0000
sd(vinos$sulphates)
## [1] 0.169507
kurtosis(vinos$sulphates)
## [1] 14.67988
skewness(vinos$sulphates)
## [1] 2.426393
S=fdt(vinos$sulphates,breaks="Sturges")
S
## Class limits f rf rf(%) cf cf(%)
## [0.3267,0.4678) 72 0.05 4.50 72 4.50
## [0.4678,0.6089) 651 0.41 40.71 723 45.22
## [0.6089,0.75) 536 0.34 33.52 1259 78.74
## [0.75,0.8911) 230 0.14 14.38 1489 93.12
## [0.8911,1.032) 58 0.04 3.63 1547 96.75
## [1.032,1.173) 30 0.02 1.88 1577 98.62
## [1.173,1.314) 9 0.01 0.56 1586 99.19
## [1.314,1.456) 5 0.00 0.31 1591 99.50
## [1.456,1.597) 2 0.00 0.13 1593 99.62
## [1.597,1.738) 2 0.00 0.13 1595 99.75
## [1.738,1.879) 0 0.00 0.00 1595 99.75
## [1.879,2.02) 4 0.00 0.25 1599 100.00
#Con los datos obtenidos e investigados podemos proceder a designarle sus respectivas cualidades a cada uno de los datos de las variables cualitativas.
vinos=data.frame(vinos,cut(vinos$pH,breaks=c(2.7,3.1,3.6,4.1),
labels=c("bajo","normal","alto")))
vinos=data.frame(vinos,cut(vinos$residual.sugar,breaks=c(0,4,12,45),
labels=c("secos","semisecos","semidulces")))
vinos=data.frame(vinos,cut(vinos$alcohol,breaks=c(8,11,13,15),
labels=c("bajo","estandar","alto")))
vinos=data.frame(vinos,cut(vinos$quality,breaks=c(0,4,5,6,7,10),
labels = c("Malo","Promedio","Promedio","Bueno","Bueno")))
#Renombramos los nombres de los nuevos datos que creamos anteriromente.
names(vinos)[13]="escala pH"
names(vinos)[14]="sabor"
names(vinos)[15]="nivel de alcohol"
names(vinos)[16]="Calidad del vino"
#Se hace un pequeña tabla de frecuencia de cada varible cualitativa con el fin de obtener la frecuencia.
tabla_PH<-as.data.frame(table(vinos$`escala pH`))
tabla_Sabor<-as.data.frame(table(vinos$sabor))
tabla_Alcohol<-as.data.frame(table(vinos$`nivel de alcohol`))
tabla_Calidad<-as.data.frame(table(vinos$`Calidad del vino`))
tabla_PH
## Var1 Freq
## 1 bajo 134
## 2 normal 1417
## 3 alto 48
tabla_Sabor
## Var1 Freq
## 1 secos 1474
## 2 semisecos 117
## 3 semidulces 8
tabla_Alcohol
## Var1 Freq
## 1 bajo 1191
## 2 estandar 385
## 3 alto 23
tabla_Calidad
## Var1 Freq
## 1 Malo 63
## 2 Promedio 1319
## 3 Bueno 217
ph<-c(134,1417,48)
variab<-c("bajo","normal","alto")
sabor<-c(1474,117,8)
Eti_sabor<-c("secos","semisecos","semidulces")
niv_alcohol<-c(1191,385,23)
Eti_nivAl<-c("bajo","estandar","alto")
calif<-c(63,1319,217)
Eti_calif<-c("Malo","Promedio","Bueno")
barplot(ph,names.arg = variab,main="Nivel de pH",col=rainbow(length(variab)))
barplot(sabor,names.arg = Eti_sabor,main="Clasificacion segun el azucar residual",col=rainbow(3))
barplot(niv_alcohol,names.arg = Eti_nivAl,main="Nivel de alcohol",col=rainbow(3))
Analizando la calidad del Vino observamos que tiene un rango discreto de solo 3-8, podemos ver aproximadamente que hay cierta cantidad de distribución normal. Una gran mayorÃa de los vinos examinados recibieron calificaciones de 5 o 6, y muy pocos recibieron 3, 4 u 8. No hay mucho más que podamos con esos datos y poder hacer un histograma, ya que tanto la disminución como el aumento del tamaño de los contenedores distorsionarÃan los datos.
Dadas las calificaciones y la distribución de la calidad del vino, instanciaremos otra variable categórica, clasificando los vinos como ‘malos’ (calificación de 0 a 4), ‘promedio’ (calificación de 5 o 6) y ‘buenos’ (calificación de 7 a 10) .
barplot(calif,names.arg = Eti_calif,main="Calidad",col=rainbow(length(Eti_calif)))
pie(table(vinos$`escala pH`),main="Nivel de pH",col=rainbow(3))
pie(table(vinos$sabor),main="Clasificacion segun el azucar residual",col=rainbow(3))
pie(table(vinos$`nivel de alcohol`),main="Nivel de alcohol",col=rainbow(3))
pie(table(vinos$`Calidad del vino`),main="Calidad",col=rainbow(6))
boxplot(vinos$fixed.acidity~vinos$`Calidad del vino`,xlab = "Calidad",ylab = "Acidez Fija",col="green",main="Calidad vs Acidez Fija")
boxplot(vinos$volatile.acidity~vinos$`Calidad del vino`,xlab = "Calidad",ylab = "Acidez Volatil",col="yellow",main="Calidad vs Acidez Volatil")
boxplot(vinos$citric.acid~vinos$`Calidad del vino`,xlab = "Calidad", ylab = "Acidez citrica",col="red",main ="Calidad vs Acidez Citrica")
boxplot(vinos$chlorides~vinos$`Calidad del vino`,xlab = "Calidad", ylab = "Cloruros",col="black",main ="Calidad vs Cloruros")
boxplot(vinos$free.sulfur.dioxide~vinos$`Calidad del vino`,xlab = "Calidad", ylab = "Dioxido de azufre libre",col="purple",main ="Calidad vs Dióxido de azufre libre")
boxplot(vinos$total.sulfur.dioxide~vinos$`Calidad del vino`,xlab = "Calidad", ylab = "Total de Total Dióxido de azufre",col="brown",main ="Calidad vs Total de Total Dióxido de azufre")
boxplot(vinos$density~vinos$`Calidad del vino`,xlab="calidad",ylab = "Densidad",col="orange",main="Calidad vs Densidad")
boxplot(vinos$sulphates~vinos$`Calidad del vino`,xlab = "Calidad",ylab = "Sulfatos",col="blue",main="Calidad vs Sulfatos")
matriz_corr=cor(vinos[,c(1,2,3,5,6,7,8,10)])
matriz_corr
## fixed.acidity volatile.acidity citric.acid chlorides
## fixed.acidity 1.00000000 -0.25613089 0.67170343 0.093705186
## volatile.acidity -0.25613089 1.00000000 -0.55249568 0.061297772
## citric.acid 0.67170343 -0.55249568 1.00000000 0.203822914
## chlorides 0.09370519 0.06129777 0.20382291 1.000000000
## free.sulfur.dioxide -0.15379419 -0.01050383 -0.06097813 0.005562147
## total.sulfur.dioxide -0.11318144 0.07647000 0.03553302 0.047400468
## density 0.66804729 0.02202623 0.36494718 0.200632327
## sulphates 0.18300566 -0.26098669 0.31277004 0.371260481
## free.sulfur.dioxide total.sulfur.dioxide density
## fixed.acidity -0.153794193 -0.11318144 0.66804729
## volatile.acidity -0.010503827 0.07647000 0.02202623
## citric.acid -0.060978129 0.03553302 0.36494718
## chlorides 0.005562147 0.04740047 0.20063233
## free.sulfur.dioxide 1.000000000 0.66766645 -0.02194583
## total.sulfur.dioxide 0.667666450 1.00000000 0.07126948
## density -0.021945831 0.07126948 1.00000000
## sulphates 0.051657572 0.04294684 0.14850641
## sulphates
## fixed.acidity 0.18300566
## volatile.acidity -0.26098669
## citric.acid 0.31277004
## chlorides 0.37126048
## free.sulfur.dioxide 0.05165757
## total.sulfur.dioxide 0.04294684
## density 0.14850641
## sulphates 1.00000000
matriz_covar=cov(vinos[,c(1,2,3,5,6,7,8,10)])
matriz_covar
## fixed.acidity volatile.acidity citric.acid chlorides
## fixed.acidity 3.031416389 -7.985142e-02 0.2278200037 7.678692e-03
## volatile.acidity -0.079851417 3.206238e-02 -0.0192716208 5.165869e-04
## citric.acid 0.227820004 -1.927162e-02 0.0379474831 1.868725e-03
## chlorides 0.007678692 5.165869e-04 0.0018687248 2.215143e-03
## free.sulfur.dioxide -2.800921493 -1.967359e-02 -0.1242521139 2.738303e-03
## total.sulfur.dioxide -6.482345858 4.504257e-01 0.2276972740 7.338675e-02
## density 0.002195224 7.443665e-06 0.0001341746 1.782176e-05
## sulphates 0.054010092 -7.921434e-03 0.0103277145 2.961878e-03
## free.sulfur.dioxide total.sulfur.dioxide density
## fixed.acidity -2.800921e+00 -6.482346e+00 2.195224e-03
## volatile.acidity -1.967359e-02 4.504257e-01 7.443665e-06
## citric.acid -1.242521e-01 2.276973e-01 1.341746e-04
## chlorides 2.738303e-03 7.338675e-02 1.782176e-05
## free.sulfur.dioxide 1.094149e+02 2.297375e+02 -4.332504e-04
## total.sulfur.dioxide 2.297375e+02 1.082102e+03 4.424727e-03
## density -4.332504e-04 4.424727e-03 3.562029e-06
## sulphates 9.159247e-02 2.394710e-01 4.750962e-05
## sulphates
## fixed.acidity 5.401009e-02
## volatile.acidity -7.921434e-03
## citric.acid 1.032771e-02
## chlorides 2.961878e-03
## free.sulfur.dioxide 9.159247e-02
## total.sulfur.dioxide 2.394710e-01
## density 4.750962e-05
## sulphates 2.873262e-02
data=cor(vinos[,c(1,2,3,5,6,7,8,10)])
corrplot.mixed(data,lower = "circle",upper = "number")
##MATRIZ DE DIAGRAMAS DE DISPERSION
plot(vinos[,c(1,2,3,5,6,7,8,10)])