###Ahora el modelo polinómico: ## y=β0+β1xi2+β3xi3+…+βdxdin+ϵi
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)
## Warning: package 'caret' was built under R version 4.0.3
## Loading required package: lattice
datos.FIFA <- read.csv("../datos/data.csv", encoding = "UTF-8")
datos <- select(datos.FIFA, Overall, Value)
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"
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)
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
ggplot(datos, aes(x = Overall, y = Valor)) +
geom_point()
# 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
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
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 jugado.r por lo que el modelo es aceptable.
La predicción será dada por
Para este caso significa que Overall explica el valor económico del jugador.
¿Será mejor otro modelo polinómico?
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.
La predicción será dada por
Para este caso significa que Overall explica el Valor económico del jugador.
¿Será mejor otro modelo polinómico?
ggplot() +
geom_point(data = datos, aes(x = Overall, y = Valor)) + geom_line(aes( x = datos$Overall, y = predict(modelo2, datos)), color = "red")
ggplot() +
geom_point(data = datos, aes(x = Overall, y = Valor)) + geom_line(aes( x = datos$Overall, y = predict(modelo4, datos)), color = "darkred")
# 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
prediccion <- predict(modelo2, newdata = datos.validacion)
# head(prediccion, 10); tail(prediccion, 10)
new.datos.validacion <- mutate(datos.validacion, predicho2 = prediccion)
# head(new.datos.validacion, 10)
# tail(new.datos.validacion, 10)
prediccion <- predict(modelo4, newdata = datos.validacion)
# head(prediccion, 10); tail(prediccion, 10)
new.datos.validacion <- mutate(new.datos.validacion, predicho4 = prediccion)
head(new.datos.validacion, 10)
## Overall Value Valor predicho2 predicho4
## 1 91 \20072M 72000000 42439871 77346260
## 2 91 \20051M 51000000 42439871 77346260
## 3 90 \20068M 68000000 39560037 68369009
## 4 89 \20089M 89000000 36778617 60205554
## 5 89 \20060M 60000000 36778617 60205554
## 6 89 \20038M 38000000 36778617 60205554
## 7 89 \20027M 27000000 36778617 60205554
## 8 88 \20069.5M 69500000 34095610 52804991
## 9 88 \20062M 62000000 34095610 52804991
## 10 88 \20073.5M 73500000 34095610 52804991
tail(new.datos.validacion, 10)
## Overall Value Valor predicho2 predicho4
## 5377 48 \20020K 20000 7474373 461573.5
## 5378 48 \20060K 60000 7474373 461573.5
## 5379 48 \20040K 40000 7474373 461573.5
## 5380 47 \20040K 40000 8826318 760339.0
## 5381 47 \20050K 50000 8826318 760339.0
## 5382 47 \20060K 60000 8826318 760339.0
## 5383 47 \20060K 60000 8826318 760339.0
## 5384 47 \20070K 70000 8826318 760339.0
## 5385 47 \20060K 60000 8826318 760339.0
## 5386 47 \20060K 60000 8826318 760339.0
Describir de 180 a 200 palabras