Vinos 2021, an谩lisis descriptivo

code
analysis
Author

FV

Published

June 3, 2024

El objetivo es extraer informaci贸n 煤til a partir de un an谩lisis estad铆stico para este marco de datos.

El archivo VINOS.csv recopila datos sobre el precio de venta y otras caracter铆sticas de una muestra aleatoria de 6496 tipos diferentes de vinos de la D.O de Utiel-Requena, Comunidad Valenciana, Espa帽a.

1.- Calidad del vino

Se cargan las librer铆as:

library(dplyr)
library(ggplot2)
library(nortest)
library(showtext)

Se cargan las fuentes de texto:

font_add_google("Luckiest Guy","ramp")
font_add_google("Bebas Neue","beb")
font_add_google("Fira Sans","fira")
font_add_google("Raleway","ral")
font_add_google("Bitter","bit")
showtext_auto()

Se carga la base de datos:

vinos <- read.csv2("VINOS.csv")

Se verifica previamente la informaci贸n b谩sica de los datos (tipo de variables y la dimensi贸n):

str(vinos)
'data.frame':   5112 obs. of  8 variables:
 $ X        : int  1 2 3 4 5 6 7 8 9 10 ...
 $ Tipo     : chr  "Tinto" "Tinto" "Tinto" "Tinto" ...
 $ pH       : num  3.51 3.2 3.26 3.16 3.51 3.51 3.3 3.39 3.36 3.35 ...
 $ Sulfatos : num  0.56 0.68 0.65 0.58 0.56 0.56 0.46 0.47 0.57 0.8 ...
 $ Alcohol  : num  9.4 9.8 9.8 9.8 9.4 9.4 9.4 10 9.5 10.5 ...
 $ Tonalidad: chr  "Azulado" "Azulado" "Azulado" "Azulado" ...
 $ Calidad  : int  5 5 5 6 5 5 5 7 7 5 ...
 $ Precio   : num  3.5 2.01 3.27 3.46 2.14 3.36 3.18 5.82 5.32 3.89 ...
  • PH, Sulfatos, Alcohol, Tobalidad y Precio, son variables numericas.
  • X y Calidad son variables de tipo entero.
  • Tipo, variable de tipo char.

Se ejecuta la instrucci贸n 鈥渟ummary鈥 para conocer algunos valores estad铆sticos:

summary(vinos$Calidad)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   3.00    5.00    6.00    5.75    6.00    9.00 

Se traza un gr谩fico de barras:

  ggplot(vinos, aes(x=Calidad, fill=Tonalidad)) +
  geom_histogram(bins = 8,  colour='white', size=.1) +
  ggtitle("Gr谩fico de barras: Vinos-Calidad") +
    scale_fill_manual(values=c("#304bae", "#f5f7c0","#ab2a3e", "#c9af4f","#c85c5c", "#61b15b"))+
  theme(
    text = element_text(family = "fira"),
    panel.grid = element_blank(),
    plot.title = element_text(size = 16, colour = "gray20", face="bold"),
    axis.text.y = element_text(size = 10, colour = "gray20"),
    axis.title.x = element_text(size = 10, colour = "gray20"),
    axis.title.y = element_text(size = 10, colour = "gray20"),
    panel.background = element_rect(fill = 'white', color = 'white')
  )

Entre los valores 5 y 6 se encuentra la mayor concentraci贸n de la calidad de los vinos, con una mediana de 6 y con frecuencias superior a 1500.

Tabla de frecuencias (Calidad de vinos):

calidad <- vinos$Calidad
calidad <- table(calidad)
calidad
calidad
   3    4    5    6    7    8    9 
  22  176 1849 2204  737  119    5 

Se seleccionan las variables Tipo y Calidad en un marco de datos de nombre calidad_t con la finalidad de hacer una tabla de frecuencias usando la funci贸n table().

calidad_t <- select(vinos, Tipo, Calidad)
calidad_t <- table(calidad_t)
calidad_t <- as.data.frame(calidad_t)
calidad_t
     Tipo Calidad Freq
1  Blanco       3   12
2   Tinto       3   10
3  Blanco       4  125
4   Tinto       4   51
5  Blanco       5 1180
6   Tinto       5  669
7  Blanco       6 1639
8   Tinto       6  565
9  Blanco       7  604
10  Tinto       7  133
11 Blanco       8  110
12  Tinto       8    9
13 Blanco       9    5
14  Tinto       9    0

Se seleccionan las variables Tonalidad y Calidad en un marco de datos de nombre calidad_tt con la finalidad de obtener otra tabla de frecuencias.

calidad_tt <- select(vinos, Tonalidad, Calidad)
calidad_tt <- table(calidad_tt)
calidad_tt <- as.data.frame(calidad_tt)
head(calidad_tt, 10)
   Tonalidad Calidad Freq
1    Azulado       3    6
2     Dorado       3    4
3    Granate       3    3
4       Ocre       3    2
5       Rojo       3    1
6    Verdoso       3    6
7    Azulado       4   24
8     Dorado       4   55
9    Granate       4   13
10      Ocre       4    9

Se pueden notar frecuencias altas para el vino Tipo blanco, y adem谩s, frecuencias altas para los vinos de Tonalidad Verdoso y Azulado. Los valores de Calidad en general se concentran principalmente en los valores 5 y 6.

2.- Relaci贸n entre la calidad del vino y la tonalidad que presenta

Se seleccionan las variables Tipo y Tonalidad en un marco de datos de nombre calidad:

calidad <- select(vinos, Calidad, Tipo, Tonalidad)

Se verifica el tipo de variable:

str(calidad)
'data.frame':   5112 obs. of  3 variables:
 $ Calidad  : int  5 5 5 6 5 5 5 7 7 5 ...
 $ Tipo     : chr  "Tinto" "Tinto" "Tinto" "Tinto" ...
 $ Tonalidad: chr  "Azulado" "Azulado" "Azulado" "Azulado" ...

Tipo Y Tonaliadad son variables de tipo Char, Calidad es una variable n煤merica.

Se hace un gr谩fico ggplot usando un fill para diferenciar las categorias blanco y tinto:

Tipo:

ggplot(vinos, aes(x=Calidad, fill=Tipo, color=Tipo)) +
  ggtitle("Tipos de vino") +
  geom_histogram(alpha=2, position="identity", bins = 8, size=.1)+
  geom_density(alpha=0.5) +
  xlab("Calidad") +
  ylab("Frecuencias") +
  scale_color_manual(values=c("white", "white"))+
  scale_fill_manual(values=c("#e9e4e4", "#c85c5c")) +
    theme(
    text = element_text(family = "fira"),
    panel.grid = element_blank(),
    plot.title = element_text(size = 16, colour = "gray20", face="bold"),
    axis.text.y = element_text(size = 10, colour = "gray20"),
    axis.title.x = element_text(size = 10, colour = "gray20"),
    panel.background = element_rect(fill = 'white', color = 'white')
  )

Se puede notar que ambos vinos concentran su calidad entre 5 y 6, con mayor n煤mero de frecuencuas para el vino blanco. Es claro que el vino predominante es el vino Tipo Blanco.

Tonalidad:

ggplot(vinos, aes(x=Calidad, fill=Tonalidad, color=Tonalidad)) +
  ggtitle("Tipos de vino - Tonalidad") +
  geom_histogram(alpha=1, position="identity", bins = 8, size=.1, color="white")+
  geom_density(alpha=1) +
  xlab("Calidad") +
  ylab("Frecuencias") +
  scale_color_manual(values=c("#304bae", "#f5f7c0","#ab2a3e", "#c9af4f","#c85c5c", "#61b15b"))+
  scale_fill_manual(values=c("#304bae", "#f5f7c0","#ab2a3e", "#c9af4f","#c85c5c", "#61b15b")) +
    theme(
    text = element_text(family = "fira"),
    panel.grid = element_blank(),
    plot.title = element_text(size = 16, colour = "gray20", face="bold"),
    axis.text.y = element_text(size = 10, colour = "gray20"),
    axis.title.x = element_text(size = 10, colour = "gray20"),
    axis.title.y = element_text(size = 10, colour = "gray20"),
    panel.background = element_rect(fill = 'white', color = 'white')
  )

Seg煤n el Tipo de Tonalidad, el vino predominante es el verdoso y en segundo lugar el vino Ocre. Los vinos con Tonalidad Azulado, Dorado, Granate y Rojo, presentan frecuencias muy bajas en su Tonalidad.

3.- Graduaci贸n alcoh贸lica del vino

Para realizar un an谩lisis descriptivo de la variable Alcohol, variable que recoge la graduaci贸n alcoh贸lica que presentan los distintos tipos de vinos analizados. Se verifican algunos valores estad铆sticos usando la funci贸n summary()

summary(vinos$Alcohol)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   8.40    9.50   10.10   10.38   10.80   14.20 

Gr谩fico de bigotes:

ggplot(vinos, aes(x=0, y=Alcohol)) +
  geom_boxplot(bg="#304bae") +
  ggtitle("Boxplot: Vinos-Alcohol") +
    theme(
    text = element_text(family = "fira"),
    panel.grid = element_blank(),
    plot.title = element_text(size = 16, colour = "gray20", face="bold"),
    axis.text.y = element_text(size = 10, colour = "gray20"),
    axis.title.x = element_text(size = 10, colour = "gray20"),
    axis.title.y = element_text(size = 10, colour = "gray20"),
    panel.background = element_rect(fill = 'white', color = 'white')
  )

Con el gr谩fico de bigotes se puede notar la presencia de algunos datos at铆picos, es decir con muy pocas ocurrencias y que marcan vinos con m谩s de 13 en nivel de alcohol. La mediana se ubica en 10.10. Los niveles de alcohol se concentran entre 9.50 y 10.80.

###Gr谩fico de barras:

ggplot(vinos, aes(x=Alcohol, fill=Tipo, color=Tipo)) +
  ggtitle("Tipos de vino: Alcohol-Tipo") +
  geom_histogram(alpha=2, position="identity", bins = 30, size=.1)+
  geom_density(alpha=0.5) +
  xlab("Calidad") +
  ylab("Frecuencias") +
  scale_color_manual(values=c("white", "white"))+
  scale_fill_manual(values=c("#e9e4e4", "#c85c5c")) +
    theme(
    text = element_text(family = "fira"),
    panel.grid = element_blank(),
    plot.title = element_text(size = 16, colour = "gray20", face="bold"),
    axis.text.y = element_text(size = 10, colour = "gray20"),
    axis.title.x = element_text(size = 10, colour = "gray20"),
    axis.title.y = element_text(size = 10, colour = "gray20"),
    panel.background = element_rect(fill = 'white', color = 'white')
  )

ggplot(vinos, aes(x=Alcohol, fill=Tonalidad, color=Tonalidad)) +
  ggtitle("Tipos de vino: Alcohol-Tonalidad") +
  geom_histogram(alpha=1, position="identity", bins = 10, size=.1, color="white")+
  geom_density(alpha=1) +
  xlab("Nivel de alcohol") +
  ylab("Frecuencias") +
  scale_fill_manual(values=c("#304bae", "#f5f7c0","#ab2a3e", "#c9af4f","#c85c5c", "#61b15b"))+
  scale_color_manual(values=c("#abaaaa", "#abaaaa","#abaaaa", "#abaaaa","#abaaaa", "#abaaaa")) +
      theme(
    text = element_text(family = "fira"),
    panel.grid = element_blank(),
    plot.title = element_text(size = 16, colour = "gray20", face="bold"),
    axis.text.y = element_text(size = 10, colour = "gray20"),
    axis.title.x = element_text(size = 10, colour = "gray20"),
    axis.title.y = element_text(size = 10, colour = "gray20"),
    panel.background = element_rect(fill = 'white', color = 'white')
  )

Prueba de normalidad:

qqnorm(vinos$Alcohol, pch = 19, col = "blue")
qqline(vinos$Alcohol)

Los datos de la variable Alcohol parecen estar distribuidos de manera normal, sin embargo no puede afirmarse totalmente. En los extremos parecen alejare mucho de la l铆nea qqline.

4.- Precio y graduaci贸n alcoh贸lica del vino

Se seleccionan las variables Alcohol y Precio para verificar sus relaciones:

precio_a <- select(vinos, Alcohol, Precio)
summary(precio_a)
    Alcohol          Precio     
 Min.   : 8.40   Min.   :2.000  
 1st Qu.: 9.50   1st Qu.:3.180  
 Median :10.10   Median :4.170  
 Mean   :10.38   Mean   :4.148  
 3rd Qu.:10.80   3rd Qu.:5.110  
 Max.   :14.20   Max.   :6.980  
library(viridis)
ggplot(precio_a, aes(y=Alcohol, x=Precio)) +
  geom_point( aes(color=Precio),  alpha = 0.7) +
  ggtitle("Tipos de vino: Precio-Alcohol") +
  xlab("Precio (鈧)") +
  ylab("Alcohol") +
  scale_color_viridis(discrete = F, direction=-1, option = "C") +
      theme(
    text = element_text(family = "fira"),
    panel.grid = element_blank(),
    plot.title = element_text(size = 16, colour = "gray20", face="bold"),
    axis.text.y = element_text(size = 10, colour = "gray20"),
    axis.title.x = element_text(size = 10, colour = "gray20"),
    axis.title.y = element_text(size = 10, colour = "gray20"),
    panel.background = element_rect(fill = 'white', color = 'white')
  )

pairs(vinos$Alcohol ~ vinos$Precio, 
      pch = 19, 
      col = 4)

En el gr谩fico se puede notar que los vinos de menor grado de alcohol pueden costar precios altos y bajos, y los de mayor grado de alcohol tamb铆en tienen precios altos y bajos. No parece existir una tendencia evidente o s贸lida para afirmar que el precio influye respecto a sus niveles de alcohol.

5. Relaci贸n entre el precio del vino y el valor de la variable calidad

Se seleccionan las variables Calidad y Precio para verificar sus relaciones:

precio <- select(vinos, Calidad, Precio)
summary(precio)
    Calidad         Precio     
 Min.   :3.00   Min.   :2.000  
 1st Qu.:5.00   1st Qu.:3.180  
 Median :6.00   Median :4.170  
 Mean   :5.75   Mean   :4.148  
 3rd Qu.:6.00   3rd Qu.:5.110  
 Max.   :9.00   Max.   :6.980  
precio$Calidad <- as.character(precio$Calidad)
ggplot(precio, aes(x=Precio, fill=Calidad)) +
  geom_histogram(bins = 30, colour='white', size=.1) +
    ggtitle("Tipos de vino: Precio-Calidad") +
  xlab("Precio (鈧)") +
  ylab("Cantidad") +
  scale_fill_viridis(discrete = T, direction=-1, option = "C") +
      theme(
    text = element_text(family = "fira"),
    panel.grid = element_blank(),
    plot.title = element_text(size = 16, colour = "gray20", face="bold"),
    axis.text.y = element_text(size = 10, colour = "gray20"),
    axis.title.x = element_text(size = 10, colour = "gray20"),
    axis.title.y = element_text(size = 10, colour = "gray20"),
    panel.background = element_rect(fill = 'white', color = 'white')
  )

Claramente se nota que entre mayor calidad de vino, mayor el precio. En promedio un vino de calidad 6 cuesta un poco m谩s de 4.

7.- Precio medio de los vinos

summary(vinos$Precio)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  2.000   3.180   4.170   4.148   5.110   6.980 
mean(vinos$Precio)
[1] 4.147788

El precio medio de los vinos es de 4.147788 y con una mediana de 4.148.

Se hace la prueba t.test:

t.test(x=vinos$Precio, y = NULL,
       alternative = c("two.sided", "less", "greater"),
       mu = 4.25, paired = FALSE, var.equal = FALSE,
       conf.level = 0.95)

    One Sample t-test

data:  vinos$Precio
t = -6.116, df = 5111, p-value = 1.031e-09
alternative hypothesis: true mean is not equal to 4.25
95 percent confidence interval:
 4.115024 4.180551
sample estimates:
mean of x 
 4.147788 

Con 95% de confianza se puede asegurar que los valores del precio del vino se ubican entre 4.115024 y 4.180551 Euros. Lo que significa que es inferior a los 4.25 planteados en el interrogante.

8.- Precio medio de los vinos con Tonalidad Verdoso

Se seleccionan las variables Calidad y Precio para verificar sus relaciones:

precio_ver <- filter(vinos, Tonalidad=="Verdoso")
summary(precio_ver$Precio)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  2.000   2.680   3.280   3.473   4.260   5.970 

El precio medio de los vinos de Tonaldad verdoso es de 3.473 Euros. Se platea una prueba t con un 90% de confianza:

t.test(x=precio_ver$Precio, y = NULL,
       alternative = c("two.sided", "less", "greater"),
       mu = 3.473, paired = FALSE, var.equal = FALSE,
       conf.level = 0.90)

    One Sample t-test

data:  precio_ver$Precio
t = 0.016029, df = 1605, p-value = 0.9872
alternative hypothesis: true mean is not equal to 3.473
90 percent confidence interval:
 3.432355 3.514445
sample estimates:
mean of x 
   3.4734 

Con un 90% de confianza se puede asegurar que el precio del vino de Tonalidad verdoso se ubica entre 3.432355 y 3.514445 Euros. Un poco menos de lo planteado en el interronte.

9.- Graduaci贸n alcoh贸lica de los vinos cuya calidad presenta un valor de 8

summary(precio_ver$Alcohol)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  9.000   9.200   9.400   9.413   9.600   9.900 
qqnorm(precio_ver$Alcohol)
qqline(precio_ver$Alcohol)

library(nortest) 
ad.test(precio_ver$Alcohol)

    Anderson-Darling normality test

data:  precio_ver$Alcohol
A = 21.521, p-value < 2.2e-16
t.test(precio_ver$Alcohol, alternative='two.sided',
       conf.level=0.99, mu=11.9)

    One Sample t-test

data:  precio_ver$Alcohol
t = -367.69, df = 1605, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 11.9
99 percent confidence interval:
 9.395225 9.430117
sample estimates:
mean of x 
 9.412671 
t.test(precio_ver$Alcohol, alternative='two.sided',
       conf.level=0.95, mu=11.9)

    One Sample t-test

data:  precio_ver$Alcohol
t = -367.69, df = 1605, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 11.9
95 percent confidence interval:
 9.399402 9.425940
sample estimates:
mean of x 
 9.412671 

El p-value es mucho menor que el nivel de significancia de 5% y 1%. Con un nivel de confianza del 99%

10.- Comparaci贸n de la graduaci贸n alcoh贸lica de los vinos cuya calidad presenta un valor de 8 y un valor de 4.

En primer lugar se verifica la homogeneidad de varianzas:

t.test(x=vinos$Alcohol, y = NULL,
       alternative = c("two.sided", "less", "greater"),
       mu = 8, paired = FALSE, var.equal = FALSE,
       conf.level = 0.95)

    One Sample t-test

data:  vinos$Alcohol
t = 148.41, df = 5111, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 8
95 percent confidence interval:
 10.34518 10.40797
sample estimates:
mean of x 
 10.37657 
t.test(x=vinos$Alcohol, y = NULL,
       alternative = c("two.sided", "less", "greater"),
       mu = 4, paired = FALSE, var.equal = FALSE,
       conf.level = 0.95)

    One Sample t-test

data:  vinos$Alcohol
t = 398.19, df = 5111, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 4
95 percent confidence interval:
 10.34518 10.40797
sample estimates:
mean of x 
 10.37657 

Con un intervalo de confianza de 95% se puede afirmar que el rango de graduaci贸n alcoh贸lica no varia demasiado, sea con mu de 4 o de 8.

11.- Comprobaci贸n de las condiciones de normalidad de la variable precio para la tonalidad Granate

Se seleccionan las variables Precio y Tonalidad:

precio_granate <- select(vinos, Precio, Tonalidad)
precio_granate <- filter(precio_granate, Tonalidad=="Granate")
head(precio_granate, 20)
   Precio Tonalidad
1    5.82   Granate
2    3.89   Granate
3    3.39   Granate
4    5.62   Granate
5    5.39   Granate
6    4.98   Granate
7    5.54   Granate
8    3.93   Granate
9    3.23   Granate
10   4.02   Granate
11   5.07   Granate
12   4.15   Granate
13   5.35   Granate
14   5.11   Granate
15   4.71   Granate
16   4.88   Granate
17   4.50   Granate
18   4.30   Granate
19   4.24   Granate
20   3.18   Granate

Prueba gr谩fica de normalidad:

qqnorm(precio_granate$Precio)
qqline(precio_granate$Precio)

hist(precio_granate$Precio)

lillie.test(precio_granate$Precio)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  precio_granate$Precio
D = 0.039675, p-value = 0.08544

Como el p_value es mayor al 5%, por ende no se rechaza la hipotesis nula para el precio del vino de Tonalidad Granate, lo cual significa que los datos tienen un comportamiento normal.

12.- Comprobaci贸n del cumplimiento de las condiciones de normalidad de la variable precio para la tonalidad Azulado y para la tonalidad Dorado

Se seleccionan las variables Precio y Tonalidad:

precio_azulado <- select(vinos, Precio, Tonalidad)
precio_azulado <- filter(precio_azulado, Tonalidad=="Azulado")
head(precio_azulado, 20)
   Precio Tonalidad
1    3.50   Azulado
2    2.01   Azulado
3    3.27   Azulado
4    3.46   Azulado
5    2.14   Azulado
6    3.36   Azulado
7    3.18   Azulado
8    5.32   Azulado
9    2.23   Azulado
10   2.07   Azulado
11   3.20   Azulado
12   2.13   Azulado
13   2.31   Azulado
14   2.51   Azulado
15   2.29   Azulado
16   4.31   Azulado
17   5.06   Azulado
18   3.48   Azulado
19   2.07   Azulado
20   2.21   Azulado

Se hace la prueba de normalidad (AZULADO):

qqnorm(precio_azulado$Precio)
qqline(precio_azulado$Precio)

t.test(precio_azulado$Precio)

    One Sample t-test

data:  precio_azulado$Precio
t = 95.1, df = 679, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
 3.147974 3.280702
sample estimates:
mean of x 
 3.214338 
lillie.test(precio_azulado$Precio)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  precio_azulado$Precio
D = 0.12293, p-value < 2.2e-16

Como el p_value es menor al 5%, por ende se rechaza la hipotesis nula para el precio del vino de Tonalidad Azulado, lo cual significa que no se asemeja a una distribuci贸n normal.

Se hace la prueba de normalidad (DORADO):

precio_dorado <- select(vinos, Precio, Tonalidad)
precio_dorado <- filter(precio_dorado, Tonalidad=="Dorado")
head(precio_dorado, 20)
   Precio Tonalidad
1    3.28    Dorado
2    4.57    Dorado
3    4.14    Dorado
4    5.66    Dorado
5    4.32    Dorado
6    4.97    Dorado
7    4.21    Dorado
8    4.26    Dorado
9    5.18    Dorado
10   5.17    Dorado
11   5.28    Dorado
12   3.92    Dorado
13   3.87    Dorado
14   5.01    Dorado
15   4.32    Dorado
16   4.95    Dorado
17   5.16    Dorado
18   3.60    Dorado
19   5.17    Dorado
20   4.28    Dorado
qqnorm(precio_dorado$Precio)
qqline(precio_dorado$Precio)

hist(precio_dorado$Precio)

t.test(precio_dorado$Precio)

    One Sample t-test

data:  precio_dorado$Precio
t = 179.27, df = 1255, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
 4.300230 4.395391
sample estimates:
mean of x 
 4.347811 
lillie.test(precio_azulado$Precio)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  precio_azulado$Precio
D = 0.12293, p-value < 2.2e-16

Como el p_value es menor al 5%, por ende se rechaza la hipotesis nula para el precio del vino de Tonalidad Dorado, lo cual significa que no se asemeja a una distribuci贸n normal, aunque tiene una similitud que puede resultar enga帽osa.