Objetivo Analizar caso FIFA mediante un modelo de regresión polinomial con las variables Overall y Value del conjunto de datos.
Descripción Determinar modelo de regresión polinomial de segundo y de tercer y cuarto nivel para establecer un análisis en el conjunto de datos del caso FIFA y comparar con el modelo de regresión lineal simple.
Fundamento teórico Regresión Polinomial Los modelos lineales tienen la ventaja de ser fácilmente interpretables, sin embargo, pueden tener limitaciones importantes en capacidad predictiva. Esto se debe a que, la asunción de linealidad, es con frecuencia una aproximación demasiado simple para describir las relaciones reales entre variables. A continuación, se describen métodos que permiten relajar la condición de linealidad intentando mantener al mismo tiempo una interpretabilidad alta.
La forma más sencilla de incorporar flexibilidad a un modelo lineal es introduciendo nuevos predictores obtenidos al elevar a distintas potencias el predictor original.
Partiendo del modelo lineal:
y=β0+β1xi+ϵi
Ahora el modelo polinómico:
y=β0+β1xi+β2xi2+β3xi3…+βdxin+ϵi
ó
y=a+bx+cx2+dx3…zxn
La fórmula de regresión polinomial dependiendo de la potencia a la que se determine significa que el valor de la predicción estará dado por la suma del primer coeficiente que genera el modelo mas el segundo coeficiente multiplicado por el valor de la variable independiente mas el tercer coeficiente multiplicado por el valor de la misma variable independiente elevando al cuadrado (si es el modelo al cuadrado) mas el tercer coeficiente multiplicado por el valor de la misma variable independiente elevando al cubo (si es el modelo al cubo)… … así sucesivamente hasta llegar a la última potencia.
Desarrollo El caso sigue el siguiente proceso:
Cargar librería
Cargar los datos
Determinar variable independiente y dependiente
Limpiar los datos
Partir el conjunto de datos en datos de entrenamiento y datos de validción 70%, 30%
Determinar el modelo de regresión polinimoal de segund (posiblemente de tercer y cuarto nivel) nivel
Evaluar el modelo. Interpretación
Curva de tendencia
Determinar predicciones
Interpretar el caso con un texto descriptivo de 80 a 100 palabras. Individual
Cargar librerías
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) # Para particionar datos
## Loading required package: lattice
La instrucción dentro de readr(“../Datos/fifa_datos.csv”), significa que a partir del directrio markdown se regrese una carpeta y luego busque la carpeta Datos y en ella encuentre el archivo fifa_datos.csv.
Cargar los datos Antes de ejecutar la instrucción de cargar los datos en R con read.csv() debe asegurarse de haber descargado los datos en su carpeta local. Estos puede descargarlos de la dirección Plataforma schoology datos fifa con su cuenta correspondiente. Otra alternativa es directamente de un repositorio de github tal como Datos fifa de github
En la variable datos solo se seleccionan con select() las columnas de interés Overall y Value. datos.FIFA
<-read.csv(“C:\Users\brandon\Documents\Datos\fifa_datos.csv.txt”, encoding = “UTF-8”)
datos <- select(datos.FIFA, Overall, Value)
Determinar variable independiente y dependiente
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"
Limpiar los datos Primero cargar la función
source(“https://raw.githubusercontent.com/rpizarrog/FundamentosMachineLearning/master/scripts/misfunciones.r”)
Limpiar el datos de Value convertirlo a numérico en una nueva variable llamada Va
datos <- datos %>% mutate(Valor = ifelse (substr(Value, nchar(Value), nchar(Value)) == ‘M’, fcleanValue(Value) * 1000000, fcleanValue(Value) * 1000)) %>% filter(Valor > 0)
Visualizar los primeros diez y últimos diez registros
head(datos, 10)
tail(datos, 10)
Visualizar la dispersión de los datos
ggplot2(datos, aes(x = Overall, y = Valor)) + geom_point()
Limpiar el datos de Value convertirlo a numérico en una nueva variable llamada Va
datos <- datos %>% mutate(Valor = ifelse (substr(Value, nchar(Value), nchar(Value)) == ‘M’, fcleanValue(Value) * 1000000, fcleanValue(Value) * 1000)) %>% filter(Valor > 0)
Visualizar los primeros diez y últimos diez registros
head(datos, 10)
tail(datos, 10)
Visualizar la dispersión de los datos
ggplot(datos, aes(x = Overall, y = Valor)) + geom_point()
De acuerdo la gráfica se aprecia una relación en forma de curva y no precisamente lineal.
Datos de entrenamiento y datos de validación Partir el conjunto de datos en datos de entrenamiento y datos de validación 70%, 30%
Datos de entrenamiento # 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 Datos de validación # Datos validación datos.validacion <- datos[-entrena, ]
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 construir 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
Modelo Polinomial Modelo a la segunda potencia 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-squared igual a 0.7535 y el Adjusted R-Square igual a 0.7535 representan que la variable Overall representa aproximadamente el 75% de Value en un jugador por lo que el modelo es aceptable.
También se puede interpretar que el 75.35% de la variación de la varaible Value es explicada por la relación con la variable Overall, o lo que es lo mismo, Overall explica aproximadamente el 75% del valor económico del jugador.
La predicción será dada por
y = β0 + β1{xi}^2 +ϵi
Para este caso significa que Overall explica el valor económico del jugador.
¿Será mejor otro modelo polinómico?
Modelo a la potencia de 4 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.
También se puede interpretar que el 89.94% de la variación de la varaible Value es explicada por la relación con la variable Overall, o lo que es lo mismo, Overall explica aproximadamente el 89.94% del valor económico del jugador.
La predicción será dada por
y = β0 + β1{xi}^2 β1{xi}^3 + β1{xi}^4 +ϵi
Para este caso significa que Overall explica el Valor económico del jugador.
¿Será mejor otro modelo polinómico?
Visualizar tendencia Linea de tendencia con ggplot()
Tendencia a la segunda potencia
ggplot() + geom_point(data = datos, aes(x = Overall, y = Valor)) + geom_line(aes( x = datos$Overall, y = predict(modelo2, datos)), color = “red”)
Tendencia a la cuarta potencia
ggplot() + geom_point(data = datos, aes(x = Overall, y = Valor)) + geom_line(aes( x = datos$Overall, y = predict(modelo4, datos)), color = “darkred”)
Precisamente se observa que no hay del todo una relación lineal sino más bien una regresión curva polinómica; la f´romula POLINÓMICA elevada a la cuarta potencia mejora en eficiencia en el modelo y por consecuencia deberá hacerlo en las predicciones.
Determinar predicciones Algunas predicciones con el conjunto de datos de validación usando la fórmula del modelo:
y = β0 + β1{xi}^2 +β3{xi}3+…+βd{xdi}n+ϵi
paste(“Valor de b0 =”, modelo2coefficients[1]) # paste(“Valor de b1 =”, modelo2coefficients[2]) Por cada unidad de Overall PENDIENTE
Con head() y tail(), verificar algunas predicciones
Predicciones con modelo2 prediccion <- predict(modelo2, newdata = datos.validacion) # head(prediccion, 10); tail(prediccion, 10) Agregar a datos de validación una columna con las predicciones del modelo2 construidas para comparar
new.datos.validacion <- mutate(datos.validacion, predicho2 = prediccion)
head(new.datos.validacion, 10)
tail(new.datos.validacion, 10)
Predicciones con modelo4 prediccion <- predict(modelo4, newdata = datos.validacion) # head(prediccion, 10); tail(prediccion, 10) Agregar a datos de validación una columna con las predicciones del modelo2 construidas para comparar new.datos.validacion <- mutate(new.datos.validacion, predicho4 = prediccion)
head(new.datos.validacion, 10) ## Overall Value Valor predicho2 predicho4 ## 4 91 \20072M 72000000 42439871 77346260 ## 9 91 \20051M 51000000 42439871 77346260 ## 10 90 \20068M 68000000 39560037 68369009 ## 16 89 \20089M 89000000 36778617 60205554 ## 22 89 \20060M 60000000 36778617 60205554 ## 23 89 \20038M 38000000 36778617 60205554 ## 25 89 \20027M 27000000 36778617 60205554 ## 29 88 \20069.5M 69500000 34095610 52804991 ## 30 88 \20062M 62000000 34095610 52804991 ## 31 88 \20073.5M 73500000 34095610 52804991 tail(new.datos.validacion, 10) ## Overall Value Valor predicho2 predicho4 ## 17921 48 \20020K 20000 7474373 461573.5 ## 17924 48 \20060K 60000 7474373 461573.5 ## 17926 48 \20040K 40000 7474373 461573.5 ## 17936 47 \20040K 40000 8826318 760339.0 ## 17943 47 \20050K 50000 8826318 760339.0 ## 17945 47 \20060K 60000 8826318 760339.0 ## 17946 47 \20060K 60000 8826318 760339.0 ## 17948 47 \20070K 70000 8826318 760339.0 ## 17950 47 \20060K 60000 8826318 760339.0 ## 17952 47 \20060K 60000 8826318 760339.0 Interpretación del caso
Describir de 180 a 200 palabras De acuerdo a los datos usados anteriormente de fifa podemos sacar una regresion lineal entre dos variables que en este caso son la de Overall(en general) que significa como se valora a un jugador en su totalidad, esta es la variable independiente (x) de este caso y la variable dependiente (y) en la que nos basaremos es la de value(valor) que es lo que vale un jugador en un valor economico.
La correlacion entre las dos variables es de 0.6252 lo cual significa que es una correlacion moderada o aceptable entre las dos variables.
El valor del coeficiente CR o R Square es de 0.3909.
En cuanto al valor de a y b mostrados en la ecuacion de regresion lineal simple es de -31403213.910327 y 511215.731269587 respectivamente que quiere decir que por cada unidad de Overall en el jugador el valor de Y aumenta 511215.7312696 veces, entonces podemos decir que entre mas overall tenga un jugador su precio aumenta, sin embargo podriamos decir que tambien otras variables influyen en el overall de un jugador pero a grandes rasgos las variables que se usan estan bien.
¿Cuáles son las variables independientes y dependientes del caso y qué significan (b0 & b1)? Como variable independiente es Orevall que se puede intrepertar como la popularidad o valoracion de un jugador y la variable dependiente es Value que es el valor economico del jugador
Cuál es valor del coeficiente de correlación R Square y R Square adjusted en el modelo? CR es de 0.39, por lo cual Overall explica el 39.1% del valor monetario de un jugador.
¿Cuál es el valor de b0 y b1 en la ecuación de regresión a la potencia 2, 3, 4 o 6
y=β0+β1xi2+β3xi3+…+βdxdin+ϵi
y qué significa?
a = -314 y b = 511, esto quiere decir que entre más valorado sea un jugador más sera su valor economico.
Qué tan bien predice el modelo? Tenemos una correlación positiva/media, por lo cual podemos indicar que el modelo cumple con su misión.
Es el modelo de regresión lineal polinómico adecuado para predecir el valor económico del jugador basado únicamente en la variable Overall?
¿Que comparación se tienen con el modelo lineal en estas dos variables Overall y Value?
Tratandose de regreción simple es adeducado ya que solo se utiliza una variable, claro que se puede seleccionar otra variable diferente a Overall, en algun caso que se quiera realizar un modelo con más de una variable necesitarios utiliza