Gráfico de barras para visualizar la distribución de la calidad del vino

##    type fixed.acidity volatile.acidity citric.acid residual.sugar chlorides
## 1 white           7.0             0.27        0.36           20.7     0.045
## 2 white           6.3             0.30        0.34            1.6     0.049
## 3 white           8.1             0.28        0.40            6.9     0.050
## 4 white           7.2             0.23        0.32            8.5     0.058
## 5 white           7.2             0.23        0.32            8.5     0.058
## 6 white           8.1             0.28        0.40            6.9     0.050
##   free.sulfur.dioxide total.sulfur.dioxide density   pH sulphates alcohol
## 1                  45                  170  1.0010 3.00      0.45     8.8
## 2                  14                  132  0.9940 3.30      0.49     9.5
## 3                  30                   97  0.9951 3.26      0.44    10.1
## 4                  47                  186  0.9956 3.19      0.40     9.9
## 5                  47                  186  0.9956 3.19      0.40     9.9
## 6                  30                   97  0.9951 3.26      0.44    10.1
##   quality
## 1       6
## 2       6
## 3       6
## 4       6
## 5       6
## 6       6

Verifico si hay valores faltantes en el dataframe y elimino las filas con valores faltantes utilizando

## [1] TRUE
## 'data.frame':    6463 obs. of  13 variables:
##  $ type                : chr  "white" "white" "white" "white" ...
##  $ fixed.acidity       : num  7 6.3 8.1 7.2 7.2 8.1 6.2 7 6.3 8.1 ...
##  $ volatile.acidity    : num  0.27 0.3 0.28 0.23 0.23 0.28 0.32 0.27 0.3 0.22 ...
##  $ citric.acid         : num  0.36 0.34 0.4 0.32 0.32 0.4 0.16 0.36 0.34 0.43 ...
##  $ residual.sugar      : num  20.7 1.6 6.9 8.5 8.5 6.9 7 20.7 1.6 1.5 ...
##  $ chlorides           : num  0.045 0.049 0.05 0.058 0.058 0.05 0.045 0.045 0.049 0.044 ...
##  $ free.sulfur.dioxide : num  45 14 30 47 47 30 30 45 14 28 ...
##  $ total.sulfur.dioxide: num  170 132 97 186 186 97 136 170 132 129 ...
##  $ density             : num  1.001 0.994 0.995 0.996 0.996 ...
##  $ pH                  : num  3 3.3 3.26 3.19 3.19 3.26 3.18 3 3.3 3.22 ...
##  $ sulphates           : num  0.45 0.49 0.44 0.4 0.4 0.44 0.47 0.45 0.49 0.45 ...
##  $ alcohol             : num  8.8 9.5 10.1 9.9 9.9 10.1 9.6 8.8 9.5 11 ...
##  $ quality             : int  6 6 6 6 6 6 6 6 6 6 ...
##  - attr(*, "na.action")= 'omit' Named int [1:34] 18 34 55 87 99 140 175 225 250 268 ...
##   ..- attr(*, "names")= chr [1:34] "18" "34" "55" "87" ...

Creo la variable taste que indica la calidad del vino como “bad”, “good”, o “normal” basado en la calidad numérica. La variable taste la convierto en un factor

## 
##    bad   good normal 
##   2372   1271   2820

Divido el dataframe en conjuntos de entrenamiento y prueba utilizando una muestra aleatoria del 60% para entrenamiento.

Ajusto un modelo de Random Forest para predecir la variable taste utilizando todas las variables excepto quality como predictoras en los datos de entrenamiento.

## 
## Call:
##  randomForest(formula = taste ~ . - quality, data = train) 
##                Type of random forest: classification
##                      Number of trees: 500
## No. of variables tried at each split: 3
## 
##         OOB estimate of  error rate: 30.14%
## Confusion matrix:
##         bad good normal class.error
## bad    1022   20    371   0.2767162
## good     25  438    294   0.4214003
## normal  327  132   1249   0.2687354

Realizo predicciones en el conjunto de prueba utilizando el modelo ajustado. Creo una tabla de confusión para comparar las predicciones del modelo con los valores reales de taste en el conjunto de prueba.

##         
## pred     bad good normal
##   bad    707   14    205
##   good     7  300     77
##   normal 245  200    830

Al finalizar este proceso, el modelo de Random Forest se ajusta y se evalúa en el conjunto de prueba para predecir la calidad del vino basado en las variables proporcionadas en los datos. La tabla de confusión te proporciona información sobre la precisión de las predicciones del modelo en clasificar las muestras en las categorías de “bad”, “good” y “normal”.