Problema de estudio

El valor económico de un futbolista profesional en Europa es un factor crucial para los clubes y agentes en la toma de decisiones sobre fichajes, contratos y estrategias de mercado. No obstante, determinar este valor no es sencillo, ya que está influenciado por diversos factores cuantitativos y cualitativos. A pesar de la existencia de modelos y estudios previos que intentan explicar el valor de mercado de los jugadores, aún persisten dudas sobre cuáles son las características más influyentes y cómo se combinan para determinar dicho valor.

Objetivo General

Determinar las características que determinan el valor económico de un jugador profesional de futbol europeo.

Objetivos específicos

  1. Determinar las características físicas que generan mayor valor económico
  2. Determinar si la nacionalidad puede inferir en el valor de un jugador profesional
  3. Determinar si el rol puede afectar el valor de un jugador

1. Limpieza de Datos

Realizar la limpieza de datos y explicar los cambios realizados.

La limpieza de los datos se hizo de tal forma que variables que no iban de la mano con los objetivos planteados en el proyecto fueron eliminados, esto gracias a la robustez de la base de datos encontrada. Las variables eliminadas completamente fueron: Número de columnas, nombre del agente, lugar exacto de nacimiento, fecha de contrato, entre otros.

Por otro lado, de la descarga del archivo en xlsx de la página kaggle.com se obtuvieron errores como: casillas vacías, errores de digitación y combinación de celdas en algunas filas referentes a jugadores en específico. Se procedió arreglar los errores de digitación y espacios vacíos de forma manual, teniendo en cuenta información de la web referentes a alturas y precios de jugadores en el mercado de transferencias. Para los jugadores que presentaban información deficiente sin información en la web se decidió eliminarlos de la base de datos, estos jugadores eliminados no fueron mayores a 10.

2. Edad vs. Precio

media_edad <- mean(datos$age)
media_precio <- mean(datos$price)
media_preciomax <- mean(datos$max_price)

media_edad
## [1] 26.40452
media_precio
## [1] 116.2149
media_preciomax
## [1] 189.6158
percentil_edad <- quantile(datos$age)
percentil_precio <- quantile(datos$price)
percentil_preciomax <- quantile(datos$max_price)

percentil_edad
##   0%  25%  50%  75% 100% 
##   17   23   26   30   42
percentil_precio
##   0%  25%  50%  75% 100% 
##    1   20   50  150 1800
percentil_preciomax
##   0%  25%  50%  75% 100% 
##    1   40  100  250 2000

La media de la edad de los jugadores es de 26.4 años, lo que sugiere que la mayoría está en una etapa temprana de su carrera profesional. El precio regular promedio es de $11.620.000, mientras que el precio máximo promedio es de $18.960.000, indicando una variabilidad significativa en el mercado de jugadores. Las medianas nos ofrecen una perspectiva adicional: la edad mediana es de 26 años, confirmando la juventud general del grupo; la mediana del precio regular es de $5.000.000 y la del precio máximo es de $10.000.000, ambos significativamente más bajos que sus respectivas medias. Esta diferencia entre medianas y medias sugiere una distribución sesgada hacia valores altos, donde unos pocos jugadores extremadamente valiosos elevan los promedios, mientras que la mayoría se encuentra en un rango de precios más bajo. Esta información es crucial para la toma de decisiones en la gestión y valoración económica de los jugadores.

3. Precio vs. Liga

# Boxplot de Precio vs Liga
boxplot(datos$price ~ datos$league,
        main = "Figura 1: Precio vs Liga",
        xlab = "Liga",
        ylab = "Precio (x$100.000)",
        col = "purple")

El gráfico muestra la distribución de los precios de los jugadores en función de las diferentes ligas. Aspectos relevantes del gráfico son: -Distribución del Precio en Cada Liga: En el gráfico se evidencia que la EPL maneja la mediana de los precios más elevados. -Variabilidad del Precio: El tamaño de la caja en cada boxplot indica la variabilidad de los precios de los jugadores en esa liga. Una caja más grande indica una mayor dispersión en los precios. Por lo tanto se evidencia como en EPL hay considerable mayor dispersión en los precios con respecto a las otras ligas, claramente hay excepciones como lo son los datos atípicos. -Identificación de Valores Atípicos: Los puntos individuales fuera de los bigotes son considerados valores atípicos. Estos puntos representan precios de jugadores que son significativamente más altos o más bajos que el resto de los datos en esa liga. Para el comportamiento del precio del mercado de transferencia de jugadores profesionales no se manejan valores atípicos cercanos a cero, esto se debe a la cantidad de jugadores jóvenes que continuamente desean ingresar al futbol profesional, comenzando con valores de transferencia cercanos a cero. Por otro lado, para la parte superior hace referencia a jugadores que resaltan muy por encima de los demás y además pueden poseer características que permiten proyectar un crecimiento futbolístico potencial principalmente la edad. Para estos casos se tienen muestras concretas de jugadores como Mbappe, Phil Foden o Haaland. Los cuales poseen un gran valor económico (atípico) debido a sus desempeños y corta edad.

# Configurar el espacio para múltiples gráficos
par(mfrow = c(2, 3))

# Histograma para cada liga
hist_epl <- hist(filter(datos, league == "EPL")$price,xlim=c(0,1500), 
                 main = "EPL", 
                 xlab = "Precio (x$100.000)", 
                 ylab = "Frecuencia", 
                 col = "#188F99")

hist_bundesliga <- hist(filter(datos, league == "Bundesliga")$price,xlim=c(0,1500),  
                        main = "Bundesliga",  
                        xlab = "Precio (x$100.000)", 
                        ylab = "Frecuencia", 
                        col = "#188F99")

hist_serieA <- hist(filter(datos, league == "SerieA")$price,xlim=c(0,1500), 
                    main = "Serie A", 
                    xlab = "Precio (x$100.000)", 
                    ylab = "Frecuencia", 
                    col = "#188F99")

hist_laliga <- hist(filter(datos, league == "LaLiga")$price,xlim=c(0,1500), 
                    main = "LaLiga", 
                    xlab = "Precio (x$100.000)", 
                    ylab = "Frecuencia", 
                    col = "#188F99")

hist_ligue1 <- hist(filter(datos, league == "Ligue1")$price,xlim=c(0,1500), 
                    main = "Ligue 1", 
                    xlab = "Precio (x$100.000)", 
                    ylab = "Frecuencia", 
                    col = "#188F99")


# Volver a una sola columna
par(mfrow = c(1, 1))

Se generaron 5 histogramas para cada una de las ligas con el propósito de facilitar la organización y visualización de la información obtenida a partir de la base de datos. Las gráficas proporcionan información coherente a la que se obtuvo previamente en el diagrama de cajas con una frecuencia elevada de jugadores con valores alrededor de los 10 millones o menos para todas las ligas, teniendo como excepción la EPL la cual tiende a superar este valor. De manera visual se muestra la alta proporción de jugadores que conforman la parte baja de los valores del mercado de transferencia, comportándose de forma regular. En todas las ligas se puede observar la presencia de valores atípicos que superan con creces a la mayoría pero difieren en valor según su liga respectiva.

# Obtener marcas de clase de los histogramas
marcas_epl <- hist_epl$mids
marcas_bundesliga <- hist_bundesliga$mids
marcas_serieA <- hist_serieA$mids
marcas_laliga <- hist_laliga$mids
marcas_ligue1 <- hist_ligue1$mids


# Crear gráfico de poligonos de frecuencia
plot(marcas_epl, hist_epl$counts, type = "b", 
     xlim = c(min(c(marcas_epl, marcas_bundesliga, marcas_serieA, marcas_laliga, marcas_ligue1)), 
              max(c(marcas_epl, marcas_bundesliga, marcas_serieA, marcas_laliga, marcas_ligue1))), 
     ylim = c(0, max(c(hist_epl$counts, hist_bundesliga$counts, hist_serieA$counts, hist_laliga$counts, hist_ligue1$counts))), 
     xlab = "Precio (x$100.000)", 
     ylab = "Frecuencia", 
     main = "Figura 2: Precio vs Liga")
lines(marcas_bundesliga, hist_bundesliga$counts, type = "b", col = "red")
lines(marcas_serieA, hist_serieA$counts, type = "b", col = "blue")
lines(marcas_laliga, hist_laliga$counts, type = "b", col = "brown")
lines(marcas_ligue1, hist_ligue1$counts, type = "b", col = "purple")

# Agregar leyenda
legend("topright", legend = c("EPL", "Bundesliga", "Serie A", "LaLiga", "Ligue 1"), 
       lty = 1, col = c("black", "red", "blue", "brown", "purple"))

El polígono nos permite visualizar de mejor manera la forma en la que se comportan los precios de los jugadores de las diferentes ligas de Europa. Se pueden contrastar entre sí y llega a la conclusión de que la serie A presenta los valores más bajos y la menor variación en sus precios, seguido por comportamientos muy similares por parte de LaLiga y la Bundesliga alrededor de sus medias y sus valores a los extremos. La EPL logra establecer los precios de sus jugadores por encima de las demás ligas con valores atípicos difíciles de evidenciar mediante está grafica. Para la Ligue 1 se logra ver una alta frecuencia de jugadores en valores de mercado bajos, pero con los mayores valores atípicos entre todas las ligas de futbol profesional europeo estudiadas.

4. Patrocinio por Posición

# Crear una tabla
tabla <- table(datos$position, datos$outfitter)

# Calcular proporciones
proporciones <- prop.table(tabla, margin = 1)  # margin = 1 para proporciones por fila


# Convertir proporciones en un data frame para ggplot
df_proporciones <- as.data.frame(proporciones)
colnames(df_proporciones) <- c("Position", "Outfitter", "Proportion")

# Crear gráfico de barras apiladas
ggplot(df_proporciones, aes(x = Position, y = Proportion, fill = Outfitter)) +
  geom_bar(stat = "identity", position = "fill") +
  labs(title = "Proporcion del Patrocinador por Posicion",
       x = "Posicion",
       y = "Proporcion",
       fill = "Patrocinador") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Inicialmente, se planteó la hipótesis de que ciertas posiciones de jugadores podrían tener una mayor proporción de patrocinadores en comparación con otras. Sin embargo, los datos muestran que esta suposición no es correcta. Las proporciones de patrocinio son similares entre todas las posiciones, indicando que la distribución de patrocinios no favorece a una posición específica sobre las demás. Este hallazgo es significativo porque sugiere que el criterio para recibir patrocinio no depende del rol o posición que juegue un deportista en su equipo, sino probablemente de otros factores como el rendimiento individual, la popularidad o la influencia social del jugador.

Al examinar la distribución de patrocinios, se observa que la gran mayoría de los jugadores profesionales no cuentan con el apoyo de ninguna marca deportiva. Esto podría indicar que las marcas deportivas están seleccionando a un grupo reducido y selecto de jugadores para patrocinar, posiblemente aquellos con mayor visibilidad o potencial de marketing. Entre las marcas que sí ofrecen patrocinios, Adidas destaca como la más prominente, patrocinando a poco más de 300 jugadores. Este dato resalta la posición dominante de Adidas en el mercado de patrocinios deportivos, quizás debido a estrategias de marketing agresivas o a acuerdos preferenciales con ligas y equipos.

Nike, la otra gran competidora en el mercado de equipamiento deportivo, patrocina alrededor de 200 jugadores. Aunque su presencia es significativa, es menor en comparación con Adidas. Esto podría reflejar diferencias en las estrategias de patrocinio entre ambas compañías, donde Nike podría estar enfocándose en un número menor de jugadores pero con perfiles más elevados o con mayor impacto mediático.

Además de Adidas y Nike, existen otras marcas que también patrocinan jugadores, pero estas abarcan un porcentaje muy pequeño del total. Esto sugiere un mercado de patrocinios altamente concentrado, donde unas pocas marcas dominan la mayor parte de los acuerdos de patrocinio. Las marcas más pequeñas pueden estar encontrando dificultades para competir con los gigantes del sector, o bien están adoptando estrategias de nicho, patrocinando a jugadores específicos que podrían tener un valor estratégico particular para ellas.

5. Relación Estatura vs. Precio

# Altura vs precio 
# Crear el gráfico de dispersión con línea de regresión
ggplot(datos, aes(x = height, y = price)) +
  geom_point(color = "blue") +  # Puntos del gráfico de dispersión
  geom_smooth(method = "lm", col = "red") +  # Línea de regresión lineal
  labs(title = "Relacion entre Precio y Estatura",
       x = "Estatura (cm)",
       y = "Price (x$100.000)") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

La gráfica de dispersión muestra la relación entre la estatura (height) y el precio (price). Cada punto azul en el gráfico representa una observación individual de estatura y precio. La línea roja es una línea de regresión lineal que se ajusta a estos puntos, indicando una relación lineal entre las dos variables. La línea de regresión lineal en rojo sugiere la tendencia general de cómo cambia el precio en función de la estatura. Si la pendiente de la línea es positiva, implica que hay una relación positiva entre estatura y precio, es decir, a medida que aumenta la estatura, también lo hace el precio. Si la pendiente es negativa, la relación sería inversa como lo que sucede en este caso. La dispersión de los puntos azules alrededor de la línea de regresión proporciona información sobre la variabilidad de los datos y el ajuste de la regresión. Como se puede ver, los puntos están muy dispersos alrededor de la línea, esto nos indica que lo más probable es que hay otros factores que afectan el precio además de la estatura los cuales son más significativos a la hora de valorar a los jugadores.

6. Intervalos de confianza para la estatura y la edad

Calcular intervalos de confianza para la edad (age)

media_age <- mean(datos$age, na.rm = TRUE)
sd_age <- sd(datos$age, na.rm = TRUE)
n_age <- sum(!is.na(datos$age))  #Número de observaciones no NA

confianza <- 0.95
alpha <- 1 - confianza
z_value <- qnorm(1 - alpha/2) #Valor crítico para 95%

se_age <- sd_age / sqrt(n_age)

ic_age <- c(
  media_age - z_value * se_age,
  media_age + z_value * se_age
)

print("Intervalo de confianza del 95% para la edad:")
## [1] "Intervalo de confianza del 95% para la edad:"
print(ic_age)
## [1] 26.21020 26.59884

Estamos 95% seguros de que la media de la edad de los jugadores de fútbol, si consideramos todas las ligas del mundo, está entre 26.21 y 26.60 años. Esto sugiere que la mayoría de los jugadores de fútbol tienden a estar en sus mejores años de rendimiento deportivo, que generalmente se asocian con mediados de los 20 años.

Calcular intervalos de confianza para la altura (height)

media_height <- mean(datos$height, na.rm = TRUE)
sd_height <- sd(datos$height, na.rm = TRUE)
n_height <- sum(!is.na(datos$height))  # Número de observaciones no NA

se_height <- sd_height / sqrt(n_height)

ic_height <- c(
  media_height - z_value * se_height,
  media_height + z_value * se_height
)

print("Intervalo de confianza del 95% para la altura:")
## [1] "Intervalo de confianza del 95% para la altura:"
print(ic_height)
## [1] 182.7952 183.3644

Estamos 95% seguros de que la media de la altura de los jugadores de fútbol, considerando todas las ligas del mundo, está entre 182.80 cm y 183.36 cm. Esto indica que los jugadores de fútbol tienden a ser bastante altos, lo cual es beneficioso para muchas posiciones en el campo de juego, especialmente para roles que requieren habilidades aeróbicas y defensivas.

Los intervalos de confianza proporcionan una estimación del rango en el que se espera encontrar los verdaderos valores de las medias de la edad y la altura de los jugadores de fútbol con un 95% de certeza. Estos resultados son útiles para equipos, entrenadores y analistas deportivos al tomar decisiones sobre entrenamiento, selección de jugadores y desarrollo de talentos, lo que también termina determinando el precio final que termina obteniendo un jugador de futbol en esos intervalos.

7. Intervalo de confianza para la proporción de jugadores en las diferentes ligas.

Datos proporcionados

n_total <- 2168

Número de jugadores en cada liga

n_bundesliga <- 485
n_serie_a <- 350
n_laliga <- 471
n_ligue_1 <- 419
n_premier_league <- 444

Función para calcular el intervalo de confianza

calcular_ic <- function(n, x) {
  p_hat <- x / n
  se <- sqrt((p_hat * (1 - p_hat)) / n)
  z_value <- 1.96  # Nivel de confianza del 95%
  ic_lower <- p_hat - z_value * se
  ic_upper <- p_hat + z_value * se
  return(c(ic_lower, ic_upper))
}

Calcular los intervalos de confianza para cada liga

ic_bundesliga <- calcular_ic(n_total, n_bundesliga)
ic_serie_a <- calcular_ic(n_total, n_serie_a)
ic_laliga <- calcular_ic(n_total, n_laliga)
ic_ligue_1 <- calcular_ic(n_total, n_ligue_1)
ic_premier_league <- calcular_ic(n_total, n_premier_league)

Imprimir los resultados

print("Intervalo de confianza del 95% para la Bundesliga:")
## [1] "Intervalo de confianza del 95% para la Bundesliga:"
print(ic_bundesliga)
## [1] 0.2061664 0.2412505

Bundesliga: Con un nivel de confianza del 95%, la proporción de jugadores en la Bundesliga se encuentra entre 20.61% y 24.12%.

print("Intervalo de confianza del 95% para la Serie A:")
## [1] "Intervalo de confianza del 95% para la Serie A:"
print(ic_serie_a)
## [1] 0.1459510 0.1769272

Serie A: Con un nivel de confianza del 95%, la proporción de jugadores en la Serie A se encuentra entre 14.59% y 17.69%.

print("Intervalo de confianza del 95% para LaLiga:")
## [1] "Intervalo de confianza del 95% para LaLiga:"
print(ic_laliga)
## [1] 0.1998922 0.2346097

LaLiga: Con un nivel de confianza del 95%, la proporción de jugadores en LaLiga se encuentra entre 19.98% y 23.46%.

print("Intervalo de confianza del 95% para la Ligue 1:")
## [1] "Intervalo de confianza del 95% para la Ligue 1:"
print(ic_ligue_1)
## [1] 0.1766442 0.2098871

Ligue 1: Con un nivel de confianza del 95%, la proporción de jugadores en la Ligue 1 se encuentra entre 17.66% y 20.98%.

print("Intervalo de confianza del 95% para la Premier League:")
## [1] "Intervalo de confianza del 95% para la Premier League:"
print(ic_premier_league)
## [1] 0.1878096 0.2217845

Premier League: Con un nivel de confianza del 95%, la proporción de jugadores en la Premier League se encuentra entre 18.78% y 22.17%.

Estos intervalos de confianza proporcionan una estimación de la distribución de jugadores en algunas de las ligas de fútbol más importantes del mundo, permitiendo entender mejor cómo se distribuyen los jugadores entre las distintas competiciones, de tal manera que uno pueda saber donde se mueve de mejor manera el mercado de jugadores dependiendo de su respectiva liga.

8. Prueba de hipótesis para la edad promedio

Planteamiento de la prueba de hipótesis

print("La siguiente prueba de hipotesis evalua si la edad promedio de los jugadores es significativamente diferente de 26 anos:")
## [1] "La siguiente prueba de hipotesis evalua si la edad promedio de los jugadores es significativamente diferente de 26 anos:"
print("H0: La edad promedio de los jugadores es igual a 26 anos")
## [1] "H0: La edad promedio de los jugadores es igual a 26 anos"
print("H1: La edad promedio de los jugadores es diferente a 26 anos")
## [1] "H1: La edad promedio de los jugadores es diferente a 26 anos"

Obtener estadísticas necesarias

media_muestral <- mean(datos$age, na.rm = TRUE)
desv_est <- sd(datos$age, na.rm = TRUE)
n <- sum(!is.na(datos$age))
valor_hipotesis <- 26

Calcular el estadístico de prueba (z)

z_stat <- (media_muestral - valor_hipotesis) / (desv_est/sqrt(n))

Calcular el valor p (prueba de dos colas)

p_value <- 2 * (1 - pnorm(abs(z_stat)))

Decisión e interpretación

print("Interpretacion:")
## [1] "Interpretacion:"
if(p_value < 0.05) {
  print("Con un nivel de significancia del 5%, se rechaza la hipotesis nula.")
  print("Existe evidencia estadistica suficiente para concluir que la edad promedio")
  print("de los jugadores es diferente a 26 anos.")
} else {
  print("Con un nivel de significancia del 5%, no se rechaza la hipotesis nula.")
  print("No existe evidencia estadística suficiente para concluir que la edad promedio")
  print("de los jugadores es diferente a 26 años.")
}
## [1] "Con un nivel de significancia del 5%, se rechaza la hipotesis nula."
## [1] "Existe evidencia estadistica suficiente para concluir que la edad promedio"
## [1] "de los jugadores es diferente a 26 anos."