Objetivo

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

Descripción

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

Proceso

1. Cargar librerías

library(readr)
library(dplyr)
library(ggplot2)
library(caret)  # Para particionar datos

2. Cargar los datos

datos.FIFA <- read.csv("data.csv", encoding = "UTF-8")


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

3. Determinar variable independiente y dependiente

print("La variable 'x' independiente es Wage que significa saario de un jugador")
## [1] "La variable 'x' independiente es Wage que significa saario de 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. Limpiar los datos

source("misfunciones.r")

# o 

# source("https://raw.githubusercontent.com/rpizarrog/FundamentosMachineLearning/master/scripts/misfunciones.r")
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)
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
ggplot(datos, aes(x = Salario, y = Valor)) +
    geom_point()

* De acuerdo la gráfica se aprecia 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 entrenamiento y datos de validación 70%, 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
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
CR <- correla ^ 2
CR
## [1] 0.7381579
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. Evaluación del modelo. Supuestos del modelo de regresión lineal

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

Visualizar tendencia

  • Linea de tendencia con ggplot()
ggplot(data = datos, mapping = aes(x = Salario, y = Valor)) +
  geom_point(color = "forestgreen", 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

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 = datos.validacion)
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 del caso

este es un nuevo caso de nuestro documento o archivos de datos FIFA los cuales los descargamos de kaggle el cual tiene 91 variables y 18207 observaciones. igual que en el documento pasado tenemos que sacar la variable dependiente y la independiente para hacer una regresion lineal simple con esos datos. en este caso la variable dependiente es el valor economico de un jugador y la variable independiente es el salario de un jugador.se hara una correlacion entre las dos variables y el resultado fue 0.85 que es una correlacion positiva.aqui podemos ver que el CR es de .73. el modelo se ve como es la correlacoin de las dos varibles pero el salario independiente tiene mas indice de correlacion que la otra variable. por lo que nos damos cuenta en este analisis de datos es que si hay mayor indice de correlacion de uno a otro