1 Objetivo

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

2 Descripción

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

3 Fundamento teórico.

3.1 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 + β1{xi}^2 +β3{xi}^3+...+βd{xdi}^n+ϵi \]

4 Desarrollo

El caso sigue el siguiente proceso:

  • Cargar librería.

  • Cargar los datos.

  • Determinar variable independiente y dependiente.

  • Limpiar los datos.

  • Partir el conjunto de datos en datos de entrenamiento y datos de validción \(70\)%, \(30\)%.

  • Determinar el modelo de regresión polinimoal de segund (posiblemente de tercer y cuarto nivel) nivel.

  • Evaluar el modelo. Interpretación.

  • Curva de tendencia.

  • Determinar predicciones.

  • Interpretar el caso con un texto descriptivo de \(80\) a \(100\) palabras. Individual.

4.1 Cargar librerías

library(readr)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(caret)  # Para particionar datos
## Loading required package: lattice

La instrucción dentro de readr(“../Data/fifa_datos.csv”), significa que a partir del directrio markdown se regrese una carpeta y luego busque la carpeta Datos y en ella encuentre el archivo fifa_datos.csv.

4.2 Cargar los datos

datos.FIFA <-read.csv("../Data/fifa_datos.csv", encoding = "UTF-8")


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

4.3 Determinar variable independiente y 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 character que será Valor en formato  numérico que significa el valor económico de un jugador")
## [1] "La variable 'y' dependiente es Value character que será Valor en formato  numérico que significa el valor económico de un jugador"

4.4 Limpiar los datos

  • Primero cargar la función:
source("../funciones/misfunciones.r")
  • Limpiar el datos de Value convertirlo a numérico:
datos <- datos %>%
  mutate(Valor = ifelse (substr(Value, nchar(Value), nchar(Value)) == 'M', fcleanValue(Value) * 1000000, fcleanValue(Value) * 1000)) %>%
  filter(Valor > 0)
  • Ver los primeros diez y últimos 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()

# plot(datos$Overall, datos$Valor)
  • De acuerdo la gráfica se aprecia una relación en forma de curva y no precisamente lineal.

4.5 Datos de entrenamiento y datos de validación

Partir el conjunto de datos en datos de entrenamiento y datos de validación \(70\)%, \(30\)%

4.5.1 Datos de entrenamiento

# 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

4.5.2 Datos de validación

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

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

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

4.6 Modelo Polinomial

4.6.1 Modelo a la 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 overal representa aproximadamente el \(75\)% de Vlue en un jugador, por lo que el modelo es aceptable.

También se puede interpretar que el \(75.35\)% de la variación de la variable Value es explicada por la relación con la variable Overall, o lo que es lo mismo, Overall explica aproximadamente el \(75\)% del valor económico del jugador.

La predicción será dada por:

\[y = β0 + β1{xi}^2 ϵi\]

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

¿Será mejor otro modelo polinómico?

4.6.2 Modelo a la potencia de 4

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.

También se puede interpretar que el \(89.94\)% de la variación de la variable Value es explicada por la relación con la variable Overall, o lo que es lo mismo, Overall explica aproximadamente el \(89.94\)% del valor económico del jugador.

La predicción será dada por:

\[y = β0 + β1{xi}^2 β1{xi}^3 + β1{xi}^4 ϵi\]

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

¿Será mejor otro modelo polinómico?

4.7 Visualizar tendencia

  • Linea de tendencia con ggplot()

  • 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")

  • Tendencia 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 del todo una relación lineal sino más bien una regresión curva polinómica; la f´romula POLINÓMICA elevada a la cuarta potencia mejora en eficiencia en el modelo y por consecuencia deberá hacerlo en las predicciones.

4.8 Determinar predicciones

Algunas predicciones con el conjunto de datos de validación usando la fórmula del modelo:

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

# paste("Valor de b0 = ", modelo2$coefficients[1])
# paste("Valor de b1 = ", modelo2$coefficients[2])

Por cada unidad de Overall PENDIENTE

Con head() y tail(), verificar algunas predicciones

4.8.1 Predicciones con modelo 2

prediccion <- predict(modelo2, newdata = datos.validacion)
# head(prediccion, 10); tail(prediccion, 10)
  • Agregar a datos de validación una columna con las predicciones del modelo 2 construidas para comparar
new.datos.validacion <- mutate(datos.validacion, predicho2 = prediccion)

# head(new.datos.validacion, 10)
# tail(new.datos.validacion, 10)

4.8.2 Predicciones con modelo 4

prediccion <- predict(modelo4, newdata = datos.validacion)
# head(prediccion, 10); tail(prediccion, 10)
  • Agregar a datos de validación una columna con las predicciones del modelo 4 construidas para comparar
new.datos.validacion <- mutate(new.datos.validacion, predicho4 = prediccion)

head(new.datos.validacion, 10)
##    Overall  Value    Valor predicho2 predicho4
## 4       91   \20072M 72000000  42439871  77346260
## 9       91   \20051M 51000000  42439871  77346260
## 10      90   \20068M 68000000  39560037  68369009
## 16      89   \20089M 89000000  36778617  60205554
## 22      89   \20060M 60000000  36778617  60205554
## 23      89   \20038M 38000000  36778617  60205554
## 25      89   \20027M 27000000  36778617  60205554
## 29      88 \20069.5M 69500000  34095610  52804991
## 30      88   \20062M 62000000  34095610  52804991
## 31      88 \20073.5M 73500000  34095610  52804991
tail(new.datos.validacion, 10)
##       Overall Value Valor predicho2 predicho4
## 17921      48  \20020K 20000   7474373  461573.5
## 17924      48  \20060K 60000   7474373  461573.5
## 17926      48  \20040K 40000   7474373  461573.5
## 17936      47  \20040K 40000   8826318  760339.0
## 17943      47  \20050K 50000   8826318  760339.0
## 17945      47  \20060K 60000   8826318  760339.0
## 17946      47  \20060K 60000   8826318  760339.0
## 17948      47  \20070K 70000   8826318  760339.0
## 17950      47  \20060K 60000   8826318  760339.0
## 17952      47  \20060K 60000   8826318  760339.0

4.9 Interpretación del caso

En estadística, la regresión polinomial es una forma de regresión lineal en la que la relación entre la variable independiente \(x\) y la variable dependiente y es modelada como un polinomio de grado \(n\) en \(x\). La regresión polinomial se ajusta a una relación no lineal entre el valor de \(x\) y la correspondiente media condicional de \(y\)

El procedimiento está diseñado para construir un modelo estadístico que describa el impacto de un solo factor cuantitativo \(x\) en una variable dependiente y. Se ajusta a los datos un modelo polinomial que involucra a \(x\) y potencias de \(x\).

Como vemos en el modelos el intercept los valores de \(b\) tienen un significado estadístico importante dentro del modelo al igual que los valores de R-Square y R-Square adjusted tienen un valor de:

segunda potencia:

  • R-squared = \(0.7551\), en porcentaje = \(75\)%
  • Adjusted R-squared = \(0.7551\), en porcentaje = \(75\)%

cuarta potencia:

  • R-squared = \(0.8994\), en porcentaje = \(89\)%
  • Adjusted R-squared = \(0.8994\), en porcentaje = \(89\)%

De esta manera se puede ver que en el modelo de segunda potencia la relación entre las dos variables es buena.

  • ¿Cuáles son las variables independientes y dependientes del caso y qué significan (b0 & b1)?

Los datos independientes que tenemos en este caso estan representados con “Overall” que significa como se evalua su totalidad un jugador y la variable dependiente es Value character que será Valor en formato numérico.

La b0 es representado por “Intercept” el cual el modelo lo presenta con anterioridad.

La b1 se refiere a los coeficientes de correlación la cual la suma de todos ellos indica la cantidad de unidades que incrementa el valor ademas que puede cambiar el valor la variable \(x\).

  • ¿Cuál es valor del coeficiente de correlación R Square y R Square adjusted en el modelo?

El valor que representa el coeficiente de la correlacion de R Square es 0.7535 y elevado a la potencia es 0.8994.

El valor que representa el coeficiente de la correlacion de R Square adjusted es 0.7535 y elevado a la potencia es 0.8994

  • ¿Cuál es el valor de b0 y b1 en la ecuación de regresión a la potencia \(2\), \(3\), \(4\) o \(6\)

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

El valor de \(b0\) en la 2 potencia tiene un valor de \(2442774\)

El valor de \(b1\) en la 2 potencia tiene un valor de \(398229563\)

El valor de \(b3\) en la 2 potencia tiene un valor de \(384331743\)

El valor de \(b0\) en la 4 potencia tiene un valor de \(2442774\)

El valor de \(b1\) en la 4 potencia tiene un valor de \(398229563\)

El valor de \(b3\) en la 4 potencia tiene un valor de \(230674298\)

y qué significa?

La \(b0\) es el intercept y \(b1,b3,…,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 como vaya incrementando nuestro valor de \(x\)

  • ¿Qué tan bien predice el modelo?

El modelo puede predice de una manera cada vez mejor o precisa a medida que vaya aumentando la potencia ya que incluso el modelo desde la segunda potencia tiene la exactitud de \(0.7551\), es decir, un \(75\)% de relación que tienen las dos variables y el overall describe el valor (value), en modelo de la cuarta potencia tiene exactitud de \(0.8994\), es decir, \(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?

Si es adecuado si se quiere ver las variables Overall y Value y como vimos anteriormente tiene buena predicción.

  • ¿Que comparación se tienen con el modelo lineal en estas dos variables Overall y Value?

En comparación con el caso anterior (modelo de regresión lineal) no se observaba una buena relación porque las predicciones eran valores negativos.