Objetivo:

Analizar caso FIFA con modelo de regresión lineal simple

Descripción:

Determinar modelo de regresión lineal simple para establecer un análisis en el conjunto de datos FIFA

  • Proceso
      1. Cargar librerías
      1. Cargar los datos
      1. Determinar variable dependiente e independiente
      1. Limpieza de datos
      1. Dividir el conjunto de datos en entrenamiento y validación, 70-30
      1. Determinar modelo de regresión lineal simple
      1. Evaluar el modelo
      1. Graficar linea de tendencia
      1. Determinar predicciones
      1. Interpretar el caso con 180-200 palabras

1. Cargar librerías

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_fltr <- select(datos_fifa, Wage, Value)

3. Determinar variable dependiente e independiente

print("Variable independiente x: Wage, es el salario de un jugador")
[1] "Variable independiente x: Wage, es el salario de un jugador"
print("Variable dependiente y: Value, es el valor económico de un jugador")
[1] "Variable dependiente y: Value, es el valor económico de un jugador"

4. Limpieza de 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_fltr <- datos_fltr %>% 
  mutate(Valor = ifelse(substr(Value, nchar(Value), nchar(Value)) == 'M', mk_to_pesos(Value) * 1000000, mk_to_pesos(Value) * 1000)) %>% 
  filter(Valor > 0)

datos_fltr <- datos_fltr %>% 
  mutate(Salario = ifelse(substr(Wage, nchar(Wage), nchar(Wage)) == 'M', mk_to_pesos(Wage) * 1000000, mk_to_pesos(Wage) * 1000)) %>% 
  filter(Valor > 0)
head(datos_fltr, 10); tail(datos_fltr, 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
ggplot(datos_fltr, aes(x = Salario, y = Valor)) +
  geom_point(color = "turquoise1")

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

set.seed(2020)
conjunto_para_modelo <- createDataPartition(y = datos_fltr$Valor, p = 0.7, list = FALSE, times = 1)

conjunto_entrenamiento <- datos_fltr[conjunto_para_modelo, ]

conjunto_validacion <- datos_fltr[-conjunto_para_modelo, ]

head(conjunto_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(conjunto_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
coeficiente_correlacion <- cor(x = conjunto_entrenamiento$Salario, y = conjunto_entrenamiento$Valor, method = "pearson")

coeficiente_correlacion
[1] 0.8591612
cor.test(conjunto_entrenamiento$Salario, conjunto_entrenamiento$Valor)

    Pearson's product-moment correlation

data:  conjunto_entrenamiento$Salario and conjunto_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 
coeficiente_r_square <- coeficiente_correlacion ^ 2

coeficiente_r_square
[1] 0.7381579

6. Determinar modelo de regresión lineal simple

modelo <- lm(formula = Valor ~ Salario, data = conjunto_entrenamiento)

summary(modelo)

Call:
lm(formula = Valor ~ Salario, data = conjunto_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. Graficar linea de tendencia

ggplot(data = datos_fltr, mapping = aes(x = Salario, y = Valor)) + 
  geom_point(color = "turquoise1", 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))

9. Determinar predicciones

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"
prediccion <- predict(modelo, newdata = conjunto_validacion)
conjunto_validacion <- mutate(conjunto_validacion, predicho = prediccion)

head(conjunto_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(conjunto_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. Interpretar el caso con 180-200 palabras

De este conjunto de datos se tomó Wage como variable independiente y Value como dependiente. El coeficiente de correlación entre ambas variables es de 0.7381579 lo cual nos dice que el salario explica solo el 73.82% del valor económico de los jugadores, es más del 50% pero puede no ser un valor representativo entre variables. Realizado el modelo, el coeficiente de a es de 292987.553576029 y b de 218.384057537379, esto nos dice que por cada unidad de salario en un jugador, su valor de Y aumente 218.384057537379. El modelo predice correctamente, pero Wage puede no ser la variable ideal para determinar qué factor es el mejor para evaluar el valor económico de un jugador. No es el modelo adecuado ya que en la gráfica de dispersión de los datos podemos observar que no es una línea recta, forma ligeramente una curva. La principal diferencia con el caso 5 es la linealidad del caso, Wage es una variable más cercana para estimar el valor económico de un jugador, siendo no la ideal pero más cercana que Overall.