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, Wage, Value)

3. Determinar variable independiente y variable dependiente

print("La variable x independiente es Wage que significa salario del jugador")
## [1] "La variable x independiente es Wage que significa salario del jugador"
print("La variable y dependiente es Value que significa valor economico del jugador")
## [1] "La variable y dependiente es Value que significa valor economico del 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 al igual que la columna Wage creando nuevas columnas representativas para el caso
datos <- datos %>%
  mutate(Valor = ifelse (substr(Value, nchar(Value), nchar(Value)) == 'M', fcleanValue(Value) * 1000000, fcleanValue(Value) * 1000)) %>%
  filter(Valor > 0)

datos <- datos %>%
  mutate(Salario = ifelse (substr(Wage, nchar(Wage), nchar(Wage)) == 'M', fcleanValue(Wage) * 1000000, fcleanValue(Wage) * 1000)) %>%
  filter(Salario > 0)
  • Ver los primeros diez y ultimos diez registros
head(datos, 10);tail(datos, 10)
##     Wage   Value     Valor Salario
## 1  \200565K \200110.5M 110500000  565000
## 2  \200405K    \20077M  77000000  405000
## 3  \200290K \200118.5M 118500000  290000
## 4  \200260K    \20072M  72000000  260000
## 5  \200355K   \200102M 102000000  355000
## 6  \200340K    \20093M  93000000  340000
## 7  \200420K    \20067M  67000000  420000
## 8  \200455K    \20080M  80000000  455000
## 9  \200380K    \20051M  51000000  380000
## 10  \20094K    \20068M  68000000   94000
##       Wage Value Valor Salario
## 17946  \2001K  \20060K 60000    1000
## 17947  \2001K  \20060K 60000    1000
## 17948  \2001K  \20070K 70000    1000
## 17949  \2001K  \20060K 60000    1000
## 17950  \2001K  \20060K 60000    1000
## 17951  \2001K  \20060K 60000    1000
## 17952  \2001K  \20060K 60000    1000
## 17953  \2001K  \20060K 60000    1000
## 17954  \2001K  \20060K 60000    1000
## 17955  \2001K  \20060K 60000    1000
  • Visualizar la dispersión de los datos
ggplot(datos, aes(x = Salario, y = Valor)) +
  geom_point()

una relación en forma de curva y no precisamente lineal, pero a pesar de ello, se construirá un modelo de regresión lineal simple con estas dos variables

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)
##     Wage   Value     Valor Salario
## 1  \200565K \200110.5M 110500000  565000
## 2  \200405K    \20077M  77000000  405000
## 3  \200290K \200118.5M 118500000  290000
## 5  \200355K   \200102M 102000000  355000
## 6  \200340K    \20093M  93000000  340000
## 7  \200420K    \20067M  67000000  420000
## 8  \200455K    \20080M  80000000  455000
## 11 \200205K    \20077M  77000000  205000
## 12 \200355K  \20076.5M  76500000  355000
## 13 \200125K    \20044M  44000000  125000
head(datos.validacion, 10)
##     Wage  Value    Valor Salario
## 4  \200260K   \20072M 72000000  260000
## 9  \200380K   \20051M 51000000  380000
## 10  \20094K   \20068M 68000000   94000
## 16 \200205K   \20089M 89000000  205000
## 22 \200200K   \20060M 60000000  200000
## 23 \200130K   \20038M 38000000  130000
## 25 \200215K   \20027M 27000000  215000
## 29 \200315K \20069.5M 69500000  315000
## 30 \200165K   \20062M 62000000  165000
## 31 \200315K \20073.5M 73500000  315000

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$Salario, y = datos.entrenamiento$Valor, method = "pearson")
correla
## [1] 0.8591612
cor.test(datos.entrenamiento$Salario, datos.entrenamiento$Valor) 
## 
##  Pearson's product-moment correlation
## 
## data:  datos.entrenamiento$Salario and datos.entrenamiento$Valor
## t = 188.22, df = 12567, p-value < 0.00000000000000022
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.8545137 0.8636711
## sample estimates:
##       cor 
## 0.8591612
  • 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.7381579
  • 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 significa que Salario explica el 73.82% del Valor económico del jugador . Tal vez no es representativo la variable Salario sobre el Valor económico del jugador.

  • El salario de un jugador explica más el valor económico del mismo en relación a otra variable como Overall visto en el caso 5.

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

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

summary(modelo)
## 
## Call:
## lm(formula = Valor ~ Salario, data = datos.entrenamiento)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -25014292   -609756   -311372     46592  58868607 
## 
## Coefficients:
##              Estimate Std. Error t value            Pr(>|t|)    
## (Intercept) 292987.55   28334.43   10.34 <0.0000000000000002 ***
## Salario        218.38       1.16  188.22 <0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2907000 on 12567 degrees of freedom
## Multiple R-squared:  0.7382, Adjusted R-squared:  0.7381 
## F-statistic: 3.543e+04 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 = Salario, y = Valor)) +
  geom_point(color = "firebrick", size = 2) +
  labs(title  =  'Valor ~ Salario', x  =  'Salario') +
  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 si hay 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 = 292987.553576029
  • b = 218.384057537379
paste("Valor de a = ", modelo$coefficients[1])
## [1] "Valor de a =  292987.553576029"
paste("Valor de b = ", modelo$coefficients[2])
## [1] "Valor de b =  218.384057537379"
  • Por cada unidad de Overall en el jugador el valor de Y aumenta 218.384057537379 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)
##     Wage  Value    Valor Salario predicho
## 1  \200260K   \20072M 72000000  260000 57072843
## 2  \200380K   \20051M 51000000  380000 83278929
## 3   \20094K   \20068M 68000000   94000 20821089
## 4  \200205K   \20089M 89000000  205000 45061719
## 5  \200200K   \20060M 60000000  200000 43969799
## 6  \200130K   \20038M 38000000  130000 28682915
## 7  \200215K   \20027M 27000000  215000 47245560
## 8  \200315K \20069.5M 69500000  315000 69083966
## 9  \200165K   \20062M 62000000  165000 36326357
## 10 \200315K \20073.5M 73500000  315000 69083966
tail(datos.validacion, 10)
##      Wage Value Valor Salario predicho
## 5377  \2001K  \20020K 20000    1000 511371.6
## 5378  \2001K  \20060K 60000    1000 511371.6
## 5379  \2001K  \20040K 40000    1000 511371.6
## 5380  \2001K  \20040K 40000    1000 511371.6
## 5381  \2001K  \20050K 50000    1000 511371.6
## 5382  \2001K  \20060K 60000    1000 511371.6
## 5383  \2001K  \20060K 60000    1000 511371.6
## 5384  \2001K  \20070K 70000    1000 511371.6
## 5385  \2001K  \20060K 60000    1000 511371.6
## 5386  \2001K  \20060K 60000    1000 511371.6

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 Salario que se refiere al salario que tiene el jugador y la variable y es Valor que se refiere al valor economico del jugador
  • ¿Cuál es el valor de correlación entre las dos variables y qué significa? 0.8591612, quiere decir que es una correlación positiva considerable
  • ¿Cuál es valor del coeficiente de correlación CR o R Square en el modelo? 0.7381579
  • ¿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 = 292987.553576029, b = 218.384057537379. Significa que por cada unidad de Overall el valor del jugador aumenta 218.384057537379 unidades
  • ¿Qué tan bien predice el modelo? El modelo predice un poco bien ya que en muchas de las predicciones si se presenta relación
  • ¿Es el modelo de regresión lineal simple adecuado para predecir el valor económico del jugador basado únicamente en la variable Salario? Es un poco adecuado, ya que en algunos casos si se llega a presentar una relación fuerte entre las dos variables, sin embargo aún no llega a ser una relación lineal muy fuerte.
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 = Salario, y = Value. El coeficiente de correlación de Pearson que fue calculado para este caso es de 0.8591612 lo que quiere decir que en este caso el valor posee una correlación positiva considerable, 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.7381579 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 73% (bastante considerable) eso quiere decir que en este caso el modelo de regresión lineal simple es un poco adecuado así como podemos ver en la linea de tendencia esta si pasa por muchos de los puntos a pesar de que este modelo si presenta una regresión lineal para poder obtener mejores predicciones para este caso, seria mejor usar un modelo de regresión polinomial o bien seleccionar otra variable x en donde se pudiera presentar aún más linealidad. Y en cuanto a la ecuación y = a + b (x) los valores a y b son a = 292987.553576029, b = 511215.7312696 en donde esto quiere decir que por cada unidad de Overall (x) el valor del jugador (y) aumenta 218.384057537379 unidades.