Objetivo

Analizar caso FIFA mediante un modelo de regresión polinomial.

Descripción

Determinar modelo de regresión polinomial de (segundo y cuarto nivel) en el conjunto de datos FIFA.

Partiendo del modelo lineal:

\(y = \beta0 + \beta1x1 + \epsilon1\)

Ahora el modelo polinómico:

\(y = \beta0 + \beta1xi^2 + \beta2xi^3 + ... + \beta dxdi^n + \epsilon i\)

Proceso

1. Cargar librerias

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

2. Cargar los datos

datos_fifa <- read.csv("C:/Users/cinth/Documents/ITD/Analisis inteligente de datos/Datos/data.csv", encoding = "UTF-8")

datos_esp <- select(datos_fifa, Overall, Value)

3. Determinar variable dependiente e independiente

print('Variable independiente x: Overall, significa como se valora un jugador')
[1] "Variable independiente x: Overall, significa como se valora un jugador"
print('Variable dependiente y: es el valor económico de un jugador')
[1] "Variable dependiente y: es el valor económico de un jugador"

4. Limpiar los datos

mk_to_pesos <- function(m_k) {
  options(scipen=999)
  pesos <- substr(m_k,2,nchar(m_k)-1)
  pesos <- as.numeric(pesos)
  pesos
}

datos_esp <- datos_esp %>% 
  mutate(datos_esp, Valor = ifelse(substr(Value, nchar(Value), nchar(Value)) == 'M', mk_to_pesos(Value)*1000000, mk_to_pesos(Value)*100)) %>% 
  filter(Valor > 0)

4.1 Visualizar la dispersión de los datos:

ggplot(datos_esp, aes(x = Overall, y = Valor)) +
    geom_point(color = "turquoise1")

5. Dividir el conjunto de datos en entrenamiento y validación (70-30)

set.seed(2020)
entrenamiento <- createDataPartition(y = datos_esp$Valor, p = 0.7, list = FALSE, times = 1)
datos_entrenamiento <- datos_esp[entrenamiento, ]
datos_validacion <- datos_esp[-entrenamiento, ]

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 polinomial

modelo_2 <- lm(formula = Valor ~ poly(Overall,2), data = datos_entrenamiento)
summary(modelo_2)

Call:
lm(formula = Valor ~ poly(Overall, 2), data = datos_entrenamiento)

Residuals:
      Min        1Q    Median        3Q       Max 
-30700475   -767818    394682   1187505  72146785 

Coefficients:
                   Estimate Std. Error t value            Pr(>|t|)    
(Intercept)         2201307      24693   89.15 <0.0000000000000002 ***
poly(Overall, 2)1 405221235    2768412  146.37 <0.0000000000000002 ***
poly(Overall, 2)2 396524528    2768412  143.23 <0.0000000000000002 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 2768000 on 12566 degrees of freedom
Multiple R-squared:  0.7695,    Adjusted R-squared:  0.7694 
F-statistic: 2.097e+04 on 2 and 12566 DF,  p-value: < 0.00000000000000022
modelo_4 <- lm(formula = Valor ~ poly(Overall,4), data = datos_entrenamiento)
summary(modelo_4)

Call:
lm(formula = Valor ~ poly(Overall, 4), data = datos_entrenamiento)

Residuals:
      Min        1Q    Median        3Q       Max 
-48625933   -284105     31302    119222  32333305 

Coefficients:
                   Estimate Std. Error t value            Pr(>|t|)    
(Intercept)         2201307      16319  134.89 <0.0000000000000002 ***
poly(Overall, 4)1 405221235    1829560  221.49 <0.0000000000000002 ***
poly(Overall, 4)2 396524528    1829560  216.73 <0.0000000000000002 ***
poly(Overall, 4)3 223114054    1829560  121.95 <0.0000000000000002 ***
poly(Overall, 4)4  66872586    1829560   36.55 <0.0000000000000002 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1830000 on 12564 degrees of freedom
Multiple R-squared:  0.8993,    Adjusted R-squared:  0.8993 
F-statistic: 2.806e+04 on 4 and 12564 DF,  p-value: < 0.00000000000000022

7. Línea de tendencia

ggplot() + 
  geom_point(data = datos_esp, aes(x = Overall, y = Valor)) + geom_line(aes( x = datos_esp$Overall, y = predict(modelo_2, datos_esp)), color = "turquoise1")

ggplot() + 
  geom_point(data = datos_esp, aes(x = Overall, y = Valor)) + geom_line(aes( x = datos_esp$Overall, y = predict(modelo_4, datos_esp)), color = "turquoise1")

8. Determinar predicciones

predicciones_2 <- predict(modelo_2, newdata = datos_validacion)

8.1 - Agregar información del modelo a dataframe:

datos_validacion <- mutate(datos_validacion, prediccion_2 = predicciones_2)
head(datos_validacion, 10)
   Overall  Value    Valor prediccion_2
1       91   \20072M 72000000     43287726
2       91   \20051M 51000000     43287726
3       90   \20068M 68000000     40323773
4       89   \20089M 89000000     37461356
5       89   \20060M 60000000     37461356
6       89   \20038M 38000000     37461356
7       89   \20027M 27000000     37461356
8       88 \20069.5M 69500000     34700475
9       88   \20062M 62000000     34700475
10      88 \20073.5M 73500000     34700475
tail(datos_validacion, 10)
     Overall Value Valor prediccion_2
5377      48  \20020K  2000      7524400
5378      48  \20060K  6000      7524400
5379      48  \20040K  4000      7524400
5380      47  \20040K  4000      8926478
5381      47  \20050K  5000      8926478
5382      47  \20060K  6000      8926478
5383      47  \20060K  6000      8926478
5384      47  \20070K  7000      8926478
5385      47  \20060K  6000      8926478
5386      47  \20060K  6000      8926478
predicciones_4 <- predict(modelo_4, newdata = datos_validacion)

8.2 - Agregar información del modelo a dataframe:

datos_validacion <- mutate(datos_validacion, prediccion_4 = predicciones_4)
head(datos_validacion, 10)
   Overall  Value    Valor prediccion_2 prediccion_4
1       91   \20072M 72000000     43287726     76593570
2       91   \20051M 51000000     43287726     76593570
3       90   \20068M 68000000     40323773     67844793
4       89   \20089M 89000000     37461356     59871400
5       89   \20060M 60000000     37461356     59871400
6       89   \20038M 38000000     37461356     59871400
7       89   \20027M 27000000     37461356     59871400
8       88 \20069.5M 69500000     34700475     52625933
9       88   \20062M 62000000     34700475     52625933
10      88 \20073.5M 73500000     34700475     52625933
tail(datos_validacion, 10)
     Overall Value Valor prediccion_2 prediccion_4
5377      48  \20020K  2000      7524400     548149.2
5378      48  \20060K  6000      7524400     548149.2
5379      48  \20040K  4000      7524400     548149.2
5380      47  \20040K  4000      8926478     852512.9
5381      47  \20050K  5000      8926478     852512.9
5382      47  \20060K  6000      8926478     852512.9
5383      47  \20060K  6000      8926478     852512.9
5384      47  \20070K  7000      8926478     852512.9
5385      47  \20060K  6000      8926478     852512.9
5386      47  \20060K  6000      8926478     852512.9

9. Interpretar el caso.

Las variables que se tomaron de este conjunto de datos para este análisis fueron Overall y Value, donde se asigno a Overall como la variable independiente y Value la dependiente (b0 y b1), esto quiere decir que se analizará si el valor económico de un jugador esta dado por su overall. Al aplicar el modelo de regresión polinomial identificamos que en el de segunda potencia su R-squared es de 0.7695 y su Adjusted R-squared de 0.7694, mientas que para el cuarta ponencia sus valores son de 0.8993 y 0.8993 respectivamente. Si ordenamos nuestras variables en la formula b0 corresponde a Value y b1 al Overall, ya que como se definió al principio estamos buscando ver si overall nos define el valor económico del jugador. Este modelo predice mejor evaluándolo a la cuarta potencia, ya que sus valores resultantes están más cerca de los valores presentes en el dataset, comparando este modelo con el caso anterior correspondiente a regresión lineal simple, podemos observar que ahora overall nos ayuda a determinar el valor económico del jugador, aunque no sea precisamente la mejor variable para determinar dicho valor.