1 Objetivo

Realizar y evaluar el rendimiento de modelos de regresión lineal simple y polinómico de variables Valor económica

2 Descripción

  • Cargar librerías

  • Cargar datos de FIFA

  • Métricas a evaluar

  • Explorar datos

    • Variables independiente y dependiente

    • Visualizar dispersión de los datos

  • Construir datos de entrenamiento y datos de validación.

  • Regresión Lineal Simple

    • Construir el modelo

    • Predicciones

    • Metricas del modelo

  • Regresión Polinómica de segundo

    • Construir el modelo

    • Predicciones

    • Métricas del modelo

  • Regresión Polinómica de quinto nivel

    • Construir el modelo

    • Predicciones

    • Métricas del modelo

  • Interpretación

3 Desarrollo

3.1 Métricas a valorar en los modelos

Se van a realizar y evaluar métricas de las predicciones con los modelos de regresión lineal simple y regresión polinómica con los mismos datos.

Los modelos se aceptan si las métricas cumplen estos requisitos:

  • El valor de R Square y R Square ajustado sobrepasa el 50%,

  • Que sus variables sea estadísticamente significativas al 95%. Al menos un ‘*’

  • Que el valor de RMSE (Raiz del Error Estándar Medio) sea menor que : 2 000 000 (dos millones).

  • Al final se deben comparar los modelos.

3.2 Cargar librerías

```{r message=FALSE, warning=FALSE} library(readr) # Para importar datos library(dplyr) # Para filtrar
library(knitr) # Para datos tabulares library(ggplot2) # Para visualizar library(plotly) library(caret) # Para particionar library(Metrics) # Para determinar rmse


## Cargar datos

```{r}
datos <- read.csv("https://raw.githubusercontent.com/rpizarrog/Analisis-Inteligente-de-datos/main/datos/datos.limpios.csv", stringsAsFactors = TRUE)

3.3 Explorar datos

str(datos)

3.3.1 Variables independiente y dependiente

Se identifican dos variables numéricas de interés:

  • Overall: Reputación y jerarquía internacional numérica del jugador

  • Valor: Sería el valor económico internacional de los jugadores

Se define a la variable independiente como Overall y la variable dependiente Valor, es decir, Overall impacta sobre Value o los valores de la variable Valor dependen de Overall.

print ("Variable Overall")
summary(datos$Overall)
print ("Variable Valor que significa el valor económico del jugador en moneda Euros ")
summary(datos$Valor)

3.3.2 head(datos)

kable(head(datos[, c('X', 'Name', 'Overall', 'Valor')], 20), caption = "Datos. Primeros 20 registros")

tail(datos)

kable(head(datos[, c('X', 'Name', 'Overall', 'Valor')], 20), caption = "Datos. Primeros 20 registros")

3.4 Dispersión de los datos

g <- plot_ly(data = datos, 
             x = ~Overall, 
             y = ~Valor) %>%
layout(title = 'Jugadores FIFA. Dispersión de Overall y Valor')
g

Se observa que la relación de los datos no es del todo lineal, pero se construirán los modelos de regresión lineal simple y polinómico con las mismas variables.

3.5 Datos de entrenamiento y datos de validación

Sembrar semilla para la aleatoriedad de los datos

n <- nrow(datos)

# Modificar la semilla estableciendo como parámetro los útimos cuatro dígitos de su no de control. 
# Ej. set.seed(0732), o set.seed(1023)
# set.seed(2022) 
set.seed(0435)

3.5.1 Datos de entrenamiento

De manera aleatoria se construyen los datos de entrenamiento y los datos de validación.

En la variable entrena se generan los registros que van a ser los datos de entrenamiento, de tal forma que los datos de validación serán los que no sena de entrenamiento [-entrena].

entrena <- createDataPartition(y = datos$Valor, p = 0.70, list = FALSE, times = 1)

# Datos entrenamiento
datos.entrenamiento <- datos[entrena, ]  # [renglones, columna]

# Datos validación
datos.validacion <- datos[-entrena, ]

3.5.1.2 tail()

kable(tail(datos.validacion[, c('X', 'Name', 'Overall', 'Valor')], 20), caption = "Datos de Entrenamiento. Primeros 20 registros")

3.5.2 Datos de validación

3.5.2.1 head()

kable(head(datos.validacion[, c('X', 'Name', 'Overall', 'Valor')], 20), caption = "Datos de Entrenamiento. Primeros 20 registros")

3.5.2.2 tail()

kable(tail(datos.entrenamiento[, c('X', 'Name', 'Overall', 'Valor')], 20), caption = "Datos de Entrenamiento. Primeros 20 registros")

3.6 Modelos de regresión

3.6.1 Regresión Lineal Simple

modelo.ls <- lm(formula = Valor ~ Overall, data = datos.entrenamiento)
modelo.ls

3.6.1.1 Coeficientes del modelo

Se determinan los valores de a y b de la fórmula \(Y = a+bx\)

a <- modelo.ls$coefficients[1]
b <- modelo.ls$coefficients[2]

paste("Valor de la abcisa a es   : ", round(a, 6))
paste("Valor de la pendiente b es: ", round(b, 6))

3.6.1.2 Linea de tendencia del modelo

Con la el valor de los valores de tendencia o valores ajustados del modelo se visualiza la recta de tendencia del modelo.

La gráfica g se construye por partes, primero la dispersión, segundo la linea de tendencia, tercero se agrega el título, para luego solo mostrar la gráfica g.


g <- plot_ly(data = datos.entrenamiento, 
             x = ~Overall, 
             y = ~Valor, 
             name = 'Dispersión',
             type = 'scatter', 
             mode = 'markers', 
             color = I('blue')) 
g <- g %>% add_trace(x = ~Overall,
                     y = ~modelo.ls$fitted.values, name = 'Tendencia', mode = 'lines+markers', color = I('red'))
g <- g %>%
layout(title = 'Jugadores FIFA. Dispersión y Tendencia de Overall y Valor económico.')
g

3.6.1.3 Predicciones

Con los datos de validación, se hacen predicciones con la función predict().

Se hace un data.frame de comparaciones con lo cual se presentan los valores reales y los valores de las predicciones. Se presenta solo las primeras 20 y últimas 20 predicciones.

predicciones <- predict(object = modelo.ls, newdata = datos.validacion)

comparaciones <- data.frame(Overall = datos.validacion$Overall, Valor = datos.validacion$Valor, predicccion = predicciones)
 


 kable(x = head(comparaciones, 20), caption = "Predicciones")
  kable(x = tail(comparaciones, 20), caption = "Predicciones")

¡Salen predicciones negativas!, ¿que significa? , no debiera haber predicciones negativas, sin embargo, esto sucede porque el modelo así lo calcula por lo estricto de la linea de tendencia.

3.6.1.4 Determinando métricas

res.modelo.ls <- summary(modelo.ls)
res.modelo.ls

El coeficiente de interseción ‘a’ y la pendiente ‘b’ si son estadísticamente significativas por encima del 99.9%

El valor de R Square no sobrepasa el 50% por lo que NO SE ACEPTA el modelo

3.6.2 Determinando rmse()

El valor de rmse se interpreta en que tanto se desvía una predicción media sobre los valore reales.

rmse.ls <- rmse(actual =comparaciones$Valor, predicted = comparaciones$predicccion)
rmse.ls

El valor de rmse en el modelo de regresión lineal simple no está por debajo de los 2,000,000 (dos millones) que se establecieron como métrica aceptable, por lo que este modelo NO SE ACEPTA.

3.6.3 Regresión polinómica segundo nivel

Se usa el argumento poly “poly(Overall, 2)” en la construcción del modelo para indicar que es polinomial de segunda potencia.

\[ y = β0 + β1{x_i} +β2{x_i}^2+β3{x_i}^3...+βd{x_i}^n+ϵi \]

ó

\[ y = a + bx + cx^2 + dx^3 ...zx^n \]

modelo.poly2 <- lm(formula = Valor ~ poly(Overall, 2), data = datos.entrenamiento, )
modelo.poly2

3.6.3.1 Coeficientes del modelo

Se determinan los valores de a y b de la fórmula \(Y = a+bx\)

a <- modelo.poly2$coefficients[1]
b <- modelo.poly2$coefficients[2]

paste("Valor de la abcisa a es   : ", round(a, 6))
paste("Valor de la pendiente b es: ", round(b, 6))

3.6.3.2 Curva de tendencia del modelo

Con la el valor de los valores de tendencia o valores ajustados del modelo se visualiza la curva de tendencia del modelo.

La gráfica g se construye por partes, primero la dispersión, segundo la curva de tendencia, tercero se agrega el título, para luego solo mostrar la gráfica g.


g <- plot_ly(data = datos.entrenamiento, 
             x = ~Overall, 
             y = ~Valor, 
             name = 'Dispersión',
             type = 'scatter', 
             mode = 'markers', 
             color = I('blue')) 
g <- g %>% add_trace(x = ~Overall,
                     y = ~modelo.poly2$fitted.values, name = 'Tendencia', mode = 'lines+markers', color = I('red'))
g <- g %>%
layout(title = 'Jugadores FIFA. Dispersión y Tendencia de Overall y Valor económico.')
g

3.6.3.3 Predicciones

Con los datos de validación, se hacen predicciones con la función predict().

Se hace un data.frame de comparaciones con lo cual se presentan los valores reales y los valores de las predicciones. Se presenta solo las primeras 20 y últimas 20 predicciones.

predicciones <- predict(object = modelo.poly2, newdata = datos.validacion)

comparaciones <- data.frame(Overall = datos.validacion$Overall, Valor = datos.validacion$Valor, predicccion = predicciones)
 


 kable(x = head(comparaciones, 20), caption = "Predicciones")
  kable(x = tail(comparaciones, 20), caption = "Predicciones")

3.6.3.4 Determinando métricas

res.modelo.poly2 <- summary(modelo.poly2)
res.modelo.poly2

El coeficiente de interseción ‘a’ y la pendiente ‘b’ si son estadísticamente significativas por encima del 99.9%

El valor de R Square SI sobrepasa el 50% por lo que SI SE ACEPTA el modelo

3.6.4 Determinando rmse()

El valor de rmse se interpreta en que tanto se desvía una predicción media sobre los valore reales.

rmse.poly2 <- rmse(actual =comparaciones$Valor, predicted = comparaciones$predicccion)
rmse.poly2

El valor de rmse en el modelo de regresión lineal simple no está por debajo de los 2,000,000 (dos millones) que se establecieron como métrica aceptable, por lo que este modelo NO SE ACEPTA por esta métrica.

3.6.5 Regresión polinómica quinto nivel

Se usa el argumento poly “poly(Overall, 5)” en la construcción del modelo para indicar que es polinomial de segunda potencia.

\[ y = β0 + β1{x_i} +β2{x_i}^2+β3{x_i}^3…+βd{x_i}^n+ϵi \]

y = β0 + β1{x_i} +β2{x_i}2+β3{x_i}3…+βd{x_i}^n+ϵi

ó

\[ y = a + bx + cx^2 + dx^3 …zx^n \]

modelo.poly5 <- lm(formula = Valor ~ poly(Overall, 5), data = datos.entrenamiento, )
modelo.poly5

3.6.5.1 Coeficientes del modelo

Se determinan los valores de a y b de la fórmula \(Y = a+bx\)

a <- modelo.poly5$coefficients[1]
b <- modelo.poly5$coefficients[2]

paste("Valor de la abcisa a es   : ", round(a, 6))
paste("Valor de la pendiente b es: ", round(b, 6))

3.6.5.2 Curva de tendencia del modelo

Con la el valor de los valores de tendencia o valores ajustados del modelo se visualiza la curva de tendencia del modelo.

La gráfica g se construye por partes, primero la dispersión, segundo la curva de tendencia, tercero se agrega el título, para luego solo mostrar la gráfica g.


g <- plot_ly(data = datos.entrenamiento, 
             x = ~Overall, 
             y = ~Valor, 
             name = 'Dispersión',
             type = 'scatter', 
             mode = 'markers', 
             color = I('blue')) 
g <- g %>% add_trace(x = ~Overall,
                     y = ~modelo.poly5$fitted.values, name = 'Tendencia', mode = 'lines+markers', color = I('red'))
g <- g %>%
layout(title = 'Jugadores FIFA. Dispersión y Tendencia de Overall y Valor económico.')
g

3.6.5.3 Predicciones

Con los datos de validación, se hacen predicciones con la función predict().

Se hace un data.frame de comparaciones con lo cual se presentan los valores reales y los valores de las predicciones. Se presenta solo las primeras 20 y últimas 20 predicciones.

predicciones <- predict(object = modelo.poly5, newdata = datos.validacion)

comparaciones <- data.frame(Overall = datos.validacion$Overall, Valor = datos.validacion$Valor, predicccion = predicciones)
 


 kable(x = head(comparaciones, 20), caption = "Predicciones")
  kable(x = tail(comparaciones, 20), caption = "Predicciones")

3.6.5.4 Determinando métricas

res.modelo.poly5 <- summary(modelo.poly5)
res.modelo.poly5

El coeficiente de interseción ‘a’ y la pendiente ‘b’ si son estadísticamente significativas por encima del 95%

El valor de R Square SI sobrepasa el 50% por lo que SI SE ACEPTA el modelo

3.6.6 Determinando rmse()

El valor de rmse se interpreta en que tanto se desvía una predicción media sobre los valore reales.

rmse.poly5 <- rmse(actual =comparaciones$Valor, predicted = comparaciones$predicccion)
rmse.poly5

El valor de rmse en el modelo de regresión lineal simple SI está por debajo de los 2,000,000 (dos millones) que se establecieron como métrica aceptable, por lo que este modelo SI SE ACEPTA.

4 Interpretación

Primero se identifican dos variables numéricas de interés el overall que es la reputación y jerarquía internacional numérica del jugador y el valor que es el valor económico internacional de los jugadores y se define a la variable independiente como Overall y la variable dependiente Valor, es decir, Overall impacta sobre Value o los valores de la variable Valor dependen de Overall. En la variable entrena se generan los registros que van a ser los datos de entrenamiento, de tal forma que los datos de validación serán los que no sean de entrenamiento. Con el valor de los valores de tendencia o valores ajustados del modelo se visualiza la recta de tendencia del model y con los datos de validación, se hacen predicciones con la función predict().

5 Bibliografía