1 Objetivo

Evaluar y comparar los modelos de regresión lineal simple y polinomial de segunda y quinta pontecia con datos de Adverstising_WEB.csv

2 Descripción

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.

3 Desarrollo

3.1 Cargar librerías

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)

3.2 Cargar datos

datos <- read.csv("https://raw.githubusercontent.com/rpizarrog/Analisis-Inteligente-de-datos/main/datos/Advertising_Web.csv")

3.3 Describir datos

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 ...

3.3.1 Visualizar la dispersión de los datos

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.

3.4 Construir Datos de entrenamiento y validación

Los datos de entrenamiento son el 70% de los datos originales y los de validación el 30%.

Se siembra una semilla del año en curso 1287 para generar los mismos valores cada vez que se cnstruya el documento markdown.

set.seed(1287)

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, ]

3.4.1 Datos de entrenamiento 70%

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
## 1    1  1 230.1  37.8      69.2 306.63475  22.1
## 2    2  2  44.5  39.3      45.1 302.65307  10.4
## 5    5  5 180.8  10.8      58.4 195.66008  12.9
## 6    6  6   8.7  48.9      75.0  22.07240   7.2
## 7    7  7  57.5  32.8      23.5 246.81160  11.8
## 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
## 15  15 15 204.1  32.9      46.0 245.77496  19.0
paste("Número de observaciones en datos de entrenamiento ", nrow(datos.entrenamiento))
## [1] "Número de observaciones en datos de entrenamiento  142"

3.4.2 Datos de validación 30%

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
## 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
## 8    8  8 120.2  19.6      11.6 229.97146  13.2
## 13  13 13  23.8  35.1      65.9  87.92109   9.2
## 14  14 14  97.5   7.6       7.2 173.65804   9.7
## 18  18 18 281.4  39.6      55.8  41.75531  24.4
## 21  21 21 218.4  27.7      53.4  59.96055  18.0
## 23  23 23  13.2  15.9      49.6 219.88278   5.6
## 25  25 25  62.3  12.6      18.3 256.96524   9.7
## 27  27 27 142.9  29.3      12.6 275.51248  15.0
paste("Número de observaciones en datos de entrenamiento ", nrow(datos.validacion))
## [1] "Número de observaciones en datos de entrenamiento  58"

3.5 Modelo de regresión lineal simple

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)

3.5.1 Resumen del modelo

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.5099 -1.6646 -0.3083  2.1009  7.0888 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 7.070201   0.543270   13.01   <2e-16 ***
## TV          0.047848   0.003222   14.85   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.258 on 140 degrees of freedom
## Multiple R-squared:  0.6117, Adjusted R-squared:  0.609 
## F-statistic: 220.6 on 1 and 140 DF,  p-value: < 2.2e-16

3.5.2 El valor de los coeficientes a y b

a <- modelo.simple$coefficients[1]
b <- modelo.simple$coefficients[2]
a; b
## (Intercept) 
##    7.070201
##         TV 
## 0.04784841

Los coeficientes tienen un nivel de confianza a 99% (‘***’) por lo que el modelo tiene buenos predictores o al 99% de confianza.

3.5.3 Valor de R Square

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.6117312

3.5.4 Predicciones del modelo

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)

3.5.4.1 Estimación lineal

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'))

3.5.4.2 Generar tabla comparativa

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
## 3    17.2        9.3           7.893194
## 4   151.5       18.5          14.319235
## 8   120.2       13.2          12.821580
## 13   23.8        9.2           8.208993
## 14   97.5        9.7          11.735421
## 18  281.4       24.4          20.534743
## 21  218.4       18.0          17.520294
## 23   13.2        5.6           7.701800
## 25   62.3        9.7          10.051157
## 27  142.9       15.0          13.907739
## 36  290.7       12.8          20.979734
## 37  266.9       25.4          19.840941
## 42  177.0       17.1          15.539370
## 45   25.1        8.5           8.271196
## 49  227.2       14.8          17.941360
## 50   66.9        9.7          10.271260
## 52  100.4       10.7          11.874181
## 53  216.4       22.6          17.424597
## 55  262.7       20.2          19.639978
## 56  198.9       23.7          16.587250
## 68  139.3       13.4          13.735485
## 69  237.4       18.9          18.429413
## 73   26.8        8.8           8.352539
## 75  213.4       17.0          17.281052
## 86  193.2       15.2          16.314514
## 88  110.7       16.0          12.367020
## 89   88.3       12.9          11.295216
## 91  134.3       11.2          13.496243
## 93  217.7       19.4          17.486800
## 95  107.4       11.5          12.209120
## 97  197.6       11.7          16.525047
## 98  184.9       15.5          15.917372
## 99  289.7       25.4          20.931885
## 101 222.4       11.7          17.711687
## 106 137.9       19.2          13.668497
## 108  90.4        8.7          11.395697
## 109  13.1        5.3           7.697015
## 112 241.7       21.8          18.635162
## 116  75.1       12.6          10.663617
## 119 125.7       15.9          13.084746
## 121 141.3       15.5          13.831181
## 128  80.2        8.8          10.907644
## 130  59.6        9.7           9.921966
## 131   0.7        1.6           7.103695
## 133   8.4        5.7           7.472128
## 136  48.3       11.6           9.381279
## 138 273.7       20.8          20.166311
## 141  73.4       10.9          10.582274
## 151 280.7       16.1          20.501250
## 155 187.8       15.6          16.056132
## 166 234.5       11.9          18.290653
## 167  17.9        8.0           7.926688
## 168 206.8       12.2          16.965252
## 170 284.3       15.0          20.673504
## 174 168.4       11.7          15.127873
## 177 248.4       20.2          18.955746
## 182 218.5       12.2          17.525079
## 198 177.0       12.8          15.539370

3.5.4.3 Evaluar predicciones con rmse

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.263517

El valor de rmse es de: 3.263517 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.


3.6 Modelo de regresión polinomial de segundo nivel

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 \]

3.6.1 Usando argumento Poly

modelo.poly2 <- lm(data = datos.entrenamiento, formula = Sales ~ poly(x = TV, degree = 2, raw = TRUE))

3.6.2 Usando argumento I

modelo.poly2.I <- lm(Sales ~ TV + I(x = TV ^ 2), data = datos.entrenamiento)

3.6.3 Resumen del modelo

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.8414 -1.7524 -0.2511  2.0455  7.3524 
## 
## Coefficients:
##                                         Estimate Std. Error t value Pr(>|t|)
## (Intercept)                            6.229e+00  7.925e-01   7.861 9.50e-13
## poly(x = TV, degree = 2, raw = TRUE)1  6.594e-02  1.286e-02   5.127 9.68e-07
## poly(x = TV, degree = 2, raw = TRUE)2 -6.312e-05  4.346e-05  -1.453    0.149
##                                          
## (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.245 on 139 degrees of freedom
## Multiple R-squared:  0.6175, Adjusted R-squared:  0.612 
## F-statistic: 112.2 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.

3.6.4 El valor de los coeficientes con modelo Poly

b0 <- modelo.poly2$coefficients[1]
b1 <- modelo.poly2$coefficients[2]
b2 <- modelo.poly2$coefficients[3]
b0; b1; b2
## (Intercept) 
##    6.229294
## poly(x = TV, degree = 2, raw = TRUE)1 
##                            0.06593753
## poly(x = TV, degree = 2, raw = TRUE)2 
##                         -6.312246e-05

3.6.5 Coeficientes con el modelo I

bI0 <- modelo.poly2$coefficients[1]
bI1 <- modelo.poly2$coefficients[2]
bI2 <- modelo.poly2$coefficients[3]
bI0; bI1; bI2
## (Intercept) 
##    6.229294
## poly(x = TV, degree = 2, raw = TRUE)1 
##                            0.06593753
## poly(x = TV, degree = 2, raw = TRUE)2 
##                         -6.312246e-05

Deben ser los mismos valores.

3.6.6 Valor de R Square

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.6175364

3.6.7 Predicciones del modelo

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)

3.6.7.1 Curva de estimación

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'))

3.6.7.2 Generar tabla comparativa

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
## 3    17.2        9.3           7.344746
## 4   151.5       18.5          14.770027
## 8   120.2       13.2          13.242989
## 13   23.8        9.2           7.762852
## 14   97.5        9.7          12.058145
## 18  281.4       24.4          19.785701
## 21  218.4       18.0          17.619199
## 23   13.2        5.6           7.088671
## 25   62.3        9.7          10.092206
## 27  142.9       15.0          14.362780
## 36  290.7       12.8          20.063075
## 37  266.9       25.4          19.331453
## 42  177.0       17.1          15.922673
## 45   25.1        8.5           7.844558
## 49  227.2       14.8          17.951929
## 50   66.9        9.7          10.358003
## 52  100.4       10.7          12.213137
## 53  216.4       22.6          17.542215
## 55  262.7       20.2          19.194920
## 56  198.9       23.7          16.847067
## 68  139.3       13.4          14.189532
## 69  237.4       18.9          18.325359
## 73   26.8        8.8           7.951083
## 75  213.4       17.0          17.425793
## 86  193.2       15.2          16.612300
## 88  110.7       16.0          12.755045
## 89   88.3       12.9          11.559419
## 91  134.3       11.2          13.946196
## 93  217.7       19.4          17.592312
## 95  107.4       11.5          12.582882
## 97  197.6       11.7          16.793885
## 98  184.9       15.5          16.263111
## 99  289.7       25.4          20.033774
## 101 222.4       11.7          17.771652
## 106 137.9       19.2          14.121716
## 108  90.4        8.7          11.674200
## 109  13.1        5.3           7.082243
## 112 241.7       21.8          18.478850
## 116  75.1       12.6          10.825191
## 119 125.7       15.9          13.520275
## 121 141.3       15.5          14.285983
## 128  80.2        8.8          11.111478
## 130  59.6        9.7           9.934950
## 131   0.7        1.6           6.275420
## 133   8.4        5.7           6.778716
## 136  48.3       11.6           9.266819
## 138 273.7       20.8          19.547785
## 141  73.4       10.9          10.729033
## 151 280.7       16.1          19.764382
## 155 187.8       15.6          16.386105
## 166 234.5       11.9          18.220524
## 167  17.9        8.0           7.389351
## 168 206.8       12.2          17.165664
## 170 284.3       15.0          19.873366
## 174 168.4       11.7          15.543111
## 177 248.4       20.2          18.713358
## 182 218.5       12.2          17.623035
## 198 177.0       12.8          15.922673

3.6.7.3 Evaluar predicciones con rmse

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.219121

El valor de rmse es de: 3.219121 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.


3.7 Modelo de regresión polinomial de quinto nivel

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 \]

3.7.1 Usando argumento Poly

modelo.poly5 <- lm(data = datos.entrenamiento, formula = Sales ~ poly(x = TV, degree = 5, raw = TRUE))

3.7.2 Resumen del modelo

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 
## -7.5221 -1.8555 -0.3273  1.8676  7.6583 
## 
## Coefficients:
##                                         Estimate Std. Error t value Pr(>|t|)   
## (Intercept)                            3.038e+00  1.707e+00   1.780  0.07728 . 
## poly(x = TV, degree = 5, raw = TRUE)1  3.268e-01  1.191e-01   2.744  0.00688 **
## poly(x = TV, degree = 5, raw = TRUE)2 -5.547e-03  2.475e-03  -2.241  0.02664 * 
## poly(x = TV, degree = 5, raw = TRUE)3  4.618e-05  2.100e-05   2.199  0.02956 * 
## poly(x = TV, degree = 5, raw = TRUE)4 -1.689e-07  7.762e-08  -2.176  0.03131 * 
## poly(x = TV, degree = 5, raw = TRUE)5  2.232e-10  1.037e-10   2.152  0.03312 * 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.215 on 136 degrees of freedom
## Multiple R-squared:  0.6327, Adjusted R-squared:  0.6192 
## F-statistic: 46.85 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.

3.7.3 El valor de los coeficientes con modelo Poly

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.037951
## poly(x = TV, degree = 5, raw = TRUE)1 
##                             0.3268074
## poly(x = TV, degree = 5, raw = TRUE)2 
##                          -0.005546701
## poly(x = TV, degree = 5, raw = TRUE)3 
##                          4.618277e-05
## poly(x = TV, degree = 5, raw = TRUE)4 
##                         -1.688769e-07
## poly(x = TV, degree = 5, raw = TRUE)5 
##                          2.232354e-10

3.7.4 Valor de R Square

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.6326911

3.7.5 Predicciones del modelo

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)

3.7.5.1 Curva de estimación

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'))

3.7.5.2 Generar tabla comparativa

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
## 3    17.2        9.3           7.238657
## 4   151.5       18.5          14.681113
## 8   120.2       13.2          12.733658
## 13   23.8        9.2           8.244216
## 14   97.5        9.7          11.683996
## 18  281.4       24.4          19.837567
## 21  218.4       18.0          17.649340
## 23   13.2        5.6           6.486533
## 25   62.3        9.7          10.702370
## 27  142.9       15.0          14.119399
## 36  290.7       12.8          21.262255
## 37  266.9       25.4          18.582690
## 42  177.0       17.1          16.232701
## 45   25.1        8.5           8.411834
## 49  227.2       14.8          17.757385
## 50   66.9        9.7          10.820828
## 52  100.4       10.7          11.794805
## 53  216.4       22.6          17.617791
## 55  262.7       20.2          18.374207
## 56  198.9       23.7          17.190185
## 68  139.3       13.4          13.886485
## 69  237.4       18.9          17.849120
## 73   26.8        8.8           8.617459
## 75  213.4       17.0          17.564516
## 86  193.2       15.2          16.985545
## 88  110.7       16.0          12.244211
## 89   88.3       12.9          11.375289
## 91  134.3       11.2          13.568650
## 93  217.7       19.4          17.638641
## 95  107.4       11.5          12.090718
## 97  197.6       11.7          17.146420
## 98  184.9       15.5          16.629825
## 99  289.7       25.4          21.079507
## 101 222.4       11.7          17.703982
## 106 137.9       19.2          13.796713
## 108  90.4        8.7          11.440375
## 109  13.1        5.3           6.466195
## 112 241.7       21.8          17.890613
## 116  75.1       12.6          11.020494
## 119 125.7       15.9          13.046108
## 121 141.3       15.5          14.015563
## 128  80.2        8.8          11.148723
## 130  59.6        9.7          10.627215
## 131   0.7        1.6           3.264014
## 133   8.4        5.7           5.418300
## 136  48.3       11.6          10.226304
## 138 273.7       20.8          19.052196
## 141  73.4       10.9          10.979077
## 151 280.7       16.1          19.753031
## 155 187.8       15.6          16.761658
## 166 234.5       11.9          17.823728
## 167  17.9        8.0           7.358532
## 168 206.8       12.2          17.419390
## 170 284.3       15.0          20.219333
## 174 168.4       11.7          15.745780
## 177 248.4       20.2          17.977583
## 182 218.5       12.2          17.650840
## 198 177.0       12.8          16.232701

3.7.5.3 Evaluar predicciones con rmse

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.24797

El valor de rmse es de: 3.2479695 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.

4 Interpretación

De acuerdo al valor de la métrica RMSE se puede observar que el mejor modelo es el de regresión polinomial de quinto nivel, seguido del modelo de regresión polinomial de segundo nivel y por último el modelo de regresión lineal simple debido a que el valor de RMSE es menor. El valor de R2 es mayor para el modelo de regresión polinomial de quinto nivel, seguido del modelo de regresión polinomial de segundo nivel y por último el modelo de regresión lineal simple debido a que el valor de R2 es mayor.