Evaluar y comparar los modelos de regresión lineal simple y polinomial de segunda y quinta pontecia con datos de Adverstising_WEB.csv
Se cargan los datos de la dirección:https://raw.githubusercontent.com/rpizarrog/Analisis-Inteligente-de-datos/main/datos/Advertising_Web.csv
Los datos contienen variables que en el contexto se interpreta que son inversiones hechas de una empresa y las ventas de la misma, a tanta inversión de marketing en medios tales como TV, Radio, NewsPapers (medios impresos) y Web (digital) existe en relacuón a las ventas (Sales) generadas.
Se trata de comparar modelos predictivos para evaluar cuál es mejor con respecto a los estadísticos R Square y RMSE.
Las variables de interés serán:
TV como variable independiente o la variable explicativa hacia la variables Sales
Sales como variable dependiente que es la variable a predecir.
Se construyen datos de entrenamiento y datos de validacion al 70 y 30% respectivamente
Se construyen el modelo de regresión lineal simple con los datos de entrenamiento y se evaluán los siguiente aspectos:
Se identifican los coeficientes a y b
Se analizan los niveles de confianza de los coeficientes.
Se identifica el valor de R Square par evaluar el grado de explicación de la variable dependiente con respecto a la variable independiente. El modelo se acepta si está por encima del 60%.
Se hacen prediciones con la funcion predict() con los datos de validación.
Se mide el valor de RMSE Root Mean Stándar Error.
Se construye el modelo polinomial a la segunda potencia y quinta potencia con los datos de entrenamiento y se evalúan los siguientes aspectos.
Se identifican los coeficientes
Se analizan los niveles de confianza de los coeficientes.
Se identifica el valor de R Square para evaluar el grado de explicación de la variable independiente con respecto a la variable dependiente. Se acepta si está por encima del 60%
Se hacen prediciones con la funcion predict() con los datos de validación.
Se mide el valor de rmse Root Mean Stándar Error.
library(readr) # Sirve para importar datos
library(Metrics) # Sirve para construir métricas y valorar modelos
library (ggplot2) # Sirve para gráficos
library(caret) # Para partir los datos Entrenamiento y Validación.
library(knitr)
datos <- read.csv("https://raw.githubusercontent.com/rpizarrog/Analisis-Inteligente-de-datos/main/datos/Advertising_Web.csv")
summary(datos)
## X.1 X TV Radio
## Min. : 1.00 Min. : 1.00 Min. : 0.70 Min. : 0.000
## 1st Qu.: 50.75 1st Qu.: 50.75 1st Qu.: 74.38 1st Qu.: 9.975
## Median :100.50 Median :100.50 Median :149.75 Median :22.900
## Mean :100.50 Mean :100.50 Mean :147.04 Mean :23.264
## 3rd Qu.:150.25 3rd Qu.:150.25 3rd Qu.:218.82 3rd Qu.:36.525
## Max. :200.00 Max. :200.00 Max. :296.40 Max. :49.600
## Newspaper Web Sales
## Min. : 0.30 Min. : 4.308 Min. : 1.60
## 1st Qu.: 12.75 1st Qu.: 99.049 1st Qu.:10.38
## Median : 25.75 Median :156.862 Median :12.90
## Mean : 30.55 Mean :159.587 Mean :14.02
## 3rd Qu.: 45.10 3rd Qu.:212.312 3rd Qu.:17.40
## Max. :114.00 Max. :358.247 Max. :27.00
str(datos)
## 'data.frame': 200 obs. of 7 variables:
## $ X.1 : int 1 2 3 4 5 6 7 8 9 10 ...
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ TV : num 230.1 44.5 17.2 151.5 180.8 ...
## $ Radio : num 37.8 39.3 45.9 41.3 10.8 48.9 32.8 19.6 2.1 2.6 ...
## $ Newspaper: num 69.2 45.1 69.3 58.5 58.4 75 23.5 11.6 1 21.2 ...
## $ Web : num 306.6 302.7 49.5 257.8 195.7 ...
## $ Sales : num 22.1 10.4 9.3 18.5 12.9 7.2 11.8 13.2 4.8 10.6 ...
ggplot(datos, aes(x = TV, y = Sales)) +
geom_point(colour = "blue") +
geom_smooth(colour = 'orange', method = lm) +
geom_smooth(colour = 'red')
Se observa que la relación entre las dos variables no es del todo lineal.
Los datos de entrenamiento son el 70% de los datos originales y los de validación el 30%.
Se siembra una semilla de los últimos 4 dígitos del número de control del usuario para generar los mismos valores cada vez que se construya el documento markdown.
set.seed(1280)
Los datos se particionan usando la función createDataPartition() al 70 % el resultado es vector con los registros que pertenecen a datos de entrenamiento de los datos originales.
datos[entrena, ], son los datos de entrenamiento y
datos[- entrena, ] son los datos de validación.
entrena <- createDataPartition(y = datos$Sales, p = 0.70, list = FALSE, times = 1)
# Datos entrenamiento
datos.entrenamiento <- datos[entrena, ] # [renglones, columna]
# Datos validación
datos.validacion <- datos[-entrena, ]
Se despliegan los primeros diez registros de los datos de entrenamiento y no deben aparecer en los datos de validación deben ser diferentes unos con otros.
head(datos.entrenamiento, 10)
## X.1 X TV Radio Newspaper Web Sales
## 2 2 2 44.5 39.3 45.1 302.65307 10.4
## 3 3 3 17.2 45.9 69.3 49.49891 9.3
## 4 4 4 151.5 41.3 58.5 257.81689 18.5
## 6 6 6 8.7 48.9 75.0 22.07240 7.2
## 8 8 8 120.2 19.6 11.6 229.97146 13.2
## 9 9 9 8.6 2.1 1.0 144.61739 4.8
## 10 10 10 199.8 2.6 21.2 111.27226 10.6
## 11 11 11 66.1 5.8 24.2 45.35903 8.6
## 12 12 12 214.7 24.0 4.0 164.97176 17.4
## 13 13 13 23.8 35.1 65.9 87.92109 9.2
paste("Número de observaciones en datos de entrenamiento ", nrow(datos.entrenamiento))
## [1] "Número de observaciones en datos de entrenamiento 142"
Se despliegan los primeros diez registros y no deben estar en los datos de entrenamiento
head(datos.validacion, 10)
## X.1 X TV Radio Newspaper Web Sales
## 1 1 1 230.1 37.8 69.2 306.6348 22.1
## 5 5 5 180.8 10.8 58.4 195.6601 12.9
## 7 7 7 57.5 32.8 23.5 246.8116 11.8
## 20 20 20 147.3 23.9 19.1 268.7354 14.6
## 31 31 31 292.9 28.3 43.2 121.4643 21.4
## 35 35 35 95.7 1.4 7.4 321.1746 9.5
## 43 43 43 293.6 27.7 1.8 174.7168 20.7
## 51 51 51 199.8 3.1 34.6 151.9907 11.4
## 53 53 53 216.4 41.7 39.6 161.8025 22.6
## 54 54 54 182.6 46.2 58.7 176.0501 21.2
paste("Número de observaciones en datos de entrenamiento ", nrow(datos.validacion))
## [1] "Número de observaciones en datos de entrenamiento 58"
La variable dependiente Sales está en función de la variable independiente TV y se designa con el argumento Formula = Sales ~ TV de los datos (data) de entrenamiento.
modelo.simple <- lm(data = datos.entrenamiento, formula = Sales ~ TV)
Generando el resumen del modelo
resumen <- summary(modelo.simple)
resumen
##
## Call:
## lm(formula = Sales ~ TV, data = datos.entrenamiento)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8.5176 -1.8913 -0.1733 1.9935 7.1627
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.872454 0.555186 12.38 <2e-16 ***
## TV 0.048591 0.003232 15.03 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.293 on 140 degrees of freedom
## Multiple R-squared: 0.6175, Adjusted R-squared: 0.6147
## F-statistic: 226 on 1 and 140 DF, p-value: < 2.2e-16
a <- modelo.simple$coefficients[1]
b <- modelo.simple$coefficients[2]
a; b
## (Intercept)
## 6.872454
## TV
## 0.04859124
Los coeficientes tienen un nivel de confianza a 99% (‘***’) por lo que el modelo tiene buenos predictores o al 99% de confianza.
El valor de Multiple R-squared es de 0.6466 o del 64.66% por lo que SI SE ACEPTA EL MODELO por encima del 60% como inicialmente se estableció como meta.
resumen$r.squared
## [1] 0.617451
Con la función predict() se generan predicciones de los datos de validación.
Las predicciones estarán en función de la fórmula y de los valores de los coeficentes a y b:
\[ Y = a + b \cdot x_i \\ \therefore\\ Y = 6.801923 + 0.05013817 \cdot TV_i \]
predicciones <- predict(object = modelo.simple, newdata = datos.validacion)
ggplot(data = datos.entrenamiento, aes(x = TV, y = Sales)) +
geom_point(colour = "blue") +
geom_line(aes(x = TV, y = modelo.simple$fitted.values, colour = 'red'))
Se construye una tabla comparativa con los datos de validación y las predicciones generadas para comparar y generar el estadístico rmse.
tabla <- data.frame(TV = datos.validacion$TV, Sales.real = datos.validacion$Sales, Sales.predicciones = predicciones)
tabla
## TV Sales.real Sales.predicciones
## 1 230.1 22.1 18.053297
## 5 180.8 12.9 15.657749
## 7 57.5 11.8 9.666450
## 20 147.3 14.6 14.029943
## 31 292.9 21.4 21.104827
## 35 95.7 9.5 11.522635
## 43 293.6 20.7 21.138841
## 51 199.8 11.4 16.580983
## 53 216.4 22.6 17.387597
## 54 182.6 21.2 15.745214
## 64 102.7 14.0 11.862774
## 66 69.0 9.3 10.225249
## 67 31.5 9.5 8.403078
## 73 26.8 8.8 8.174699
## 77 27.5 6.9 8.208713
## 80 116.0 11.0 12.509037
## 88 110.7 16.0 12.251504
## 89 88.3 12.9 11.163060
## 90 109.8 16.7 12.207772
## 97 197.6 11.7 16.474082
## 101 222.4 11.7 17.679145
## 110 255.4 19.8 19.282656
## 114 209.6 15.9 17.057177
## 116 75.1 12.6 10.521656
## 118 76.4 9.4 10.584824
## 119 125.7 15.9 12.980372
## 125 229.5 19.7 18.024143
## 126 87.2 10.6 11.109610
## 127 7.8 6.6 7.251466
## 131 0.7 1.6 6.906468
## 134 219.8 19.6 17.552808
## 137 25.6 9.5 8.116390
## 139 43.0 9.6 8.961877
## 140 184.9 20.7 15.856973
## 142 193.7 19.2 16.284576
## 143 220.5 20.1 17.586821
## 147 240.1 13.2 18.539210
## 149 38.0 10.9 8.718921
## 151 280.7 16.1 20.512014
## 152 121.0 11.6 12.751993
## 154 171.3 19.0 15.196133
## 159 11.7 7.3 7.440971
## 160 131.7 12.9 13.271920
## 161 172.5 14.4 15.254442
## 162 85.7 13.3 11.036723
## 164 163.5 18.0 14.817121
## 167 17.9 8.0 7.742237
## 168 206.8 12.2 16.921122
## 169 215.4 17.1 17.339006
## 170 284.3 15.0 20.686942
## 173 19.6 7.6 7.824842
## 174 168.4 11.7 15.055218
## 175 222.4 11.5 17.679145
## 176 276.9 27.0 20.327367
## 192 75.5 9.9 10.541092
## 193 17.2 5.9 7.708223
## 195 149.7 17.3 14.146562
## 200 232.1 13.4 18.150480
Se determina la variación de los valores reales contra las predicciones por medio del estadístico rmse (Root Mean Stándar Error) que servirá para compararse con otro modelo concluyendo que en el que tenga menor error es mas eficiente el modelo.
rmse Root Mean Stándar Error, este valor normalmente se compara contra otro modelo y el que esté mas cerca de cero es mejor.
RMSE es una forma útil de ver qué tan bien un modelo de regresión puede ajustarse a un conjunto de datos.
Cuanto mayor sea el rmse, mayor será la diferencia entre los valores predichos y reales, lo que significa que peor se ajusta un modelo de regresión a los datos. Por el contrario, cuanto más pequeño sea el rmse, mejor podrá un modelo ajustar los datos.
\[ rmse = \sqrt{\frac{\sum(predicho_i - real_i)^{2}}{n}} \]
Se obtiene la métrica con la función rmse() de la librería Metrics previamente argada.
rmse.lineal <- rmse(actual = tabla$Sales.real, predicted = tabla$Sales.predicciones)
rmse.lineal
## [1] 3.177805
El valor de rmse es de: 3.1778053 y habrá que compararse con otro modelo que se haya construído con los mismos datos y las mismas variables, ejemplo modelos de regresión polinomial.
La variable dependiente Sales está en función de la variable independiente TV y se designa con el argumento Formula = Sales ~ TV de los datos (data) de entrenamiento pero en función de elevar al cuadrado el valor del coeficiente TV.
\[ Y = \beta0 + \beta_1\cdot x_i+\beta_2\cdot x_i^2 + ... \beta_n \cdot x_i^n \]
modelo.poly2 <- lm(data = datos.entrenamiento, formula = Sales ~ poly(x = TV, degree = 2, raw = TRUE))
modelo.poly2.I <- lm(Sales ~ TV + I(x = TV ^ 2), data = datos.entrenamiento)
Generando el resumen del modelo
resumen <- summary(modelo.poly2)
resumen
##
## Call:
## lm(formula = Sales ~ poly(x = TV, degree = 2, raw = TRUE), data = datos.entrenamiento)
##
## Residuals:
## Min 1Q Median 3Q Max
## -7.9559 -1.8523 -0.3198 1.9294 7.0289
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.100e+00 8.138e-01 7.496 7.01e-12
## poly(x = TV, degree = 2, raw = TRUE)1 6.491e-02 1.301e-02 4.990 1.77e-06
## poly(x = TV, degree = 2, raw = TRUE)2 -5.623e-05 4.342e-05 -1.295 0.197
##
## (Intercept) ***
## poly(x = TV, degree = 2, raw = TRUE)1 ***
## poly(x = TV, degree = 2, raw = TRUE)2
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.285 on 139 degrees of freedom
## Multiple R-squared: 0.622, Adjusted R-squared: 0.6166
## F-statistic: 114.4 on 2 and 139 DF, p-value: < 2.2e-16
Los coeficientes tienen un nivel de confianza a 99% (‘***’) excepto el predictor b2 que tienen un nivel de confianza por debajo del 90%. Sin embargo se aceptan los predictores.
b0 <- modelo.poly2$coefficients[1]
b1 <- modelo.poly2$coefficients[2]
b2 <- modelo.poly2$coefficients[3]
b0; b1; b2
## (Intercept)
## 6.100287
## poly(x = TV, degree = 2, raw = TRUE)1
## 0.06490975
## poly(x = TV, degree = 2, raw = TRUE)2
## -5.622693e-05
bI0 <- modelo.poly2$coefficients[1]
bI1 <- modelo.poly2$coefficients[2]
bI2 <- modelo.poly2$coefficients[3]
bI0; bI1; bI2
## (Intercept)
## 6.100287
## poly(x = TV, degree = 2, raw = TRUE)1
## 0.06490975
## poly(x = TV, degree = 2, raw = TRUE)2
## -5.622693e-05
Deben ser los mismos valores.
El valor de Multiple R-squared es de 0.6299282 o del 62.99% por lo que SI SE ACEPTA EL MODELO por encima del 60% como inicialmente se estableció como meta.
resumen$r.squared
## [1] 0.6220111
Con la función predict() se generan predicciones de los datos de validación.
Las predicciones estarán en función de la fórmula y de los valores de los coeficentes a y b:
\[ Y = \beta0 + \beta_1\cdot x+\beta_2\cdot x^2 + ... \beta_n \cdot x^n \\ \therefore Y = 6.108493 + 0.06526148 \cdot TV_i + -5.309162e-05 \cdot TV_i^2 \]
predicciones <- predict(object = modelo.poly2, newdata = datos.validacion)
ggplot(data = datos.entrenamiento, aes(x = TV, y = Sales)) +
geom_point(colour = "blue") +
geom_line(aes(x = TV, y = modelo.poly2$fitted.values, colour = 'red'))
Se construye una tabla comparativa con los datos de validación y las predicciones generadas para comparar y generar el estadístico rmse.
tabla <- data.frame(TV = datos.validacion$TV, Sales.real = datos.validacion$Sales, Sales.predicciones = predicciones)
tabla
## TV Sales.real Sales.predicciones
## 1 230.1 22.1 18.059029
## 5 180.8 12.9 15.997988
## 7 57.5 11.8 9.646697
## 20 147.3 14.6 14.441521
## 31 292.9 21.4 20.288622
## 35 95.7 9.5 11.797196
## 43 293.6 20.7 20.310975
## 51 199.8 11.4 16.824674
## 53 216.4 22.6 17.513708
## 54 182.6 21.2 16.078046
## 64 102.7 14.0 12.173477
## 66 69.0 9.3 10.311363
## 67 31.5 9.5 8.089153
## 73 26.8 8.8 7.799484
## 77 27.5 6.9 7.842783
## 80 116.0 11.0 12.873228
## 88 110.7 16.0 12.596764
## 89 88.3 12.9 11.393423
## 90 109.8 16.7 12.549503
## 97 197.6 11.7 16.731031
## 101 222.4 11.7 17.755133
## 110 255.4 19.8 19.010602
## 114 209.6 15.9 17.235200
## 116 75.1 12.6 10.657889
## 118 76.4 9.4 10.731197
## 119 125.7 15.9 13.371030
## 125 229.5 19.7 18.035588
## 126 87.2 10.6 11.332877
## 127 7.8 6.6 6.603162
## 131 0.7 1.6 6.145696
## 134 219.8 19.6 17.651013
## 137 25.6 9.5 7.725128
## 139 43.0 9.6 8.787443
## 140 184.9 20.7 16.179813
## 142 193.7 19.2 16.563689
## 143 220.5 20.1 17.679120
## 147 240.1 13.2 18.443748
## 149 38.0 10.9 8.485666
## 151 280.7 16.1 19.890194
## 152 121.0 11.6 13.131148
## 154 171.3 19.0 15.569422
## 159 11.7 7.3 6.852034
## 160 131.7 12.9 13.673651
## 161 172.5 14.4 15.624116
## 162 85.7 13.3 11.250094
## 164 163.5 18.0 15.209959
## 167 17.9 8.0 7.244156
## 168 206.8 12.2 17.119009
## 169 215.4 17.1 17.473077
## 170 284.3 15.0 20.009504
## 173 19.6 7.6 7.350918
## 174 168.4 11.7 15.436574
## 175 222.4 11.5 17.755133
## 176 276.9 27.0 19.762675
## 192 75.5 9.9 10.680465
## 193 17.2 5.9 7.200100
## 195 149.7 17.3 14.557226
## 200 232.1 13.4 18.136872
Se determina la variación de los valores reales contra las predicciones por medio del estadístico rmse (Root Mean Stándar Error) que servirá para compararse con otro modelo concluyendo que en el que tenga menor error es mas eficiente el modelo.
rmse Root Mean Stándar Error, este valor normalmente se compara contra otro modelo y el que esté mas cerca de cero es mejor.
RMSE es una forma útil de ver qué tan bien un modelo de regresión puede ajustarse a un conjunto de datos.
Cuanto mayor sea el rmse, mayor será la diferencia entre los valores predichos y reales, lo que significa que peor se ajusta un modelo de regresión a los datos. Por el contrario, cuanto más pequeño sea el rmse, mejor podrá un modelo ajustar los datos.
\[ rmse = \sqrt{\frac{\sum(predicho_i - real_i)^{2}}{n}} \]
Se obtiene la métrica con la función rmse() de la librería Metrics previamente argada.
rmse.poly2 <- rmse(actual = tabla$Sales.real, predicted = tabla$Sales.predicciones)
rmse.poly2
## [1] 3.125634
El valor de rmse es de: 3.1256335 y habrá que compararse con otro modelo que se haya construido con los mismos datos y las mismas variables, ejemplo modelos de regresión polinomial.
La variable dependiente Sales está en función de la variable independiente TV y se designa con el argumento Formula = Sales ~ TV de los datos (data) de entrenamiento pero en función de elevar a la quinta potencia el valor del coeficiente TV.
\[ Y = \beta0 + \beta_1\cdot x_i+\beta_2\cdot x_i^2 + ... \beta_5\cdot x_i^5 \]
modelo.poly5 <- lm(data = datos.entrenamiento, formula = Sales ~ poly(x = TV, degree = 5, raw = TRUE))
Generando el resumen del modelo
resumen <- summary(modelo.poly5)
resumen
##
## Call:
## lm(formula = Sales ~ poly(x = TV, degree = 5, raw = TRUE), data = datos.entrenamiento)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8.2326 -1.8096 -0.2427 1.7056 7.1443
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.164e+00 1.727e+00 1.832 0.0692 .
## poly(x = TV, degree = 5, raw = TRUE)1 3.088e-01 1.235e-01 2.501 0.0136 *
## poly(x = TV, degree = 5, raw = TRUE)2 -5.085e-03 2.588e-03 -1.965 0.0515 .
## poly(x = TV, degree = 5, raw = TRUE)3 4.122e-05 2.203e-05 1.871 0.0635 .
## poly(x = TV, degree = 5, raw = TRUE)4 -1.466e-07 8.156e-08 -1.798 0.0744 .
## poly(x = TV, degree = 5, raw = TRUE)5 1.890e-10 1.091e-10 1.732 0.0855 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.274 on 136 degrees of freedom
## Multiple R-squared: 0.6328, Adjusted R-squared: 0.6193
## F-statistic: 46.88 on 5 and 136 DF, p-value: < 2.2e-16
Los coeficientes tienen un nivel de confianza por encima del 90% (‘***’) excepto el predictor b5 que tienen un nivel de confianza por debajo del 90%. Sin embargo se aceptan los predictores.
b0 <- modelo.poly5$coefficients[1]
b1 <- modelo.poly5$coefficients[2]
b2 <- modelo.poly5$coefficients[3]
b3 <- modelo.poly5$coefficients[4]
b4 <- modelo.poly5$coefficients[5]
b5 <- modelo.poly5$coefficients[6]
b0; b1; b2; b3; b4; b5
## (Intercept)
## 3.163744
## poly(x = TV, degree = 5, raw = TRUE)1
## 0.3087566
## poly(x = TV, degree = 5, raw = TRUE)2
## -0.005084799
## poly(x = TV, degree = 5, raw = TRUE)3
## 4.121865e-05
## poly(x = TV, degree = 5, raw = TRUE)4
## -1.466352e-07
## poly(x = TV, degree = 5, raw = TRUE)5
## 1.890209e-10
El valor de Multiple R-squared es de 0.6426 o del 64.26% por lo que SI SE ACEPTA EL MODELO por encima del 60% como inicialmente se estableció como meta.
resumen$r.squared
## [1] 0.6328094
Con la función predict() se generan predicciones de los datos de validación.
Las predicciones estarán en función de la fórmula y de los valores de los coeficentes a y b:
\[ Y = \beta0 + \beta_1\cdot x+\beta_2\cdot x^2 \beta_3\cdot x^3+ \beta_4\cdot x^4 + \beta_5\cdot x^5 \\ \therefore \\ Y = 3.200194 + 0.2979779\cdot TV_i + -0.004548809 \cdot TV_i^2 + 3.519913e-05 \cdot TV_i^3 + -1.218158e-07 \cdot TV_i^4 + 1.547874e-10 \cdot TV_i^5 \]
predicciones <- predict(object = modelo.poly5, newdata = datos.validacion)
ggplot(data = datos.entrenamiento, aes(x = TV, y = Sales)) +
geom_point(colour = "blue") +
geom_line(aes(x = TV, y = modelo.poly5$fitted.values, colour = 'red'))
Se construye una tabla comparativa con los datos de validación y las predicciones generadas para comparar y generar el estadístico rmse.
tabla <- data.frame(TV = datos.validacion$TV, Sales.real = datos.validacion$Sales, Sales.predicciones = predicciones)
tabla
## TV Sales.real Sales.predicciones
## 1 230.1 22.1 18.016211
## 5 180.8 12.9 16.209365
## 7 57.5 11.8 10.457582
## 20 147.3 14.6 14.128313
## 31 292.9 21.4 21.360705
## 35 95.7 9.5 11.487316
## 43 293.6 20.7 21.471419
## 51 199.8 11.4 17.134545
## 53 216.4 22.6 17.700818
## 54 182.6 21.2 16.308420
## 64 102.7 14.0 11.737583
## 66 69.0 9.3 10.771757
## 67 31.5 9.5 8.994002
## 73 26.8 8.8 8.506695
## 77 27.5 6.9 8.585501
## 80 116.0 11.0 12.316227
## 88 110.7 16.0 12.069281
## 89 88.3 12.9 11.259421
## 90 109.8 16.7 12.029484
## 97 197.6 11.7 17.042108
## 101 222.4 11.7 17.852689
## 110 255.4 19.8 18.523192
## 114 209.6 15.9 17.496391
## 116 75.1 12.6 10.918947
## 118 76.4 9.4 10.950318
## 119 125.7 15.9 12.820910
## 125 229.5 19.7 18.004466
## 126 87.2 10.6 11.228339
## 127 7.8 6.6 5.281710
## 131 0.7 1.6 3.377396
## 134 219.8 19.6 17.789891
## 137 25.6 9.5 8.366173
## 139 43.0 9.6 9.842128
## 140 184.9 20.7 16.431845
## 142 193.7 19.2 16.868309
## 143 220.5 20.1 17.807232
## 147 240.1 13.2 18.199304
## 149 38.0 10.9 9.525018
## 151 280.7 16.1 19.872836
## 152 121.0 11.6 12.568271
## 154 171.3 19.0 15.655317
## 159 11.7 7.3 6.143448
## 160 131.7 12.9 13.163152
## 161 172.5 14.4 15.727862
## 162 85.7 13.3 11.186966
## 164 163.5 18.0 15.170273
## 167 17.9 8.0 7.282963
## 168 206.8 12.2 17.401302
## 169 215.4 17.1 17.673018
## 170 284.3 15.0 20.233342
## 173 19.6 7.6 7.551261
## 174 168.4 11.7 15.477486
## 175 222.4 11.5 17.852689
## 176 276.9 27.0 19.551504
## 192 75.5 9.9 10.928581
## 193 17.2 5.9 7.167261
## 195 149.7 17.3 14.282594
## 200 232.1 13.4 18.054443
Se determina la variación de los valores reales contra las predicciones por medio del estadístico rmse (Root Mean Stándar Error) que servirá para compararse con otro modelo concluyendo que en el que tenga menor error es mas eficiente el modelo.
rmse Root Mean Stándar Error, este valor normalmente se compara contra otro modelo y el que esté mas cerca de cero es mejor.
RMSE es una forma útil de ver qué tan bien un modelo de regresión puede ajustarse a un conjunto de datos.
Cuanto mayor sea el rmse, mayor será la diferencia entre los valores predichos y reales, lo que significa que peor se ajusta un modelo de regresión a los datos. Por el contrario, cuanto más pequeño sea el rmse, mejor podrá un modelo ajustar los datos.
\[ rmse = \sqrt{\frac{\sum(predicho_i - real_i)^{2}}{n}} \]
Se obtiene la métrica con la función rmse() de la librería Metrics previamente argada.
rmse.poly5 <- rmse(actual = tabla$Sales.real, predicted = tabla$Sales.predicciones)
rmse.poly5
## [1] 3.112435
El valor de rmse es de: 3.1124349 y habrá que compararse con otro modelo que se haya construido con los mismos datos y las mismas variables, ejemplo modelos de regresión polinomial.
Cabe señalar que en esta ocasión la semilla que se le proporcionó fue de 1280, los últimos 4 dígitos del número de control del usuario. Los tres modelos tienen un R Square por encima del 60% lo que significa que se acepta el modelo conforme a la métrica que se estableció como estádistico de medición. Por consiguiente, se puede definir con certeza que la variable TV explica al menos el 60% a la variable Sales.
En el ejemplo los coeficientes de los tres modelos son diferentes de 0 con niveles de confianza mayormente por encima del 90%. A continuación se listan los modelos utilizados y se define cual es el más eficiente según el error de variación (rmse) que tenga.
rmse = Root Mean Standar Error
modelos <- c("Lineal Simple", "Polinomial Segundo nivel", "Polinomial Quinto nivel")
rmse <- c(c(rmse.lineal, rmse.poly2, rmse.poly5))
comparativo.rmse <- data.frame(modelos, rmse)
kable(x = comparativo.rmse, caption = "Comparativo con rmse", )
| modelos | rmse |
|---|---|
| Lineal Simple | 3.177805 |
| Polinomial Segundo nivel | 3.125634 |
| Polinomial Quinto nivel | 3.112435 |
Después de haber analizado los datos arrojados, el modelo más óptimo con respecto a la métrica de rmse es Polinomial de Quinto Nivel con un valor de 3.112435 comparado con los otros dos y que significa que las predicciones tienen menor variación o diferencia con respecto a los valores reales.