Objetivo

Analizar caso FIFA mediante un modelo de regresión lineal simple

Descripción

Determinar modelo de regresión lineal simple para establecer un analisis en el conjunto de datos del caso FIFA

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")
## [1] "La variable x independiente es Overall"
print("La variable y dependiente es Valor")
## [1] "La variable y dependiente es Valor"

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)
  • Quitar los de valor =0 o solo dejar los que tengan Valor
datos <- filter(datos, 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 curva y no lineal pero estamos en caso de Regresión Lineal Simple

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

  • Para cuestión de interpetación se determina el coeficiente de correlación entre las varibles Overall y Valor del conjunto de datos
  • Además una prueba de hipótesis para descartar que la correlación es diferente de 0
correla <- cor(x = datos.entrenamiento$Overall, y = datos.entrenamiento$Valor, method = "pearson")
correla
## [1] 0.6252835
cor.test(datos.entrenamiento$Overall, datos.entrenamiento$Valor) 
## 
##  Pearson's product-moment correlation
## 
## data:  datos.entrenamiento$Overall and datos.entrenamiento$Valor
## t = 89.821, df = 12567, p-value < 0.00000000000000022
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.6145185 0.6358156
## sample estimates:
##       cor 
## 0.6252835
  • Ahora determinar el coeficiente de determinación R2 o R Square o Multiple R-squared: en el modelo de regresión lineal que se construye más adelante.
CR <- correla ^ 2
CR
## [1] 0.3909794
  • El Coefiente de Correlación en la regresión lineal 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)

  • Para este caso signifca que Overall explica el 39.1% del Valor económico del jugador . Tal vez no es representativo la variable Overall sobre el Valor económico del jugador. Habrá que buscar otra variable diferente a Overall que explique más o se tenga un valor mayor a 39.1%

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

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

summary(modelo)
## 
## Call:
## lm(formula = Valor ~ Overall, data = datos.entrenamiento)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
##  -9583770  -2104319   -889593   1030270 102871367 
## 
## Coefficients:
##              Estimate Std. Error t value            Pr(>|t|)    
## (Intercept) -31403214     378886  -82.88 <0.0000000000000002 ***
## Overall        511216       5692   89.82 <0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4434000 on 12567 degrees of freedom
## Multiple R-squared:  0.391,  Adjusted R-squared:  0.3909 
## F-statistic:  8068 on 1 and 12567 DF,  p-value: < 0.00000000000000022

7. Evaluar el modelo

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

8. Linea de tendencia

ggplot(data = datos, mapping = aes(x = Overall, y = Valor)) +
  geom_point(color = "firebrick", size = 2) +
  labs(title  =  'Valor ~ Overall', x  =  'Overall') +
  geom_smooth(method = "lm", se = FALSE, color = "black") +
  theme_bw() +
  theme(plot.title = element_text(hjust = 0.5))
## `geom_smooth()` using formula 'y ~ x'

  • Precisamente se observa que no hay del todo una relación lineal

9. Determinar predicciones

  • Algunas predicciones con el conjunto de datos de validación usando el modelo
  • Predecir conforme a la fórmula y=a+bx
  • a = -31403213.910327
  • b = 511215.7312696
paste("Valor de a = ", modelo$coefficients[1])
## [1] "Valor de a =  -31403213.910327"
paste("Valor de b = ", modelo$coefficients[2])
## [1] "Valor de b =  511215.731269587"
  • Por cada unidad de Overall en el jugador el valor de Y aumenta 511215.7312696 veces
  • Con head() y tail(), verificar algunas predicciones
prediccion <- predict(modelo, newdata = datos.validacion)
  • Agregar a datos de validación una columna con las predicciones construidas para comparar
datos.validacion <- mutate(datos.validacion, predicho = prediccion)

head(datos.validacion, 10)
##    Overall  Value    Valor predicho
## 1       91   \20072M 72000000 15117418
## 2       91   \20051M 51000000 15117418
## 3       90   \20068M 68000000 14606202
## 4       89   \20089M 89000000 14094986
## 5       89   \20060M 60000000 14094986
## 6       89   \20038M 38000000 14094986
## 7       89   \20027M 27000000 14094986
## 8       88 \20069.5M 69500000 13583770
## 9       88   \20062M 62000000 13583770
## 10      88 \20073.5M 73500000 13583770
tail(datos.validacion, 10)
##      Overall Value Valor predicho
## 5377      48  \20020K 20000 -6864859
## 5378      48  \20060K 60000 -6864859
## 5379      48  \20040K 40000 -6864859
## 5380      47  \20040K 40000 -7376075
## 5381      47  \20050K 50000 -7376075
## 5382      47  \20060K 60000 -7376075
## 5383      47  \20060K 60000 -7376075
## 5384      47  \20070K 70000 -7376075
## 5385      47  \20060K 60000 -7376075
## 5386      47  \20060K 60000 -7376075

10. Interpretación Textual

Preguntas acerca del caso
  • ¿Cuáles son las variables independientes y dependientes del caso y qué significan (x & y)? La variable x es Overall y la variable y es Value
  • ¿Cuál es el valor de correlación entre las dos variables y qué significa? 0.6252835, quiere decir que es una correlación positiva media
  • ¿Cuál es valor del coeficiente de correlación CR o R Square en el modelo? 0.3909794
  • ¿Cuál es el valor de a y b en la ecuación de regresión lineal simple y = a + b (x) y qué significa? a = -31403213.910327, b = 511215.7312696. Significa que por cada unidad de Overall el valor del jugador aumenta 511215.7312696 unidades
  • ¿Qué tan bien predice el modelo? El modelo no predice bien ya que incluso arroja predicciones negativas
  • ¿Es el modelo de regresión lineal simple adecuado para predecir el valor económico del jugador basado únicamente en la variable Overall? No es adecuado, sería mejor utilizar un modelo de regresión polinomial o bien se podria intentar tomar otra variable que sea x,
Interpretación textual

En este caso en donde se retomo el conjunto de datos de la FIFA se decidió hacer un análisis con regresión lineal simple, para este análisis se tomaron los atributos x = Overall, y = Value. El coeficiente de correlación de Pearson que fue calculado para este caso es de 0.6252835 lo que quiere decir que en este caso el valor posee una correlación positiva media, lo cual en un inicio quiere decir que el caso va bien. En cuanto al CR o R Square nos podemos dar cuenta que este tiene un valor de 0.3909794 lo que quiere decir que cada vez que haga una predicción en cuanto a los datos de Overall y Value la certeza de que sea correcta es de un 39% (muy bajo) eso quiere decir que en este caso el modelo de regresión lineal simple no es adecuado (así como podemos ver en la línea de tendencia que incluso predice valores negativos para y) para realizar predicciones para este caso, seria mejor usar un modelo de regresión polinomial o bien seleccionar otra variable x en donde se pudiera presentar más linealidad. Y en cuanto a la ecuación y = a + b (x) los valores a y b son a = -31403213.910327, b = 511215.7312696 en donde esto quiere decir que por cada unidad de Overall (x) el valor del jugador (y) aumenta 511215.7312696 unidades.