Introducción

El presente informe desarrolla un análisis estadístico descriptivo sobre la base de datos de jugadores convocados a la Copa Mundial de la FIFA 2026, correspondiente a la Actividad 112 del curso. La base contiene información individual de 1.039 jugadores provenientes de distintas selecciones clasificadas.

El objetivo de este trabajo es aplicar los conceptos de estadística descriptiva vistos en el curso y hacer análisis sobre variables tanto cualitativas como cuantitativas, con el fin de caracterizar el perfil general de los convocados al torneo.

Objetivos

Objetivo general

Realizar un análisis estadístico descriptivo de al menos dos variables cualitativas y dos variables cuantitativas de la base de datos de jugadores de la Copa Mundial FIFA 2026, mediante tablas de frecuencia, indicadores estadísticos y gráficos, que permitan describir las características generales de los jugadores convocados.

Selección Variables

Tipo de variable Variable Descripción
Cualitativa Posicion Posición de juego del jugador (Portero, Defensa, Mediocampista, Delantero)
Cualitativa Country Selección nacional a la que representa el jugador
Cuantitativa Age Edad del jugador (en años)
Cuantitativa Goles Número de goles anotados por el jugador
# Carga de la base de datos
datos <- read_csv("wc2026_depurado (1).csv", show_col_types = FALSE)

# Traducción de la posición al español para mejor lectura
datos <- datos %>%
  mutate(Posicion_es = case_when(
    Posicion == "GK" ~ "Portero",
    Posicion == "DF" ~ "Defensa",
    Posicion == "MF" ~ "Mediocampista",
    Posicion == "FW" ~ "Delantero",
    TRUE ~ Posicion
  ))
Vista previa de la base de datos
Jugador Posición Selección Edad Goles
Brenden Aaronson Mediocampista United States 25 0
Thelo Aasgaard Mediocampista Norway 24 1
Hamza Abdelkarim Delantero Egypt 18 0
Hossam Abdelmaguid Defensa Egypt 25 0
Mohamed Abdelmonem Defensa Egypt 27 0
Ali Abdi Defensa Tunisia 32 0

Análisis de variables cualitativas

Variable cualitativa 1: Posición de juego (Posicion)

tabla_posicion <- datos %>%
  count(Posicion_es, name = "Frecuencia") %>%
  mutate(
    `Frecuencia relativa` = round(Frecuencia / sum(Frecuencia), 3),
    `Porcentaje (%)` = round(Frecuencia / sum(Frecuencia) * 100, 1)
  ) %>%
  arrange(desc(Frecuencia))

kable(tabla_posicion, caption = "Tabla de frecuencias - Posición de juego") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE) %>%
  row_spec(0, background = "#00573F", color = "white", bold = TRUE)
Tabla de frecuencias - Posición de juego
Posicion_es Frecuencia Frecuencia relativa Porcentaje (%)
Mediocampista 392 0.377 37.7
Defensa 349 0.336 33.6
Delantero 236 0.227 22.7
Portero 62 0.060 6.0
# Variables auxiliares para el texto (evitan nombres de columnas con espacios en línea)
top_posicion      <- tabla_posicion$Posicion_es[1]
top_posicion_frec <- tabla_posicion$Frecuencia[1]
top_posicion_pct  <- tabla_posicion$`Porcentaje (%)`[1]
ggplot(tabla_posicion, aes(x = reorder(Posicion_es, -Frecuencia), y = Frecuencia, fill = Posicion_es)) +
  geom_col(width = 0.65) +
  geom_text(aes(label = Frecuencia), vjust = -0.4, fontface = "bold", color = "grey20") +
  scale_fill_manual(values = paleta_fifa) +
  labs(
    title = "Distribución de jugadores por posición de juego",
    subtitle = "Convocados a la Copa Mundial FIFA 2026",
    x = "Posición", y = "Número de jugadores"
  ) +
  tema_fifa +
  theme(legend.position = "none")

tabla_posicion <- tabla_posicion %>%
  mutate(etiqueta = paste0(Posicion_es, "\n", `Porcentaje (%)`, "%"))

ggplot(tabla_posicion, aes(x = "", y = Frecuencia, fill = Posicion_es)) +
  geom_col(width = 1, color = "white") +
  coord_polar(theta = "y") +
  geom_text(aes(label = etiqueta), position = position_stack(vjust = 0.5), color = "white", fontface = "bold", size = 3.5) +
  scale_fill_manual(values = paleta_fifa) +
  labs(title = "Participación porcentual por posición de juego", fill = "Posición") +
  theme_void() +
  theme(
    plot.title = element_text(face = "bold", color = fifa_green, hjust = 0.5, size = 14),
    legend.position = "bottom"
  )

La posición con mayor número de convocados es Mediocampista, con 392 jugadores (37.7%), seguida de las demás posiciones en el orden mostrado en la tabla. Esto es consistente con la lógica táctica del fútbol moderno, en la que los equipos suelen convocar un mayor número de mediocampistas y defensas que de porteros.

Variable cualitativa 2: Selección nacional (Country)

Dado que existen numerosas selecciones participantes, se presenta la tabla de frecuencias para las 10 selecciones con mayor número de jugadores convocados en la base de datos.

tabla_pais <- datos %>%
  count(Country, name = "Frecuencia") %>%
  mutate(`Porcentaje (%)` = round(Frecuencia / sum(Frecuencia) * 100, 1)) %>%
  arrange(desc(Frecuencia)) %>%
  slice_head(n = 10)

kable(tabla_pais, caption = "Top 10 selecciones con mayor número de jugadores convocados") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE) %>%
  row_spec(0, background = "#C8102E", color = "white", bold = TRUE)
Top 10 selecciones con mayor número de jugadores convocados
Country Frecuencia Porcentaje (%)
Iraq 25 2.4
Mexico 25 2.4
Norway 25 2.4
Argentina 24 2.3
England 24 2.3
Japan 24 2.3
Paraguay 24 2.3
United States 24 2.3
Australia 23 2.2
Belgium 23 2.2
ggplot(tabla_pais, aes(x = reorder(Country, Frecuencia), y = Frecuencia)) +
  geom_col(fill = fifa_blue, width = 0.65) +
  geom_text(aes(label = Frecuencia), hjust = -0.3, fontface = "bold", color = "grey20") +
  coord_flip() +
  labs(
    title = "Top 10 selecciones con más jugadores convocados",
    x = "Selección", y = "Número de jugadores"
  ) +
  ylim(0, max(tabla_pais$Frecuencia) + 3) +
  tema_fifa

Se observa que la mayoría de las selecciones convocan entre 23 y 25 jugadores, una edad joven y comun dentro del torneo.

Análisis de variables cuantitativas

Variable cuantitativa 1: Edad (Age)

moda <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}

resumen_edad <- datos %>%
  summarise(
    n = n(),
    Media = round(mean(Age), 2),
    Mediana = median(Age),
    Moda = moda(Age),
    `Desv. estándar` = round(sd(Age), 2),
    Varianza = round(var(Age), 2),
    Mínimo = min(Age),
    `Q1 (25%)` = quantile(Age, 0.25),
    `Q3 (75%)` = quantile(Age, 0.75),
    Máximo = max(Age),
    Rango = max(Age) - min(Age)
  )

kable(resumen_edad, caption = "Estadísticos descriptivos - Edad de los jugadores") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE) %>%
  row_spec(0, background = "#00573F", color = "white", bold = TRUE)
Estadísticos descriptivos - Edad de los jugadores
n Media Mediana Moda Desv. estándar Varianza Mínimo Q1 (25%) Q3 (75%) Máximo Rango
1039 27.46 27 27 4.2 17.62 17 24 30 41 24
ggplot(datos, aes(x = Age)) +
  geom_histogram(binwidth = 2, fill = fifa_lime, color = "white", boundary = 0) +
  geom_vline(xintercept = mean(datos$Age), color = fifa_red, linetype = "dashed", linewidth = 1) +
  labs(
    title = "Distribución de la edad de los jugadores convocados",
    subtitle = paste0("Línea roja = edad promedio (", round(mean(datos$Age), 1), " años)"),
    x = "Edad (años)", y = "Frecuencia"
  ) +
  tema_fifa

ggplot(datos, aes(x = "", y = Age)) +
  geom_boxplot(fill = fifa_purple, width = 0.35, alpha = 0.8, outlier.color = fifa_red) +
  labs(title = "Diagrama de caja - Edad de los jugadores", x = "", y = "Edad (años)") +
  tema_fifa +
  coord_flip()

Variable cuantitativa 2: Goles anotados (Goles)

resumen_goles <- datos %>%
  summarise(
    n = n(),
    Media = round(mean(Goles), 2),
    Mediana = median(Goles),
    Moda = moda(Goles),
    `Desv. estándar` = round(sd(Goles), 2),
    Varianza = round(var(Goles), 2),
    Mínimo = min(Goles),
    `Q1 (25%)` = quantile(Goles, 0.25),
    `Q3 (75%)` = quantile(Goles, 0.75),
    Máximo = max(Goles),
    Rango = max(Goles) - min(Goles)
  )

kable(resumen_goles, caption = "Estadísticos descriptivos - Goles anotados") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE) %>%
  row_spec(0, background = "#C8102E", color = "white", bold = TRUE)
Estadísticos descriptivos - Goles anotados
n Media Mediana Moda Desv. estándar Varianza Mínimo Q1 (25%) Q3 (75%) Máximo Rango
1039 0.28 0 0 0.83 0.7 0 0 0 10 10
ggplot(datos, aes(x = Goles)) +
  geom_histogram(binwidth = 1, fill = fifa_orange, color = "white") +
  labs(
    title = "Distribución del número de goles anotados",
    subtitle = "Fase de clasificación previa al Mundial 2026",
    x = "Goles", y = "Número de jugadores"
  ) +
  tema_fifa

ggplot(datos, aes(x = "", y = Goles)) +
  geom_boxplot(fill = fifa_blue, width = 0.35, alpha = 0.8, outlier.color = fifa_red) +
  labs(title = "Diagrama de caja - Goles anotados", x = "", y = "Goles") +
  tema_fifa +
  coord_flip()

Relación entre posición y edad

ggplot(datos, aes(x = Posicion_es, y = Age, fill = Posicion_es)) +
  geom_boxplot(alpha = 0.85, outlier.color = fifa_red) +
  scale_fill_manual(values = paleta_fifa) +
  labs(
    title = "Distribución de la edad según la posición de juego",
    x = "Posición", y = "Edad (años)"
  ) +
  tema_fifa +
  theme(legend.position = "none")

Se aprecia que los porteros tienden a presentar una edad mediana superior a la de las demás posicione.

Top 5 jugadores destacados

Como cierre del análisis, se presentan los 5 jugadores con mayor número de goles anotados dentro de la base de datos.

top5 <- datos %>%
  select(Player, Country, Posicion_es, Goles, Asistencias) %>%
  arrange(desc(Goles)) %>%
  slice_head(n = 5) %>%
  mutate(Puesto = row_number()) %>%
  select(Puesto, Player, Country, Posicion_es, Goles, Asistencias)

kable(top5, caption = "Top 5 jugadores con más goles", col.names = c("#", "Jugador", "Selección", "Posición", "Goles", "Asistencias")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE) %>%
  row_spec(0, background = "#FF6B00", color = "white", bold = TRUE) %>%
  row_spec(1, background = "#fdf2e9", bold = TRUE)
Top 5 jugadores con más goles
# Jugador Selección Posición Goles Asistencias
1 Kylian Mbappé France Delantero 10 4
2 Lionel Messi Argentina Delantero 8 4
3 Jude Bellingham England Mediocampista 7 1
4 Erling Haaland Norway Delantero 7 0
5 Ousmane Dembélé France Mediocampista 6 2
ggplot(top5, aes(x = reorder(Player, Goles), y = Goles)) +
  geom_col(fill = fifa_red, width = 0.6) +
  geom_text(aes(label = Goles), hjust = -0.4, fontface = "bold", color = "grey20") +
  coord_flip() +
  ylim(0, max(top5$Goles) + 2) +
  labs(
    title = "Top 5 goleadores de la base de datos",
    x = "", y = "Goles"
  ) +
  tema_fifa

Mejor jugador destacado

Kylian Mbappé — Considerado uno de los mejores jugadores de la actualidad y el máximo goleador del mundial FIFA 2026

Conclusiones

  • La variable posición tiene como moda a Mediocampista, con 392 jugadores, por encima de las otras tres categorías.
  • En edad, la media (27.5 años), la mediana (27 años) y la moda (27 años) son muy cercanas entre sí, lo que indica una distribución simétrica.
  • La desviación estándar de la edad es de 4.2 años, un valor bajo frente al promedio, lo que muestra poca dispersión entre los jugadores convocados.
  • En goles, la media es 0.28 mientras que la mediana y la moda son 0. La diferencia entre estos valores refleja una asimetría positiva marcada.
  • La desviación estándar de los goles (0.83) es mayor que su propia media, lo que confirma la alta dispersión y concentración de datos en valores bajos, con pocos valores extremos.
  • En conjunto, la edad se comporta como una variable simétrica y homogénea, mientras que los goles muestran un comportamiento asimétrico y disperso, propio de una variable de conteo.

Referencias

  • Base de datos: wc2026_depurado.csv — Actividad 112, jugadores convocados a la Copa Mundial FIFA 2026.
  • FIFA. Identidad gráfica oficial de la Copa Mundial FIFA 2026.