El conjunto de datos se trata de un conjunto de atributos que definen la calidad de vino blanco, son alrededor de 4898 registros y 25 variables.
Las variables independientes son:
La variable dependiente es calidad de vino de manera cuantitativa: * quality: Representa la calidad del vino evaluada generalmente en escala ordinal por expertos catadores.
Los datos originales tienen valores cuantitativos y se normalizarán de manera inicial para que todos los modelos entrenen con datos estandarizados con media igual a cero \(\mu=0\) y desviación estándar igual a 1 \(\sigma = 1\); \(z= \frac {x_i - \mu}{\sigma}\).
El caso de estudio se encuentra en rpubs.com en la dirección url siguiente: https://rpubs.com/rpizarrog/1434956 .
Los datos se encuentran para su descarga en el servicio github.com en el espacio del autor: https://raw.githubusercontent.com/rpizarrog/Libro-Aprendizaje-Automatico.-Casos-de-Estudio-con-R-y-Python/refs/heads/main/datos/winequality_white_enriquecido_final_calidad.csv .
Las funciones que permiten la adecuada ejecución de este caso de estudio se pueden encontrar en el servicio github.com en el espacio del autor: https://raw.githubusercontent.com/rpizarrog/Libro-Aprendizaje-Automatico.-Casos-de-Estudio-con-R-y-Python/refs/heads/main/R%20MarkDown/funciones/funciones%20para%20modelos%20de%20regresion%20SVR%20y%20multiple.R
Construir modelos de regresión basados en los algoritmos de soporte de regresión SVR con kernel lineal, kernel polinomial grado dos y tres, kernel radial y regresión lineal múltiple.
Los modelos serán válidos estadísticamente si cumplen con los supuestos de linealidad, no multicolinealidad, homocedasticidad normalidad e independencia de residuos o al menos identificar e indicar la condición que tiene cada modelo de regresión con cada supuesto citado.
Los modelos tendrán calidad predictiva si superan con estos datos el 20% del estadístico r square ajustado para modelos como regresión lineal múltiple y r square para modelos de soporte de regresión (SVR).
Los datos serán particionados con el 70% para datos de entrenamiento y 30% datos de validación.
Al final, el caso de estudio deberá entregar los estadísticos de evaluación para indicar e interpretar cual es el mejor modelo de regresión multivariable de los aquí descritos, con los datos del caso en términos de calidad predictiva y validación de supuestos de regresión.
Se sigue la metodología descrita en el capítulo tres.
Se cargan las librerías necesarias para este caso de estudio.
# install.packages("readr")
# install.packages("tidyverse")
# install.packages("psych")
# install.packages("dplyr")
# install.packages("ggplot2")
# install.packages("caret")
# install.packages("broom")
# install.packages("lmtest")
# install.packages("car")
# install.packages("stats")
# install.packages("flextable")
# install.packages("officer")
# install.packages("patchwork")
# install.packages("performance")
# install.packages("see")
# install.packages("car")
# install.packages("nortest")
# install.packages("lmtest")
# install,packages("e1071")
library(readr) # cargar datos datos
library(tidyverse) # Para manipular
library (psych) # Para descriobir datos
library(dplyr) # Manipulación de datos
library(ggplot2) # gráficos
library(caret) # partición de datos
library(broom) # tidy modelos
library(lmtest) # Durbin-Watson
library(car) # VIF y diagnóstico, entre otras
library(stats) # lm, shapiro.test
library(patchwork) # Graficos organizados en columnas renglones
# Tablas compatibles con Word
library(flextable)
library(officer)
library(performance) # Para evaluar postulados de modelos
library(see) # Para evaluar postulados de modelos dependencia de performance
library(car) # Para verificar postulados de los modelos
library(nortest) # Para pruebas de normalidad Anderson-Darling
library(lmtest) # Para pruebas de homocedasticidad Breusch–Pagan y prueba de White y otras pruebas
library(glmnet) # Para modelos Lasso y Ridge
library(e1071) # Para modelos SVR varios kernels
url <- "https://raw.githubusercontent.com/rpizarrog/Libro-Aprendizaje-Automatico.-Casos-de-Estudio-con-R-y-Python/refs/heads/main/R%20MarkDown/funciones/funciones%20para%20modelos%20de%20regresion%20SVR%20y%20multiple.R"
source (url)
url <- "https://raw.githubusercontent.com/rpizarrog/Libro-Aprendizaje-Automatico.-Casos-de-Estudio-con-R-y-Python/refs/heads/main/datos/winequality_white_enriquecido_final_calidad.csv"
datos <- f_cargar_datos(url)
Se presentan los primeros y últimos registros del conjunto de los datos original de la calidad de vino, de igual manera, solo las primeras y últimas cuatro variables incluyendo la variable dependiente calidad.
f_visualizar_head_tail_reducido_word(datos)
fixed_acidity | volatile_acidity | citric_acid | residual_sugar | ... | density_sugar | acidez_pH | alcohol_acidez_volatil | quality |
|---|---|---|---|---|---|---|---|---|
7 | 0.27 | 0.36 | 20.7 | ... | 20.7207 | 21 | 2.376 | 6 |
6.3 | 0.3 | 0.34 | 1.6 | ... | 1.5904 | 20.79 | 2.85 | 6 |
8.1 | 0.28 | 0.4 | 6.9 | ... | 6.8662 | 26.406 | 2.828 | 6 |
7.2 | 0.23 | 0.32 | 8.5 | ... | 8.4626 | 22.968 | 2.277 | 6 |
7.2 | 0.23 | 0.32 | 8.5 | ... | 8.4626 | 22.968 | 2.277 | 6 |
8.1 | 0.28 | 0.4 | 6.9 | ... | 6.8662 | 26.406 | 2.828 | 6 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
6.5 | 0.23 | 0.38 | 1.3 | ... | 1.2909 | 21.385 | 2.231 | 5 |
6.2 | 0.21 | 0.29 | 1.6 | ... | 1.5858 | 20.274 | 2.352 | 6 |
6.6 | 0.32 | 0.36 | 8 | ... | 7.9592 | 20.79 | 3.072 | 5 |
6.5 | 0.24 | 0.19 | 1.2 | ... | 1.191 | 19.435 | 2.256 | 6 |
5.5 | 0.29 | 0.3 | 1.1 | ... | 1.0876 | 18.37 | 3.712 | 7 |
6 | 0.21 | 0.38 | 0.8 | ... | 0.7915 | 19.56 | 2.478 | 6 |
f_describir_datos(datos)
## $describe
## vars n mean sd median trimmed mad min
## fixed_acidity 1 4898 6.85 0.84 6.80 6.82 0.74 3.80
## volatile_acidity 2 4898 0.28 0.10 0.26 0.27 0.09 0.08
## citric_acid 3 4898 0.33 0.12 0.32 0.33 0.09 0.00
## residual_sugar 4 4898 6.39 5.07 5.20 5.80 5.34 0.60
## chlorides 5 4898 0.05 0.02 0.04 0.04 0.01 0.01
## free_sulfur_dioxide 6 4898 35.31 17.01 34.00 34.36 16.31 2.00
## total_sulfur_dioxide 7 4898 138.36 42.50 134.00 136.96 43.00 9.00
## density 8 4898 0.99 0.00 0.99 0.99 0.00 0.99
## pH 9 4898 3.19 0.15 3.18 3.18 0.15 2.72
## sulphates 10 4898 0.49 0.11 0.47 0.48 0.10 0.22
## alcohol 11 4898 10.51 1.23 10.40 10.43 1.48 8.00
## indice_alcohol_acidez 12 4898 1.56 0.29 1.51 1.54 0.27 0.78
## balance_azucar_acidez 13 4898 24.04 20.83 17.38 20.81 17.19 0.87
## indice_mineralidad 14 4898 0.54 0.12 0.52 0.53 0.11 0.24
## potencial_alcoholico 15 4898 10.45 1.20 10.32 10.37 1.39 7.95
## relacion_SO2 16 4898 0.25 0.09 0.25 0.25 0.09 0.02
## alcohol_2 17 4898 112.06 26.66 108.16 109.71 29.36 64.00
## density_2 18 4898 0.99 0.01 0.99 0.99 0.01 0.97
## sugar_2 19 4898 66.57 106.82 27.04 48.26 37.58 0.36
## acidez_2 20 4898 47.70 12.11 46.24 46.73 10.45 14.44
## alcohol_sulphates 21 4898 5.15 1.37 4.85 5.00 1.14 2.62
## density_sugar 22 4898 6.37 5.07 5.16 5.78 5.30 0.60
## acidez_pH 23 4898 21.80 2.42 21.56 21.69 2.27 13.92
## alcohol_acidez_volatil 24 4898 2.93 1.16 2.70 2.80 0.92 0.81
## quality 25 4898 5.88 0.89 6.00 5.85 1.48 3.00
## max range skew kurtosis se
## fixed_acidity 14.20 10.40 0.65 2.17 0.01
## volatile_acidity 1.10 1.02 1.58 5.08 0.00
## citric_acid 1.66 1.66 1.28 6.16 0.00
## residual_sugar 65.80 65.20 1.08 3.46 0.07
## chlorides 0.35 0.34 5.02 37.51 0.00
## free_sulfur_dioxide 289.00 287.00 1.41 11.45 0.24
## total_sulfur_dioxide 440.00 431.00 0.39 0.57 0.61
## density 1.04 0.05 0.98 9.79 0.00
## pH 3.82 1.10 0.46 0.53 0.00
## sulphates 1.08 0.86 0.98 1.59 0.00
## alcohol 14.20 6.20 0.49 -0.70 0.02
## indice_alcohol_acidez 3.28 2.50 0.90 1.49 0.00
## balance_azucar_acidez 123.33 122.46 1.25 1.15 0.30
## indice_mineralidad 1.11 0.87 0.88 1.37 0.00
## potencial_alcoholico 14.03 6.08 0.49 -0.70 0.02
## relacion_SO2 0.71 0.68 0.38 0.56 0.00
## alcohol_2 201.64 137.64 0.67 -0.40 0.38
## density_2 1.08 0.11 1.03 10.73 0.00
## sugar_2 4329.64 4329.28 14.14 519.82 1.53
## acidez_2 201.64 187.20 1.41 7.59 0.17
## alcohol_sulphates 13.12 10.50 1.36 3.15 0.02
## density_sugar 68.36 67.77 1.13 4.18 0.07
## acidez_pH 44.73 30.81 0.65 2.13 0.03
## alcohol_acidez_volatil 13.64 12.83 1.69 5.72 0.02
## quality 9.00 6.00 0.16 0.21 0.01
##
## $structure
## [1] "'data.frame':\t4898 obs. of 25 variables:\n $ fixed_acidity : num 7 6.3 8.1 7.2 7.2 8.1 6.2 7 6.3 8.1 ...\n $ volatile_acidity : num 0.27 0.3 0.28 0.23 0.23 0.28 0.32 0.27 0.3 0.22 ...\n $ citric_acid : num 0.36 0.34 0.4 0.32 0.32 0.4 0.16 0.36 0.34 0.43 ...\n $ residual_sugar : num 20.7 1.6 6.9 8.5 8.5 6.9 7 20.7 1.6 1.5 ...\n $ chlorides : num 0.045 0.049 0.05 0.058 0.058 0.05 0.045 0.045 0.049 0.044 ...\n $ free_sulfur_dioxide : num 45 14 30 47 47 30 30 45 14 28 ...\n $ total_sulfur_dioxide : num 170 132 97 186 186 97 136 170 132 129 ...\n $ density : num 1.001 0.994 0.995 0.996 0.996 ...\n $ pH : num 3 3.3 3.26 3.19 3.19 3.26 3.18 3 3.3 3.22 ...\n $ sulphates : num 0.45 0.49 0.44 0.4 0.4 0.44 0.47 0.45 0.49 0.45 ...\n $ alcohol : num 8.8 9.5 10.1 9.9 9.9 10.1 9.6 8.8 9.5 11 ...\n $ indice_alcohol_acidez : num 1.26 1.51 1.25 1.38 1.38 ...\n $ balance_azucar_acidez : num 73.93 5.16 23.79 35.42 35.42 ...\n $ indice_mineralidad : num 0.495 0.539 0.49 0.458 0.458 0.49 0.515 0.495 0.539 0.494 ...\n $ potencial_alcoholico : num 8.81 9.44 10.05 9.86 9.86 ...\n $ relacion_SO2 : num 0.263 0.105 0.306 0.251 0.251 ...\n $ alcohol_2 : num 77.4 90.2 102 98 98 ...\n $ density_2 : num 1.002 0.988 0.99 0.991 0.991 ...\n $ sugar_2 : num 428.49 2.56 47.61 72.25 72.25 ...\n $ acidez_2 : num 49 39.7 65.6 51.8 51.8 ...\n $ alcohol_sulphates : num 3.96 4.66 4.44 3.96 3.96 ...\n $ density_sugar : num 20.72 1.59 6.87 8.46 8.46 ...\n $ acidez_pH : num 21 20.8 26.4 23 23 ...\n $ alcohol_acidez_volatil: num 2.38 2.85 2.83 2.28 2.28 ...\n $ quality : num 6 6 6 6 6 6 6 6 6 6 ..."
Transformar los datos originales en datos estandarizados \(z=\frac{x_i - \mu}{\sigma}\)
datos_transformados <- f_estandarizar_escalar(datos)
##
## ============================
## Transformación de datos
## ============================
## Variables numéricas transformadas: 25
## Variables no numéricas preservadas: 0
## Decimales aplicados: 4
datos_estandarizados <- datos_transformados$datos_estandarizados
f_visualizar_head_tail_reducido_word(datos_estandarizados)
fixed_acidity | volatile_acidity | citric_acid | residual_sugar | ... | density_sugar | acidez_pH | alcohol_acidez_volatil | quality |
|---|---|---|---|---|---|---|---|---|
0.1721 | -0.0818 | 0.2133 | 2.8211 | ... | 2.8291 | -0.3302 | -0.4809 | 0.1379 |
-0.6574 | 0.2159 | 0.048 | -0.9447 | ... | -0.9412 | -0.4168 | -0.0723 | 0.1379 |
1.4756 | 0.0175 | 0.5438 | 0.1003 | ... | 0.0986 | 1.8994 | -0.0913 | 0.1379 |
0.4091 | -0.4786 | -0.1173 | 0.4157 | ... | 0.4132 | 0.4815 | -0.5662 | 0.1379 |
0.4091 | -0.4786 | -0.1173 | 0.4157 | ... | 0.4132 | 0.4815 | -0.5662 | 0.1379 |
1.4756 | 0.0175 | 0.5438 | 0.1003 | ... | 0.0986 | 1.8994 | -0.0913 | 0.1379 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
-0.4204 | -0.4786 | 0.3785 | -1.0038 | ... | -1.0002 | -0.1714 | -0.6059 | -0.9913 |
-0.7759 | -0.677 | -0.3652 | -0.9447 | ... | -0.9421 | -0.6296 | -0.5016 | 0.1379 |
-0.3019 | 0.4143 | 0.2133 | 0.3171 | ... | 0.314 | -0.4168 | 0.119 | -0.9913 |
-0.4204 | -0.3794 | -1.1915 | -1.0235 | ... | -1.0199 | -0.9757 | -0.5843 | 0.1379 |
-1.6054 | 0.1167 | -0.2825 | -1.0432 | ... | -1.0403 | -1.4149 | 0.6707 | 1.267 |
-1.0129 | -0.677 | 0.3785 | -1.1024 | ... | -1.0986 | -0.9241 | -0.393 | 0.1379 |
Se crean las particiones con el 70% para datos de entrenamiento y 30% para datos de validación. Se ejecuta la función f_particionar_datos() previamente preparada para crear estos dos conjuntos de datos a partir de los datos estandarizados.
Luego se presentan los primeros y últimos registros de los datos de entrenamiento y datos de validación al igual con las primeras y últimas cuatro variables.
particion <- f_particionar_datos(datos_estandarizados)
datos_entrenamiento <- particion$datos_entrenamiento
datos_validacion <- particion$datos_validacion
f_visualizar_head_tail_reducido_word(datos_entrenamiento)
fixed_acidity | volatile_acidity | citric_acid | residual_sugar | ... | density_sugar | acidez_pH | alcohol_acidez_volatil | quality |
|---|---|---|---|---|---|---|---|---|
-0.5389 | -0.4786 | 0.1306 | 0.7706 | ... | 0.7686 | -0.4655 | -0.705 | -0.9913 |
0.7646 | -0.3794 | -0.1999 | 1.3227 | ... | 1.3242 | 0.4431 | -0.6464 | 0.1379 |
-0.4204 | -0.2802 | -0.5304 | 1.7367 | ... | 1.7327 | -0.4395 | -0.3956 | -0.9913 |
0.4091 | 0.6127 | -0.2825 | 0.396 | ... | 0.3968 | 1.3426 | 0.3138 | -0.9913 |
-0.5389 | 1.0096 | -1.1088 | -0.2152 | ... | -0.2157 | -0.4391 | 0.5828 | 0.1379 |
-0.5389 | -0.5778 | 1.2875 | 0.2186 | ... | 0.2158 | -0.3599 | -0.6136 | 0.1379 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
-0.1834 | 2.0017 | 1.2875 | -0.6884 | ... | -0.6892 | -0.3422 | 2.8497 | 0.1379 |
-0.0649 | 2.8946 | -0.3652 | -0.8264 | ... | -0.8237 | 0.3198 | 2.4825 | -0.9913 |
0.2906 | -1.0739 | 0.7917 | -1.0038 | ... | -1.0008 | 0.1156 | -0.8145 | 0.1379 |
-1.8425 | 3.0434 | -2.183 | 0.1397 | ... | 0.137 | -1.6904 | 2.3623 | 0.1379 |
-0.3019 | 2.7954 | -1.522 | 0.7115 | ... | 0.7092 | -0.063 | 2.0084 | -0.9913 |
-1.3684 | -0.9747 | -0.6131 | -0.8264 | ... | -0.8257 | -1.7741 | -0.6205 | 0.1379 |
f_visualizar_head_tail_reducido_word(datos_validacion)
## New names:
## New names:
## New names:
## • `...` -> `...5`
fixed_acidity | volatile_acidity | citric_acid | residual_sugar | ... | density_sugar | acidez_pH | alcohol_acidez_volatil | quality |
|---|---|---|---|---|---|---|---|---|
0.1721 | -0.0818 | 0.2133 | 2.8211 | ... | 2.8291 | -0.3302 | -0.4809 | 0.1379 |
-0.6574 | 0.2159 | 0.048 | -0.9447 | ... | -0.9412 | -0.4168 | -0.0723 | 0.1379 |
-0.3019 | -1.0739 | 0.3785 | -0.9644 | ... | -0.9615 | -0.1446 | -0.8584 | 1.267 |
-0.6574 | 2.0017 | -2.4309 | -1.0432 | ... | -1.0394 | -0.5727 | 1.443 | 0.1379 |
-0.7759 | 3.7875 | 1.2048 | -1.0235 | ... | -1.0207 | -0.4762 | 4.7529 | 2.3961 |
0.1721 | -0.2802 | -0.1173 | 0.5143 | ... | 0.5111 | 0.3915 | -0.2878 | 0.1379 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
-2.198 | -0.7762 | 0.5438 | -0.8855 | ... | -0.884 | -2.0418 | -0.4516 | 0.1379 |
-1.4869 | -0.7762 | 0.2133 | -0.7672 | ... | -0.7655 | -0.9307 | -0.805 | 0.1379 |
-2.198 | -0.429 | -0.5304 | 1.0565 | ... | 1.0505 | -2.6604 | -0.6248 | 0.1379 |
-2.3165 | 1.9025 | -1.3567 | -0.8855 | ... | -0.8841 | -2.3829 | 2.13 | 0.1379 |
-0.7759 | 1.3072 | -0.9436 | -0.8855 | ... | -0.8842 | -1.2177 | 2.0653 | 1.267 |
-0.4204 | -0.4786 | 0.3785 | -1.0038 | ... | -1.0002 | -0.1714 | -0.6059 | -0.9913 |
Valores de epsilon iniciales, las variables independientes y dependientes
epsilon <- 0.3
v_dependiente <- "quality"
v_independientes <- names(datos_entrenamiento)
v_independientes <- v_independientes[v_independientes != v_dependiente]
cat("Variables independientes:", "\n")
## Variables independientes:
paste(v_independientes)
## [1] "fixed_acidity" "volatile_acidity" "citric_acid"
## [4] "residual_sugar" "chlorides" "free_sulfur_dioxide"
## [7] "total_sulfur_dioxide" "density" "pH"
## [10] "sulphates" "alcohol" "indice_alcohol_acidez"
## [13] "balance_azucar_acidez" "indice_mineralidad" "potencial_alcoholico"
## [16] "relacion_SO2" "alcohol_2" "density_2"
## [19] "sugar_2" "acidez_2" "alcohol_sulphates"
## [22] "density_sugar" "acidez_pH" "alcohol_acidez_volatil"
cat("\n", "Variable dependiente:\n")
##
## Variable dependiente:
paste(v_dependiente)
## [1] "quality"
Se manda llamar la función f_crear_modelo_SVR_lineal().
modelo_SVR_lineal <- f_crear_modelo_SVR_lineal(
datos_entrenamiento,
v_independientes,
v_dependiente,
epsilon = epsilon
)
##
## =====================================
## MODELO SVR KERNEL LINEAL
## =====================================
##
## FÓRMULA DEL MODELO:
## quality ~ fixed_acidity + volatile_acidity + citric_acid + residual_sugar +
## chlorides + free_sulfur_dioxide + total_sulfur_dioxide +
## density + pH + sulphates + alcohol + indice_alcohol_acidez +
## balance_azucar_acidez + indice_mineralidad + potencial_alcoholico +
## relacion_SO2 + alcohol_2 + density_2 + sugar_2 + acidez_2 +
## alcohol_sulphates + density_sugar + acidez_pH + alcohol_acidez_volatil
## <environment: 0x0000017a5afa9118>
##
## GAMMA:
## [1] 0.04166667
##
## EPSILON:
## [1] 0.3
##
## COST:
## [1] 1
##
## RHO (INTERCEPTO):
## [1] 0.031249
## [1] "Valor de b:"
## [1] -0.031249
##
## NÚMERO VECTORES SOPORTE:
## [1] 2468
Se manda llamar la función f_crear_modelo_SVR_polinomial() con el grado 2
modelo_SVR_polinomial_2 <- f_crear_modelo_SVR_polinomial(
datos_entrenamiento,
v_independientes,
v_dependiente,
grado = 2,
epsilon = epsilon
)
##
## MODELO SVR KERNEL POLINOMIAL GRADO 2
##
## FÓRMULA DEL MODELO:
## quality ~ fixed_acidity + volatile_acidity + citric_acid + residual_sugar +
## chlorides + free_sulfur_dioxide + total_sulfur_dioxide +
## density + pH + sulphates + alcohol + indice_alcohol_acidez +
## balance_azucar_acidez + indice_mineralidad + potencial_alcoholico +
## relacion_SO2 + alcohol_2 + density_2 + sugar_2 + acidez_2 +
## alcohol_sulphates + density_sugar + acidez_pH + alcohol_acidez_volatil
## <environment: 0x0000017a55f40c80>
##
## KERNEL:
## [1] 1
##
## GRADO POLINOMIAL:
## [1] 2
##
## GAMMA:
## [1] 0.04166667
##
## EPSILON:
## [1] 0.3
##
## COST:
## [1] 1
##
## RHO:
## [1] 0.01771851
##
## INTERCEPTO REAL b:
## [1] -0.01771851
##
## NÚMERO VECTORES SOPORTE:
## [1] 2422
Se manda llamar la función f_crear_modelo_SVR_polinomial() con el grado 3.
modelo_SVR_polinomial_3 <- f_crear_modelo_SVR_polinomial(
datos_entrenamiento,
v_independientes,
v_dependiente,
grado = 3,
epsilon = epsilon
)
##
## MODELO SVR KERNEL POLINOMIAL GRADO 3
##
## FÓRMULA DEL MODELO:
## quality ~ fixed_acidity + volatile_acidity + citric_acid + residual_sugar +
## chlorides + free_sulfur_dioxide + total_sulfur_dioxide +
## density + pH + sulphates + alcohol + indice_alcohol_acidez +
## balance_azucar_acidez + indice_mineralidad + potencial_alcoholico +
## relacion_SO2 + alcohol_2 + density_2 + sugar_2 + acidez_2 +
## alcohol_sulphates + density_sugar + acidez_pH + alcohol_acidez_volatil
## <environment: 0x0000017a563a7c78>
##
## KERNEL:
## [1] 1
##
## GRADO POLINOMIAL:
## [1] 3
##
## GAMMA:
## [1] 0.04166667
##
## EPSILON:
## [1] 0.3
##
## COST:
## [1] 1
##
## RHO:
## [1] 0.04132413
##
## INTERCEPTO REAL b:
## [1] -0.04132413
##
## NÚMERO VECTORES SOPORTE:
## [1] 2312
Se manda llamar la función f_crear_modelo_SVR_radial().
modelo_SVR_radial <- f_crear_modelo_SVR_radial(
datos_entrenamiento,
v_independientes,
v_dependiente,
epsilon = epsilon
)
##
## MODELO SVR KERNEL RADIAL
##
## FÓRMULA DEL MODELO:
## quality ~ fixed_acidity + volatile_acidity + citric_acid + residual_sugar +
## chlorides + free_sulfur_dioxide + total_sulfur_dioxide +
## density + pH + sulphates + alcohol + indice_alcohol_acidez +
## balance_azucar_acidez + indice_mineralidad + potencial_alcoholico +
## relacion_SO2 + alcohol_2 + density_2 + sugar_2 + acidez_2 +
## alcohol_sulphates + density_sugar + acidez_pH + alcohol_acidez_volatil
## <environment: 0x0000017a56440388>
##
## KERNEL:
## [1] 2
##
## GAMMA:
## [1] 0.04166667
##
## EPSILON:
## [1] 0.3
##
## COST:
## [1] 1
##
## RHO:
## [1] 0.4416716
##
## INTERCEPTO REAL b:
## [1] -0.4416716
##
## NÚMERO VECTORES SOPORTE:
## [1] 2352
Se manda llamar la función f_crear_modelo_SVR_radial().
modelo_RLM <- f_construir_modelo_RLM(
datos_entrenamiento,
v_dependiente
)
##
## ============================
## Modelo de Regresión Lineal Múltiple
## ============================
## Variable dependiente: quality
## Número de observaciones: 3428
## Número de variables independientes: 24
##
## Call:
## lm(formula = formula_modelo, data = datos_modelo)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.7648 -0.5560 -0.0432 0.5007 3.6553
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.327e-03 1.411e-02 0.165 0.869001
## fixed_acidity 1.808e+00 5.694e-01 3.174 0.001516 **
## volatile_acidity -6.009e-01 1.352e-01 -4.443 9.16e-06 ***
## citric_acid 1.244e-02 1.513e-02 0.822 0.410968
## residual_sugar -3.658e+01 7.630e+00 -4.794 1.70e-06 ***
## chlorides -9.240e+01 6.571e+01 -1.406 0.159769
## free_sulfur_dioxide -4.091e-01 5.485e-02 -7.459 1.10e-13 ***
## total_sulfur_dioxide 2.919e-01 3.861e-02 7.561 5.10e-14 ***
## density 2.066e+00 1.614e+00 1.280 0.200581
## pH 1.048e-01 1.335e-01 0.785 0.432407
## sulphates -4.826e+02 3.433e+02 -1.406 0.159884
## alcohol -2.502e+01 9.173e+00 -2.727 0.006424 **
## indice_alcohol_acidez 6.186e-01 1.709e-01 3.620 0.000299 ***
## balance_azucar_acidez 1.719e-01 4.903e-02 3.505 0.000462 ***
## indice_mineralidad 4.929e+02 3.506e+02 1.406 0.159832
## potencial_alcoholico 2.307e+01 8.649e+00 2.667 0.007694 **
## relacion_SO2 3.795e-01 4.388e-02 8.650 < 2e-16 ***
## alcohol_2 1.077e+00 4.245e-01 2.538 0.011193 *
## density_2 -3.505e+00 1.624e+00 -2.158 0.030968 *
## sugar_2 -4.196e-01 1.149e-01 -3.653 0.000263 ***
## acidez_2 -1.435e+00 3.002e-01 -4.780 1.83e-06 ***
## alcohol_sulphates 2.335e-02 1.358e-01 0.172 0.863529
## density_sugar 3.746e+01 7.763e+00 4.826 1.46e-06 ***
## acidez_pH 1.199e-01 3.154e-01 0.380 0.703946
## alcohol_acidez_volatil 4.828e-01 1.426e-01 3.386 0.000718 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.8233 on 3403 degrees of freedom
## Multiple R-squared: 0.3251, Adjusted R-squared: 0.3203
## F-statistic: 68.3 on 24 and 3403 DF, p-value: < 2.2e-16
Se validan los modelos verificando los postulados ejecutando la función f_validar_postulados_modelos().
Los resultados son académica y pedagógicamente hablando muy enriquecedores:
Primero, los postulados de regresión se aplican para modelos como regresión lineal múltiple no para modelos de soporte de regresión por la arquitectura y como se construyen los modelos.
Segundo, el modelo de regresión lineal múltiple para esos datos queda muy degenerado estadísicamente hablando dado que no cumple con ninguno de los postulados, seguramente hay muchas variables derivadas que corrompen en multicolinealidad.
Tercero: este caso de estudio trata primncipaemnte con modelos de m[quinas de soprite de regresión (SVR), de tal modo que estos modelos fueron diseñados para problemas de no linealidad, heterocedasticidad, alta dimensionalidad, colinealidad, entre otros; de tal forma que, las deficiencias del modelo de regresión lineal múltiple en relación a los postulados de regresión, son subsanadas por los modelos de soporte de regresión. FALTA CITA Vapnik, 1995; Smola & Schölkopf, 2004; James et al., 2021)
resultado_postulados <- f_validar_postulados_modelos(
modelos = list(modelo_RLM, modelo_SVR_lineal, modelo_SVR_polinomial_2,
modelo_SVR_polinomial_3, modelo_SVR_radial),
datos_list = list(datos_validacion, datos_validacion, datos_validacion,
datos_validacion, datos_validacion),
variable_dependiente = v_dependiente,
nombres = c("RLM", "SVR Lineal", "SVR Poly2", "SVR Poly3", "SVR Radial")
)
##
## ============================
## Validación de Postulados
## ============================
## Modelo Tipo VIF_Max Linealidad Homocedasticidad Normalidad
## 1 RLM lm 612207523 No cumple No cumple No cumple
## 2 SVR Lineal svm NA NA NA No cumple
## 3 SVR Poly2 svm NA NA NA No cumple
## 4 SVR Poly3 svm NA NA NA No cumple
## 5 SVR Radial svm NA NA NA No cumple
## Independencia
## 1 No cumple
## 2 Cumple
## 3 Cumple
## 4 Cumple
## 5 Cumple
Se ejecuta la evaluación de los modelos mandando llamar la función f_evaluacion(), y los resultado arrojan algo interesante: el valor de R² ajustado realmente pertenece a: modelos lineales paramétricos como regresión lineal múltiple, no fue diseñado originalmente para modelos como SVR y otros como Random Forest, XGBoost y modelos avanzados de Deep Learning. **(James et al., 2021; Hastie, Tibshirani & Friedman, 2009; Kuhn & Johnson, 2013).
resultado_evaluacion <- f_evaluacion(
modelos = list(modelo_SVR_lineal, modelo_SVR_polinomial_2, modelo_SVR_polinomial_3,
modelo_SVR_radial, modelo_RLM),
datos_validacion_list = list(datos_validacion, datos_validacion, datos_validacion,
datos_validacion, datos_validacion),
variable_dependiente = v_dependiente,
nombres = c("SVR Lineal", "SVR Poly2", "SVR Poly3", "SVR Radial", "RLM")
)
##
## ============================
## EVALUACIÓN DE MODELOS
## ============================
## Modelo Tipo Parametros R_square R_square_ajustado MSE RMSE MAE
## 1 SVR Lineal svm 2468 0.3016 NA 0.7028 0.8383 0.6558
## 2 SVR Poly2 svm 2422 0.1863 NA 0.8189 0.9049 0.6756
## 3 SVR Poly3 svm 2312 0.1809 NA 0.8243 0.9079 0.6723
## 4 SVR Radial svm 2352 0.3939 NA 0.6099 0.7810 0.6004
## 5 RLM lm 24 0.3037 0.2921 0.7007 0.8371 0.6549
Al ejecutar la función f_visualizar_RMSE() con los modelos de regresión construidos, se observa que el mejor modelo predictivo para estos datos resultó ser el modelo de regresión SVR kernel radial ya que tiene mayor valor en r square con valor de 0.3939 y se desvía menos en las predicciones con valor de RMSE aproximado de 0.7810.
f_visualizar_RMSE(modelos = list(modelo_SVR_lineal, modelo_SVR_polinomial_2,
modelo_SVR_polinomial_3, modelo_SVR_radial, modelo_RLM
),
datos = datos_validacion,
variable_dependiente = "quality",
nombres_modelos = c("SVR Lineal", "SVR Poly2", "SVR Poly3",
"SVR Radial", "RLM"),
ncol = 3
)