¿Victoria o derrota? ¿Dónde y cómo encasillar un partido?

Cómo usar un logit para preparar un partido
readxl
kable
attach
knitr
logit
glm
family
binomial
coefficients
summary
exp
Author

Román Salmerón Gómez

Published

May 21, 2023

Una de las herramientas estadísticas que creo bastante útiles para preparar un partido es el planteamiento de un modelo de regresión lineal múltiple en el que la variable dependiente binaria es igual a 1 si el resultado del partido es una victoria y 0 si es derrota.

Para ilustrarlo…

source("funciones.txt")

Nuestro objetivo: ante un partido concreto, clasificarlo como una victoria o derrota.

Modelo logit para el Covirán Granada

En primer lugar, cargamos los datos y vemos lo que tenemos:

library(readxl)
granada <- read_excel("datos.xlsx", sheet = "granada")
attach(granada)
vistazo1 = head(granada)
library(knitr)
kable(vistazo1, align = "c", caption = "Visualización de los datos que tenemos para Granada: unas pocas observaciones")
Visualización de los datos que tenemos para Granada: unas pocas observaciones
Resultado Local Triples9 Parte1 PorcPQ_R60
1 0 1 35 1
0 1 1 44 1
1 0 0 47 1
1 1 1 53 1
0 0 0 34 1
1 1 1 46 1

Las variables con las que vamos a trabajar son:

  • Resultado: variable binaria igual a 1 si el partido se gana y a 0 si se pierde (variable dependiente).
  • Local: variable binaria igual a 1 si se juega como local y a 0 en caso contrario.
  • Triples9: variable binaria igual a 1 si se anotan 9 o más triples y a 0 en caso contrario.
  • Parte1: número de puntos anotados en la primera parte.
  • PorcPQ_R60: variable binaria igual a 1 si el quinteto rival anota más del 60% de los puntos y a 0 en caso contrario.

Para especificar el modelo logit hay que especificar el siguiente código:

logit_grx = glm(Resultado~Triples9+Parte1+PorcPQ_R60+Local, family=binomial("logit"))
summary(logit_grx)

Call:
glm(formula = Resultado ~ Triples9 + Parte1 + PorcPQ_R60 + Local, 
    family = binomial("logit"))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.2715  -0.5445  -0.1937   0.2263   1.6264  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)  
(Intercept) -11.7919     4.8209  -2.446   0.0144 *
Triples9      1.4422     1.2126   1.189   0.2343  
Parte1        0.2302     0.1179   1.953   0.0509 .
PorcPQ_R60    1.9922     1.2267   1.624   0.1044  
Local         0.7313     1.1651   0.628   0.5302  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 40.485  on 32  degrees of freedom
Residual deviance: 21.011  on 28  degrees of freedom
AIC: 31.011

Number of Fisher Scoring iterations: 6

Se tiene que el único coeficiente significativamente distinto de cero (al 10% de significación) es el correspondiente a los puntos anotados en la primera parte.

En cualquier caso, para analizar el efecto de cada variable sobre la probabilidad de ganar, se calculan los odd-ratio asociados a cada variable:

exp(logit_grx$coefficients[-1])
  Triples9     Parte1 PorcPQ_R60      Local 
  4.229890   1.258802   7.331986   2.077768 

Se observa que:

  • Cuando se anotan 9 o más triples es 4.229890 veces más probable que se gane a que se pierta que cuando no se anotan suponiendo que el resto de variables permanecen constantes.
  • Cuando se anota un punto más en la primera parte es 1.258802 veces más probable que se gane a que se pierta que cuando no se anota suponiendo que el resto de variables permanecen constantes.
  • Cuando el quinteto rival anota más del 60% de los puntos es 7.331986 veces más probable que se gane a que se pierta que cuando no se hace suponiendo que el resto de variables permanecen constantes.
  • Cuando se juega como local es 2.077768 veces más probable que se gane a que se pierta que cuando no se juega como visitante suponiendo que el resto de variables permanecen constantes.

Antes de sacarle partido al modelo planteado, analicemos la bondad del mismo:

TASA_ACIERTOS(mean(Resultado), fitted.values(logit_grx), Resultado)[[5]]
[1] 87.87879

Se observa que clasifica correctamente el 87.87879% de los partidos. Cifra que consideraremos como buena.

Ahora sí, ¿cuál sería la utilidad de estos resultados?

Supongamos un partido en el que se anotan 10 triples, se anotan 40 puntos en la primera parte, el qinteto del equipo rival anota el 63% de los puntos del equipo y se juega como local. En este caso, la probabilidad de ganar el partido es del 82.924%:

partido1 = c(1, 1, 40, 1, 1)
ODDs(logit_grx$coefficients, partido1)[[2]]
[1] 0.8292437

Si ahora se considera que se anotan 35 puntos en la primera parte en lugar de 40 (y el resto no cambian), se observa que la probabilidad de ganar disminuye un 22.3496%:

partido2 = c(1, 1, 35, 1, 1)
ODDs(logit_grx$coefficients, partido2)[[2]]
[1] 0.6057477

Por otro lado, si no se anotan más de 9 triples, se anotan 35 puntos en la primera parte, el quinteto del equipo rival no supera el 60% de los puntos anotados y se juega como local, la probabilidad de victoria baja al 4.72%:

partido3 = c(1, 0, 35, 0, 1)
ODDs(logit_grx$coefficients, partido3)[[2]]
[1] 0.04720276

Se puede observar que plantear distintos escenarios de partido conducen a probabilidades de victoria distintas, lo cual permite cuantificar la probabilidad de ganar el partido en cada uno de los casos.

detach(granada)

Modelo logit para el Joventut de Badalona

En primer lugar, al igual que antes, cargamos los datos y vemos lo que tenemos:

joventut <- read_excel("datos.xlsx", sheet = "joventut")
attach(joventut)
vistazo2 = head(joventut)
kable(vistazo2, align = "c", caption = "Visualización de los datos que tenemos para Joventut: unas pocas observaciones")
Visualización de los datos que tenemos para Joventut: unas pocas observaciones
Resultado T3C_R GanaQ Visitante Tomic
0 0 0 0 14
1 1 0 1 15
1 0 0 0 13
0 0 0 1 14
1 0 0 0 15
0 1 0 0 22

En este caso, las variables con las que vamos a trabajar son:

  • Resultado: variable binaria igual a 1 si el partido se gana y a 0 si se pierde (variable dependiente).
  • T3C_R: variable binaria igual a 1 si el equipo rival anota 10 o más triples y a 0 en caso contrario.
  • GanaQ: variable binaria igual a 1 si se ganan y/o empatan el primer y tercer cuarto y a 0 en caso contrario.
  • Visitante: variable binaria igual a 1 si se juega como visitante y a 0 en caso contrario.
  • Tomic: número de puntos anotados por Ante Tomic.
logit_joventut = glm(Resultado~T3C_R+GanaQ+Tomic+Visitante, family=binomial("logit"))
summary(logit_joventut)

Call:
glm(formula = Resultado ~ T3C_R + GanaQ + Tomic + Visitante, 
    family = binomial("logit"))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.6149  -0.4462   0.1461   0.4799   2.3011  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)  
(Intercept)   1.4629     1.3960   1.048   0.2947  
T3C_R        -0.8925     1.2229  -0.730   0.4655  
GanaQ         3.8644     1.5642   2.471   0.0135 *
Tomic        -0.0793     0.1087  -0.730   0.4656  
Visitante    -1.9551     1.2525  -1.561   0.1185  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 44.987  on 32  degrees of freedom
Residual deviance: 25.334  on 28  degrees of freedom
AIC: 35.334

Number of Fisher Scoring iterations: 6

Se tiene que el único coeficiente significativamente distinto de cero (al 5% de significación) es el correspondiente a ganar o empatar el primer y tercer cuarto. Además, adviértase que en el análisis previo para seleccionar las variables independientes se observaba que:

  • Ante Tomic tiene mayor protagonismo cuando su equipo pierde, luego el signo negativo obtenido es esperable.
tapply(Tomic, Resultado, mean)
       0        1 
15.50000 11.47368 

En cualquier caso, para analizar el efecto de cada variable sobre la probabilidad de ganar, se calculan los odd-ratio asociados a cada variable:

exp(logit_joventut$coefficients[-1])
     T3C_R      GanaQ      Tomic  Visitante 
 0.4096218 47.6744903  0.9237658  0.1415539 
1/exp(logit_joventut$coefficients[-1])
     T3C_R      GanaQ      Tomic  Visitante 
2.44127646 0.02097558 1.08252546 7.06444718 

Se observa, por ejemplo, que:

  • Cuando se anota un triple más por el rival es 2.44127646 veces menos probable que se gane a que se pierta que cuando no se anota suponiendo que el resto de variables permanecen constantes.
  • Cuando ganan o empatan el primer y tercer cuarto es 47.6744903 veces más probable que se gane a que se pierta que cuando no se hace suponiendo que el resto de variables permanecen constantes.
  • Cuando se juega como visitante es 7.06444718 veces menos probable que se gane a que se pierta que cuando no juega como local suponiendo que el resto de variables permanecen constantes.

Antes de sacarle partido al modelo planteado realizando predicciones, analicemos la bondad del mismo. Se observa que clasifica correctamente el 75.75758% de los partidos:

TASA_ACIERTOS(mean(Resultado), fitted.values(logit_joventut), Resultado)[[5]]
[1] 75.75758

¿Cómo sacarle partido al modelo?

Consideremos un partido en el que el equipo rival no anota más de 10 triples (la media del Granada cuando pierde es de 6.87), gana o empata el primer y tercer cuarto, Tomic anota 10 puntos y juega como visitante:

partido4 = c(1, 0, 1, 10, 1)
ODDs(logit_joventut$coefficients, partido4)[[2]]
[1] 0.9295169

Si el equipo rival anota 10 triples (la media del Granada cuando gana es de 9.7), gana o empata el primer y tercer cuarto, Tomic anota 15 puntos y juega como visitante:

partido5 = c(1, 1, 1, 15, 1)
ODDs(logit_joventut$coefficients, partido5)[[2]]
[1] 0.7841958

Se observa una disminución del 13.41963% en la probabilidad de victoria.

Consideremos finalmente un partido en el que el equipo rival anota 10 o más triples, pierde el primer y tercer cuarto, Tomic anota 20 puntos y juega como visitante. En tal caso, la probabilidad de ganar el partido es del 4.877221%:

partido6 = c(1, 1, 0, 20, 1)
ODDs(logit_joventut$coefficients, partido6)[[2]]
[1] 0.04877221
detach(joventut)

¿Jugamos?

Si el lector no tiene los suficientes conocimientos sobre el modelo logit pero desea jugar un rato con los resultados mostrados, veamos a continuación cómo se ha obtenido (por ejemplo) la penúltima probabilidad.

En la estimación del modelo logit se obtiene que: \[\widehat{\textbf{z}} = 1.4629 - 0.8925 \cdot \textbf{T3C\_R} + 3.8644 \cdot \textbf{GanaQ} - 0.0793 \cdot \textbf{Tomic} - 1.9551 \cdot \textbf{Visitante}.\]

Si el equipo rival anota 10 triples, gana o empata el primer y tercer cuarto, Tomic anota 15 puntos y jueva como visitante, se tiene que: \(\textbf{T3C\_R} = 1 = \textbf{GanaQ}\), \(\textbf{Tomic} = 15\) y \(\textbf{Visitante} = 1\).

De forma que \(\widehat{\textbf{z}} = 1.4629 - 0.8925 \cdot 1 + 3.8644 \cdot 1 - 0.0793 \cdot 15 - 1.9551 \cdot 1 = 1.2902\):

z = 1.4629 - 0.8925 * 1 + 3.8644 * 1 - 0.0793 * 15 - 1.9551 * 1
z
[1] 1.2902

Puesto que la probabilidad de victoria se calcula a partir de la expresión \(\frac{e^{\widehat{\textbf{z}}}}{1 + e^{\widehat{\textbf{z}}}}\), en este caso, la probabilidad de ganar es igual a:

exp(z)/(1+exp(z))
[1] 0.784181

Que no coincida a partir del quinto decimal se debe a que para calcular \(\widehat{\textbf{z}}\) he usado 4 decimales y seguramente R de forma interna use más decimales.

Calculando \(e^{\widehat{\textbf{z}}}\), se obtiene el odd:

exp(z)
[1] 3.633513

El cual se interpretaría como sigue: es 3.633513 veces más probable la victoria que la derrota en un partido en el que el equipo rival al Joventut anota 10 triples, el Joventut gana o empata el primer y tercer cuarto, Tomic anota 15 puntos y el Joventut juega como visitante.