load("ConjuntEquipsFutbol.RData")

INDEX:

  1. PREGUNTA D’ESTUDI
  2. DESCRIPCIÓ DEL CONJUNT DE DADES
  3. EXPLORACIÓ INICIAL DE DADES
  4. ANÀLISI DESCRIPTIVA
  5. TEST T-STUDENT
  6. REGRESIÓ LOGISTICA
  7. CONCLUSIONS

1. PREGUNTA D’ESTUDI

La nostra pregunta:

Creiem que el conjunt resumeix correctament els atributs més importants dels equips de les 5 grans lligues, i això ens serà essencial per respondre bé la pregunta. Les variables clau EntrenadorEstranger (booleana) i PercentatgeEstrangers (numèrica) estan disponibles i representen directament els factors que volem estudiar.

2. DESCRIPCIÓ DEL CONJUNT DE DADES

Font del conjunt: Creat per nosaltres a partir de pàgines web com TransferMarkt i OneFootball.

Nombre d’observacions: la mostra és de 96 equips i per cada equip hem observat principalment dues variables. El percentatge d’estrangers a la plantilla i si és o no estranger l’entrenador.

Característiques importants: l’estudi reflecteix informació sobre els 96 equips de les 5 grans lligues de futbol a la temporada 2024-25 (no l’any natural 2024).

Cal remarcar que hi ha dades que fluctuen durant el llarg de la temporada, com ara el valor de mercat dels jugadors, així que s’ha agafat el valor del final de la temporada.

2.1 VARIABLES

tibble(
  variable = names(ConjuntEquipsFutbol),
  tipus_r = sapply(ConjuntEquipsFutbol, class)
)
## # A tibble: 18 × 2
##    variable                       tipus_r  
##    <chr>                          <chr>    
##  1 IdEquip                        integer  
##  2 NomEquipCurt                   character
##  3 NomEquip                       character
##  4 Lliga                          character
##  5 Pais                           character
##  6 Ciutat                         character
##  7 NomEstadi                      character
##  8 CapacitatEstadi                integer  
##  9 NomEntrenador                  character
## 10 EntrenadorEstranger.           character
## 11 MitjanaEdatJugadors            numeric  
## 12 NacionalitatPrincipalPlantilla character
## 13 ValorMercatPlantillaEnMilions  integer  
## 14 AnyFundacio                    integer  
## 15 TrofeusNacionals               integer  
## 16 TrofeusInternacionals          integer  
## 17 PercentatgeExtranjers          integer  
## 18 JugadorMesValor                character

Descripció de les variables:

IdEquip (integer): identificador únic de cada equip [0, 95]

NomEquipCurt (character): nom que apareix al marcador en els partits de l’equip.

NomEquip (character): nom complet de l’equip.

Lliga (character): nom de quina de les 5 grans lligues europees juga l’equip.

País (character): nom del país d’on és originari l’equip.

Ciutat (character): nom del poble/ciutat on es troba l’estadi de l’equip.

NomEstadi (character): nom de l’estadi on juga l’equip com a local.

CapacitatEstadi (integer): aforament màxim de l’estadi de l’equip.

NomEntrenador (character): nom i cognoms de l’entrenador principal de l’equip.

EntrenadorEstranger? (character - bool ): indica si l’entrenador és estranger o, si pel contrari, és originari del país de l’equip que dirigeix.

MitjanaEdatJugadors(numeric): mitjana d’edat dels jugadors de la plantilla del primer equip.

NacionalitatPrincipalPlantilla (character): quina és la nacionalitat que predomina en la plantilla.

ValorMercatPlantillaEnMillons (integer): quin és el valor de mercat de la plantilla del primer equip.

AnyFundació (integer): indica en quin any va ser fundat el club.

TrofeusNacionals (integer): quantitat de trofeus nacionals que ha obtingut el club des de la seva fundació.

TrofeusInternacionals (integer): quantitat de trofeus internacionals que ha obtingut el club des de la seva fundació

PercentatgeExtranjers (integer): quin és el percentatge de jugadors no originaris del país de l’equip.

JugadorMesValor (character): nom del jugador amb més valor de mercat a la plantilla corresponent.

3. EXPLORACIÓ INICIAL DE DADES

# Nombre d'equips
nrow(ConjuntEquipsFutbol)
## [1] 96
# Nombre de variables per equip
ncol(ConjuntEquipsFutbol)
## [1] 18

Quina és la unitat d’anàlisi:

ggplot(ConjuntEquipsFutbol, aes(x = EntrenadorEstranger., fill = EntrenadorEstranger.)) +
  geom_bar() +
  labs(
    title = "Freqüència d'Entrenador Estranger",
    x = "Entrenador Estranger",
    y = "Nombre d'Equips",
    fill = "Estranger?"
  ) +
  geom_text(aes(label = after_stat(count)), stat = "count", vjust = -0.5) +
  theme_minimal() +
  theme(legend.position = "none", plot.title = element_text(hjust = 0.5, face = "bold"))

ggplot(ConjuntEquipsFutbol, aes(x = PercentatgeExtranjers)) +
  geom_histogram(binwidth = 5, fill = "skyblue", color = "white", alpha = 0.8) +
  labs(
    title = "Distribució del Percentatge de Jugadors Estrangers",
    x = "Percentatge Estrangers",
    y = "Freqüència"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"))

# Dades de la variable entrenadorEstranger:
freq_entrenadors = ConjuntEquipsFutbol %>%
  group_by(EntrenadorEstranger.) %>%
  summarise(n = n()) %>%
  mutate(Percentatge = n / sum(n) * 100)

# Dades de la variable PercentatgeExtranjers:
kable(freq_entrenadors, 
      col.names = c("Info Entrenador Estranger", "n", "%"),
      digits = 2)
Info Entrenador Estranger n %
No 52 54.17
44 45.83
ConjuntEquipsFutbol %>%
  summarise(
    mitjana_perc = mean(PercentatgeExtranjers),
    mediana_perc = median(PercentatgeExtranjers),
    desviacio_est = sd(PercentatgeExtranjers),
    Q1 = quantile(PercentatgeExtranjers, 0.25),
    Q3 = quantile(PercentatgeExtranjers, 0.75),
    min = min(PercentatgeExtranjers),
    max = max(PercentatgeExtranjers)
  ) %>%
  kable(caption = "Info Percentatge d'Estrangers", digits = 4)
Info Percentatge d’Estrangers
mitjana_perc mediana_perc desviacio_est Q1 Q3 min max
48.9688 48 13.7431 39 60 5 80

Observant les anteriors taules i gràfiques podem observar:

La gran majoria d’equips té entre un 30% i un 70% de jugadors estrangers a la plantilla, per la qual cosa a ull, podem percebre una mitjana aproximada de 50% de jugadors estrangers per plantilla en el nostre conjunt. Sent més exactes, observem els càlculs fets amb RStudio i obtenim un valor de 48’97%.

Observant l’anterior gràfic taronja-i-blau, es pot veure com aproximadament la meitat d’equips del nostre conjunt té entrenador estranger, i per tant la resta el tenen local. Per ser exactes, dels 96 equips, un 54,17% dels entrenadors són locals, i un 45,83% són estrangers.

3.1 Resum Conjunt de Dades

summary(ConjuntEquipsFutbol)
##     IdEquip      NomEquipCurt         NomEquip            Lliga          
##  Min.   : 0.00   Length:96          Length:96          Length:96         
##  1st Qu.:23.75   Class :character   Class :character   Class :character  
##  Median :47.50   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :47.50                                                           
##  3rd Qu.:71.25                                                           
##  Max.   :95.00                                                           
##      Pais              Ciutat           NomEstadi         CapacitatEstadi
##  Length:96          Length:96          Length:96          Min.   :11150  
##  Class :character   Class :character   Class :character   1st Qu.:25170  
##  Mode  :character   Mode  :character   Mode  :character   Median :33590  
##                                                           Mean   :38979  
##                                                           3rd Qu.:51701  
##                                                           Max.   :99354  
##  NomEntrenador      EntrenadorEstranger. MitjanaEdatJugadors
##  Length:96          Length:96            Min.   :24.10      
##  Class :character   Class :character     1st Qu.:26.00      
##  Mode  :character   Mode  :character     Median :26.70      
##                                          Mean   :26.66      
##                                          3rd Qu.:27.30      
##                                          Max.   :28.90      
##  NacionalitatPrincipalPlantilla ValorMercatPlantillaEnMilions  AnyFundacio  
##  Length:96                      Min.   :  70.0                Min.   :1848  
##  Class :character               1st Qu.: 140.0                1st Qu.:1899  
##  Mode  :character               Median : 250.0                Median :1905  
##                                 Mean   : 343.2                Mean   :1908  
##                                 3rd Qu.: 430.0                3rd Qu.:1919  
##                                 Max.   :1300.0                Max.   :2009  
##  TrofeusNacionals TrofeusInternacionals PercentatgeExtranjers
##  Min.   : 0.00    Min.   : 0.000        Min.   : 5.00        
##  1st Qu.: 0.00    1st Qu.: 0.000        1st Qu.:39.00        
##  Median : 6.00    Median : 0.000        Median :48.00        
##  Mean   :11.35    Mean   : 1.948        Mean   :48.97        
##  3rd Qu.:16.00    3rd Qu.: 1.000        3rd Qu.:60.00        
##  Max.   :96.00    Max.   :31.000        Max.   :80.00        
##  JugadorMesValor   
##  Length:96         
##  Class :character  
##  Mode  :character  
##                    
##                    
## 

4. ANÀLISI DESCRIPTIVA

ggplot(ConjuntEquipsFutbol, aes(x = EntrenadorEstranger., y = PercentatgeExtranjers, fill = EntrenadorEstranger.)) +
  geom_boxplot(alpha = 0.6, width = 0.5) +
  geom_jitter(width = 0.2, alpha = 0.8, color = "black", size = 2) +
  labs(
    title = "Relació entre l'Origen de l'Entrenador i el Percentatge Estrangers",
    x = "Entrenador Estranger?",
    y = "Percentatge de Jugadors Estrangers a la Plantilla (%)",
    fill = "Entrenador Estranger?"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"),
        legend.position = "none")

# Funció per calcular la probabilitat condicional P(Entrenador=Sí | Percentatge > llindar)
calcular_probabilitat_condicional = function(llindar) {
  subconjunt = ConjuntEquipsFutbol %>% filter(PercentatgeExtranjers > llindar)
  n_total_subconjunt = nrow(subconjunt)
  
  if (n_total_subconjunt == 0) {
    return(NA) # Retorna NA si no hi ha equips per sobre del llindar
  }
  
  n_estrangers_subconjunt = subconjunt %>%
    filter(EntrenadorEstranger. == "Sí") %>%
    nrow()
  
  probabilitat = n_estrangers_subconjunt / n_total_subconjunt
  
  return(probabilitat)
}

# Càlculs per als llindars 40%, 50% i 60%
llindars = c(40, 50, 60)
resultats_prob = tibble(
  Llindar = llindars,
  Probabilitat = sapply(llindars, calcular_probabilitat_condicional)
) %>%
  mutate(`P(Entr. Estranger | %Estrang. > Llindar)` = paste0(round(Probabilitat * 100, 2), "%")) %>%
  select(-Probabilitat)

kable(resultats_prob, 
      caption = "Probabilitat Condicional: P(Entrenador Estranger = Sí | % Estrangers > Llindar)")
Probabilitat Condicional: P(Entrenador Estranger = Sí | % Estrangers > Llindar)
Llindar P(Entr. Estranger | %Estrang. > Llindar)
40 60.32%
50 69.23%
60 84.21%
mitjana_lliga = aggregate(
  PercentatgeExtranjers ~ Lliga,
  data = ConjuntEquipsFutbol,
  FUN = mean
)

colnames(mitjana_lliga)[2] = "Mitjana  % Estrangers"
print(mitjana_lliga)
##            Lliga Mitjana  % Estrangers
## 1     Bundesliga              50.00000
## 2         LaLiga              39.35000
## 3        Ligue 1              46.11111
## 4 Premier League              61.05000
## 5        Serie A              48.15000

5. TEST T-STUDENT

ConjuntEquipsFutbol <- ConjuntEquipsFutbol %>%
  mutate(
    PercentatgeNumeric = as.numeric(gsub("%", "", PercentatgeExtranjers))
  )


resultat_t_test_percentatge <- t.test(
  PercentatgeNumeric ~ EntrenadorEstranger.,
  data = ConjuntEquipsFutbol,
  var.equal = FALSE 
)

print(resultat_t_test_percentatge)
## 
##  Welch Two Sample t-test
## 
## data:  PercentatgeNumeric by EntrenadorEstranger.
## t = -5.4107, df = 91.818, p-value = 4.967e-07
## alternative hypothesis: true difference in means between group No and group Sí is not equal to 0
## 95 percent confidence interval:
##  -18.261914  -8.454869
## sample estimates:
## mean in group No mean in group Sí 
##         42.84615         56.20455
resultat_student <- t.test(
  PercentatgeNumeric ~ EntrenadorEstranger.,
  data = ConjuntEquipsFutbol,
  var.equal = TRUE 
)

print(resultat_student)
## 
##  Two Sample t-test
## 
## data:  PercentatgeNumeric by EntrenadorEstranger.
## t = -5.4039, df = 94, p-value = 4.911e-07
## alternative hypothesis: true difference in means between group No and group Sí is not equal to 0
## 95 percent confidence interval:
##  -18.266558  -8.450225
## sample estimates:
## mean in group No mean in group Sí 
##         42.84615         56.20455
ic_inferior <- resultat_t_test_percentatge$conf.int[1]
ic_superior <- resultat_t_test_percentatge$conf.int[2]

print(paste("L'interval de confiança al 95% va de", round(ic_inferior, 2), "a", round(ic_superior, 2)))
## [1] "L'interval de confiança al 95% va de -18.26 a -8.45"
library(ggplot2)

# Paràmetres
t_obs <- -5.4107
df_valor <- 91.818
alfa <- 0.05

# Crear el gràfic
ggplot(data.frame(x = c(-6, 6)), aes(x = x)) +
  # Dibuixar la corba
  stat_function(fun = dt, args = list(df = df_valor), color = "black", linewidth = 1) +
  
  # Pintar les zones
  stat_function(fun = dt, args = list(df = df_valor), 
                xlim = c(-6, qt(alfa/2, df_valor)), geom = "area", fill = "red", alpha = 0.3) +
  stat_function(fun = dt, args = list(df = df_valor), 
                xlim = c(qt(1-alfa/2, df_valor), 6), geom = "area", fill = "red", alpha = 0.3) +
  
  geom_vline(xintercept = t_obs, color = "blue", linetype = "dashed", linewidth = 1) +
  
  annotate("text", x = t_obs, y = 0.2, label = paste("t obs =", t_obs), 
           color = "blue", angle = 90, vjust = -0.5, fontface = "bold") +
  labs(title = "Distribució t de Student i Regió de Rebuig",
       subtitle = "La línia blava mostra que les dades cauen totalment fora de la zona esperada (H0)",
       x = "Valors de t", y = "Densitat") +
  theme_minimal()

# Càlcul dels components per a cada grup
resum <- ConjuntEquipsFutbol %>%
  group_by(EntrenadorEstranger.) %>%
  summarise(
    n = n(),
    mitjana = mean(PercentatgeNumeric, na.rm = TRUE),
    variancia = var(PercentatgeNumeric, na.rm = TRUE),
    desviacio = sd(PercentatgeNumeric, na.rm = TRUE)
  )
print(resum)
## # A tibble: 2 × 5
##   EntrenadorEstranger.     n mitjana variancia desviacio
##   <chr>                <int>   <dbl>     <dbl>     <dbl>
## 1 No                      52    42.8      148.      12.2
## 2 Sí                      44    56.2      143.      12.0
# separem els grups
grup_no <- ConjuntEquipsFutbol$PercentatgeNumeric[ConjuntEquipsFutbol$EntrenadorEstranger. == "No"]
grup_si <- ConjuntEquipsFutbol$PercentatgeNumeric[ConjuntEquipsFutbol$EntrenadorEstranger. == "Sí"]

# Desviacions típiques
s1 <- sd(grup_no, na.rm = TRUE)
s2 <- sd(grup_si, na.rm = TRUE)

# Variàncies
var1 <- var(grup_no, na.rm = TRUE)
var2 <- var(grup_si, na.rm = TRUE)

cat("Grup No: s1 =", s1, " | s1^2 =", var1, "\n")
## Grup No: s1 = 12.15002  | s1^2 = 147.6229
cat("Grup Si: s2 =", s2, " | s2^2 =", var2, "\n")
## Grup Si: s2 = 11.97008  | s2^2 = 143.2828

6. REGRESIÓ LOGISTICA

entrenador = ConjuntEquipsFutbol$EntrenadorEstranger.;

entrenadorBool = as.numeric(factor(entrenador, levels = c("No", "Sí"))) -1;
entrenadorBool
##  [1] 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 0 0 1
## [39] 1 1 0 1 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 1 1 0 0 0 1 1 0 0 1 1 1 1 0 1
## [77] 1 0 1 1 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 0
percentatgePlantilla = ConjuntEquipsFutbol$PercentatgeExtranjers;


dades_model <- ConjuntEquipsFutbol %>%
  mutate(entrenador_binari = ifelse(EntrenadorEstranger. == "Sí", 1, 0))

# Ajustem el model de regressió logística
model_logistic <- glm(entrenador_binari ~ PercentatgeExtranjers, 
                      data = dades_model, 
                      family = binomial)

# Resum del model
summary(model_logistic)
## 
## Call:
## glm(formula = entrenador_binari ~ PercentatgeExtranjers, family = binomial, 
##     data = dades_model)
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)           -4.63216    1.05980  -4.371 1.24e-05 ***
## PercentatgeExtranjers  0.09048    0.02093   4.323 1.54e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 132.42  on 95  degrees of freedom
## Residual deviance: 106.86  on 94  degrees of freedom
## AIC: 110.86
## 
## Number of Fisher Scoring iterations: 4
exp(coef(model_logistic))
##           (Intercept) PercentatgeExtranjers 
##           0.009733667           1.094700604

7. CONCLUSIONS

Un cop hem fet una primera anàlisi del conjunt de dades hem arribat a les següents conclusions:

El fet que un entrenador sigui estranger està relacionat amb el percentatge d’estrangers de l’equip, ja que podem veure com el nombre de jugadors estrangers augmenta significativament.

Alguna de les limitacions que ens hem trobat és només tenir informació de 5 lligues, perquè si haguéssim fet la base de dades amb més mostres les observacions podrien ser més precises i extreure millors conclusions.

Tenint en compte aquesta limitació una de les possibles millores seria augmentar la quantitat de lligues les quals analitzem. Un atribut que podríem haver analitzat és la quantitat d’estrangers que ha tingut un club amb entrenadors anteriors per saber si el percentatge d’estrangers està més relacionat amb el club o amb l’entrenador en qüestió.

  1. Tant pel p-valor obtingut com el t estadístic observat, veiem que ambdós mostren valors molt inferiors als llindars de significació (normalment a=0.05); llavors podem rebutjar la hipòtesis nul·la (Ho).

  2. Els equips amb entrenador estranger tenen, de mitjana, un 13.35% més de jugadors estrangers (comparativa: 56.20% vs 42.85%). Els intervals de confiança d’aquesta diferència mostrats a la figura superior denoten una seguretat del 95% d’estar entre aquests valors (tenint en compte que hem agafat 96 equips de tot el món només).

Fent aquesta regressió podem saber que:

  1. Mirant el p-valor afirmem que hi ha una relació significativa entre aquestes dues variables ja que el p-valor és més petit que 0.05. Per tant, una influeix l’altre.

  2. El coeficient Estimate ens diu que a mesura que el percentatge d’estrangers aumenta, la probabilitat que l’entrenador sigui estranger puja ja que és positiu.

  3. Trobant els Odds també podem dir que per cada 1% que augmenti el percentatge d’estrangers de la plantilla, la probabilitat de que l’entrenador sigui estranger augmenta casi un 10%.