Objetivo

Analizar caso FIFA mediante un modelo de regresión polinomial con las variables Overall y Value del conjunto de datos.

Descripción

Determinar modelo de regresión plinomial de segundo y tal vez de trecer o cuarto nivel para establecer un análisi en el conjunto de datos del caso FIFA y comparar con el modelo de regresión lineal simple

Fundamento teórico. Regresión Polinomial

Los modelos lineales tienen la ventaja de ser fácilmente interpretables, sin embargo, pueden tener limitaciones importantes en capacidad predictiva. Esto se debe a que, la asunción de linealidad, es con frecuencia una aproximación demasiado simple para describir las relaciones reales entre variables. A continuación, se describen métodos que permiten relajar la condición de linealidad intentando mantener al mismo tiempo una interpretabilidad alta.

La forma más sencilla de incorporar flexibilidad a un modelo lineal es introduciendo nuevos predictores obtenidos al elevar a distintas potencias el predictor original.

Partiendo del modelo lineal: \[y=β0+β1xi+ϵi\]

Ahora el modelo polinómico: \[y=β0+β1xi+β2xi^2+β3xi^3+...+βdxdi^n+ϵi\]

Proceso

1. Cargar librerías

library(readr)
library(dplyr)
library(ggplot2)
library(caret)

2. Cargar los datos

datos.fifa <- read.csv("../Datos/data FIFA.csv",encoding = "UTF-8")

datos <- select(datos.fifa, Overall,Value)

3. Determinar variable independiente y variable dependiente

print("La variable x independiente es Overall que significa como se valora en su totalidad un jugador")
## [1] "La variable x independiente es Overall que significa como se valora en su totalidad un jugador"
print("La variable y dependiente es Value la cual se hara que tome un valor numerico que significa el valor económico de un jugador")
## [1] "La variable y dependiente es Value la cual se hara que tome un valor numerico que significa el valor económico de un jugador"

4. Limpiar los datos

  • Cargar funciones que ayudan a limpiar los datos
source("../Funciones/misfunciones.r")
  • Ejecutar la limpieza de los datos añadiendo otra columna con la limpieza de la columna Value convirtiendola a Numeric
datos <- datos %>%
  mutate(datos, Valor = ifelse (substr(Value, nchar(Value), nchar(Value)) == 'M', fcleanValue(Value) * 1000000, fcleanValue(Value) * 1000)) %>%
  filter(Valor > 0)
  • Ver los primeros diez y ultimos diez registros
head(datos, 10);tail(datos, 10)
##    Overall   Value     Valor
## 1       94 \200110.5M 110500000
## 2       94    \20077M  77000000
## 3       92 \200118.5M 118500000
## 4       91    \20072M  72000000
## 5       91   \200102M 102000000
## 6       91    \20093M  93000000
## 7       91    \20067M  67000000
## 8       91    \20080M  80000000
## 9       91    \20051M  51000000
## 10      90    \20068M  68000000
##       Overall Value Valor
## 17946      47  \20060K 60000
## 17947      47  \20060K 60000
## 17948      47  \20070K 70000
## 17949      47  \20060K 60000
## 17950      47  \20060K 60000
## 17951      47  \20060K 60000
## 17952      47  \20060K 60000
## 17953      47  \20060K 60000
## 17954      47  \20060K 60000
## 17955      46  \20060K 60000
  • Visualizar la dispersión de los datos
ggplot(datos, aes(x = Overall, y = Valor)) +
  geom_point()

  • De acuerdo la gráfica se aprecia una relacón de forma curva y no precisamente lineal

5. Partir el conjunto de datos en datos de entrenemiento y detos validación 70% y 30%

# entrena <- 70%
# valida <- 30%
set.seed(2020)
entrena <- createDataPartition(y = datos$Valor, p = 0.7, list = FALSE, times = 1)

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

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

head(datos.entrenamiento, 10)
##    Overall   Value     Valor
## 1       94 \200110.5M 110500000
## 2       94    \20077M  77000000
## 3       92 \200118.5M 118500000
## 5       91   \200102M 102000000
## 6       91    \20093M  93000000
## 7       91    \20067M  67000000
## 8       91    \20080M  80000000
## 11      90    \20077M  77000000
## 12      90  \20076.5M  76500000
## 13      90    \20044M  44000000
head(datos.validacion, 10)
##    Overall  Value    Valor
## 4       91   \20072M 72000000
## 9       91   \20051M 51000000
## 10      90   \20068M 68000000
## 16      89   \20089M 89000000
## 22      89   \20060M 60000000
## 23      89   \20038M 38000000
## 25      89   \20027M 27000000
## 29      88 \20069.5M 69500000
## 30      88   \20062M 62000000
## 31      88 \20073.5M 73500000

6. Determinar el modelo de regresión lineal

  • Al contruir el modelo se genera el valor estadístico de coeficiente de regresión Acorde al R2 en este caso polinomial o polinómica que significa responder a la pregunta: ¿qué porcentaje de la variación total en Y se debe a la variación en X?, en otras palabras, cual es la proporción de la variación total en Y que puede ser explicada por la variación en X? (https://rpubs.com/osoramirez/316691)

  • Ya que se tienen el conjunto de datos de entrenamiento, sobre ese conjunto de datos construir el modelo

  • Modelo de regresión polinomial o polinómica poly

Modelo con segunda potencia
modelo2 <- lm(formula = Valor ~ poly(Overall, 2), data = datos.entrenamiento)

summary(modelo2)
## 
## Call:
## lm(formula = Valor ~ poly(Overall, 2), data = datos.entrenamiento)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -30095610   -930187    382964   1222718  73081882 
## 
## Coefficients:
##                    Estimate Std. Error t value            Pr(>|t|)    
## (Intercept)         2442774      25076   97.41 <0.0000000000000002 ***
## poly(Overall, 2)1 398229563    2811332  141.65 <0.0000000000000002 ***
## poly(Overall, 2)2 384331743    2811332  136.71 <0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2811000 on 12566 degrees of freedom
## Multiple R-squared:  0.7551, Adjusted R-squared:  0.7551 
## F-statistic: 1.938e+04 on 2 and 12566 DF,  p-value: < 0.00000000000000022
  • Se observa que el modelo polinómico a la potencia 2 los p-values individuales de cada predictor son todos muy bajos , por debajo del 0.001 identificado con tres ’***’ y se interpreta que hay estadísticamente significación en los predictores

  • Además, que al menos uno de los predictores introducidos en el modelo está relacionado con la variable respuesta Valor.

  • Por otra parte, el R-sqared igual a 0.7535 y el Adjusted R-Square igual a 0.7535 representan que la variable overall representa aproximadamente el 75% de Value en un jugado.r por lo que el modelo es aceptable.

  • La predicción será dada por: \[y=β0+β1xi+β2xi^2+ϵi\]

  • Para este caso significa que Overall explica el valor económico del jugador.

Modelo con cuarta potencia
modelo4 <- lm(formula = Valor ~ poly(Overall, 4), data = datos.entrenamiento)

summary(modelo4)
## 
## Call:
## lm(formula = Valor ~ poly(Overall, 4), data = datos.entrenamiento)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -48804991   -198589      3451    151184  31310143 
## 
## Coefficients:
##                    Estimate Std. Error t value            Pr(>|t|)    
## (Intercept)         2442774      16071  152.00 <0.0000000000000002 ***
## poly(Overall, 4)1 398229563    1801739  221.03 <0.0000000000000002 ***
## poly(Overall, 4)2 384331743    1801739  213.31 <0.0000000000000002 ***
## poly(Overall, 4)3 230674298    1801739  128.03 <0.0000000000000002 ***
## poly(Overall, 4)4  72936931    1801739   40.48 <0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1802000 on 12564 degrees of freedom
## Multiple R-squared:  0.8994, Adjusted R-squared:  0.8994 
## F-statistic: 2.81e+04 on 4 and 12564 DF,  p-value: < 0.00000000000000022
  • Se observa que el modelo polinómico a la potencia 4 los p-values individuales de cada predictor son todos muy bajos , por debajo del 0.001 identificado con tres ’***’ y se interpreta que hay estadísticamente significación en los predictores

  • Además, que al menos uno de los predictores introducidos en el modelo está relacionado con la variable respuesta Valor.

  • Por otra parte, el R-sqared igual a 0.8994 y el Adjusted R-Square igual a 0.8994 representan que la variable overal representa aproximadamente el 90% del valor económico de un jugador por lo que el modelo es bueno.

  • La predicción será dada por \[y=β0+β1xi+β2xi^2+β3xi^3+β4xi^4+ϵi\]

  • Para este caso significa que Overall explica el Valor económico del jugador.

7. Evaluar el modelo

par(mfrow = c(2, 2))
plot(modelo2)

plot(modelo4)

8. Linea de tendencia

  • Tendencia a la segunda potencia
ggplot() + 
  geom_point(data = datos, aes(x = Overall, y = Valor)) + geom_line(aes( x = datos$Overall, y = predict(modelo2, datos)), color = "red")

  • Tendecia a la cuarta potencia
ggplot() + 
  geom_point(data = datos, aes(x = Overall, y = Valor)) + geom_line(aes( x = datos$Overall, y = predict(modelo4, datos)), color = "darkred")

  • Precisamente se observa que no hay una relación lineal sino más bien una relación curva

9. Determinar predicciones

  • Algunas predicciones con el conjunto de datos de validación usando la fórmula del modelo: \(y=β0+β1xi+β2xi^2+β3xi^3+...+βdxdi^n+ϵi\)
Predicciones con el modelo de segunda potencia
prediccion <- predict(modelo2, newdata = datos.validacion)
  • Agregar a datos de validación una columna con las predicciones construidas para comparar
datos.validacion <- mutate(datos.validacion, predicho2 = prediccion)

head(datos.validacion, 10)
##    Overall  Value    Valor predicho2
## 1       91   \20072M 72000000  42439871
## 2       91   \20051M 51000000  42439871
## 3       90   \20068M 68000000  39560037
## 4       89   \20089M 89000000  36778617
## 5       89   \20060M 60000000  36778617
## 6       89   \20038M 38000000  36778617
## 7       89   \20027M 27000000  36778617
## 8       88 \20069.5M 69500000  34095610
## 9       88   \20062M 62000000  34095610
## 10      88 \20073.5M 73500000  34095610
tail(datos.validacion, 10)
##      Overall Value Valor predicho2
## 5377      48  \20020K 20000   7474373
## 5378      48  \20060K 60000   7474373
## 5379      48  \20040K 40000   7474373
## 5380      47  \20040K 40000   8826318
## 5381      47  \20050K 50000   8826318
## 5382      47  \20060K 60000   8826318
## 5383      47  \20060K 60000   8826318
## 5384      47  \20070K 70000   8826318
## 5385      47  \20060K 60000   8826318
## 5386      47  \20060K 60000   8826318
Predicciones con el modelo de cuarta potencia
prediccion <- predict(modelo4, newdata = datos.validacion)
  • Agregar a datos de validación una columna con las predicciones del modelo2 construidas para comparar
datos.validacion <- mutate(datos.validacion, predicho4 = prediccion)

head(datos.validacion, 10)
##    Overall  Value    Valor predicho2 predicho4
## 1       91   \20072M 72000000  42439871  77346260
## 2       91   \20051M 51000000  42439871  77346260
## 3       90   \20068M 68000000  39560037  68369009
## 4       89   \20089M 89000000  36778617  60205554
## 5       89   \20060M 60000000  36778617  60205554
## 6       89   \20038M 38000000  36778617  60205554
## 7       89   \20027M 27000000  36778617  60205554
## 8       88 \20069.5M 69500000  34095610  52804991
## 9       88   \20062M 62000000  34095610  52804991
## 10      88 \20073.5M 73500000  34095610  52804991
tail(datos.validacion, 10)
##      Overall Value Valor predicho2 predicho4
## 5377      48  \20020K 20000   7474373  461573.5
## 5378      48  \20060K 60000   7474373  461573.5
## 5379      48  \20040K 40000   7474373  461573.5
## 5380      47  \20040K 40000   8826318  760339.0
## 5381      47  \20050K 50000   8826318  760339.0
## 5382      47  \20060K 60000   8826318  760339.0
## 5383      47  \20060K 60000   8826318  760339.0
## 5384      47  \20070K 70000   8826318  760339.0
## 5385      47  \20060K 60000   8826318  760339.0
## 5386      47  \20060K 60000   8826318  760339.0

10. Interpretación

Preguntas acerca del caso
  • ¿Cuáles son las variables independientes y dependientes del caso y qué significan (b0 & b1)? La variable independiente es Overall que significa como se valora en su totalidad un jugador, y la variable dependiente es Value, que se refiere al valor económico que puede tener un jugador y en cuanto a b0 y b1, b0 se refiere al intercept que se presenta en nuestro modelo y b1 (no es el unico que se puede presentar tambien )

  • ¿Cuál es valor del coeficiente de correlación R Square y R Square adjusted en el modelo? Para el modelo de segunda potencia R-squared: 0.7551, Adjusted R-squared: 0.7551 y para el modelo de cuarta potencia R-squared: 0.8994, Adjusted R-squared: 0.8994

  • ¿Cuál es el valor de b0 y b1 en la ecuación de regresión a la potencia 2, 4?

\[y=β0+β1xi+β2xi^2+β3xi^3+...+βdxdi^n+ϵi\] y qué significa? En el modelo a la segunda potencia b0=2442774,b1=398229563,b2=384331743, y en el modelo a la cuarta potencia b0=2442774,b1=398229563,b2=384331743,b3=230674298,b4=72936931, donde b0 es el intercept y b1,b2,…,bn son los diferentes coeficientes de correlación dentro de nuestro modelo esto significa que la suma de b1+…+bn es el total de unidades que va a incrementar segun en la manera en como incremente el valor de x ya que los diferentes valores que toma x al elevarlo a los diferentes potencias estos se convierten en nuevos predictores y estos necesitan ser evaluados con los diferenetes coeficientes.

  • ¿Qué tan bien predice el modelo? El modelo predice de una muy buena manera ya que incluso el modelo desde la segunda potencia tiene una exactitud de 0.7551 lo que quiere decir un 75% de relación entre las dos variables y que overall si describe a value y en cuanto al modelo en cuarta potencia este tiene exactitud de 0.8994 osea un 89% de relación

  • ¿Es el modelo de regresión lineal polinómico adecuado para predecir el valor económico del jugador basado únicamente en la variable Overall? ¿Que comparación se tienen con el modelo lineal en estas dos variables Overall y Value? Para este caso en donde unicamente se ve la relación unicamente con las variables Overall y value, si es un poco adecuado ya que si presenta una relación muy buena. La comparación que tiene con el caso de regresión lineal simple es que en aquel modelo no se observaba una buena relación ya que incluso las predicciones arrojaban valores negativos y en este caso en este modelo, las predicciones se acercan un poco más, que en el modelo de regresión lineal simple.

Interpretación textual

Retomando el conjunto de datos de FIFA se decidió nuevamente usar como variable independiente Overall que significa la valoración total de un jugador y como variable independiente se decidió por usar Value que es el valor económico de un jugador, pero en este caso se decidió usar un valor de regresión polinomial ya que como vimos en el caso de regresión lineal simple con estas mismas variables la dispersión de los datos se aprecia que es más una curva que una línea recta y se decidió hacer un modelo elevado a la segunda potencia y otro elevado a la cuarta potencia.

Como vemos dentro de ambos modelos los intercept los valores de b todos llegan a tener un significado estadístico importante dentro de los modelo e igualmente los valores de R-Square y R-Square adjusted son los siguientes Para el modelo de segunda potencia R-squared: 0.7551, Adjusted R-squared: 0.7551 y para el modelo de cuarta potencia R-squared: 0.8994, Adjusted R-squared: 0.8994 de esta manera viendo que incluso en el modelo de segunda potencia la relación entre las dos variables es muy buena y dando como conclusión que la variable Value llega a ser explicada por el valor de Overall, aun así para poder obtener un mejor resultado se debería usar otro modelo en donde se puedan involucrar más variables y de esa manera ver si se pueden mejorar incluso las predicciones para ser más precisas. Y en cuanto al caso de regresión lineal simple con estas mismas variables podemos llegar a ver que este es un modelo más adecuado ya que la dispersión de los datos es de forma curva y no una línea recta.

Nota: Y en cuanto a la fórmula de regresión polinomial b0 se refiere al intercept y de b1,…,bn se refiere a los coeficientes de correlación cuya suma de todos ellos indica la cantidad de unidades que aumenta el valor de y según varia la variable x.