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…
De cara a la última jornada de la Liga ENDESA en la que el Covirán Granada se juega la permanencia contra el Joventut de Badalona, vamos a plantear dos modelos logit para analizar qué factores influyen y, cómo lo hacen, en la probabilidad de victoria de cada equipo.
Las variables independientes consideradas se han obtenido al analizar la información disponible en este archivo .zip, la cual se resume en este otro documento .pdf.
Para calcular la probabilidad de victoria se va a usar la función ODDs (una explicación de esta función está disponible en este enlace, mientras que para ver el código pinchar aquí). Para poder usarla hay que especificar el siguiente comando:
source("funciones.txt")
- Finalmente, usaremos los datos correspondientes a las 33 jornadas disputadas hasta el momento en la Liga ACB.
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)
<- read_excel("datos.xlsx", sheet = "granada")
granada attach(granada)
= head(granada)
vistazo1 library(knitr)
kable(vistazo1, align = "c", caption = "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:
= glm(Resultado~Triples9+Parte1+PorcPQ_R60+Local, family=binomial("logit"))
logit_grx 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%:
= c(1, 1, 40, 1, 1)
partido1 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%:
= c(1, 1, 35, 1, 1)
partido2 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%:
= c(1, 0, 35, 0, 1)
partido3 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:
<- read_excel("datos.xlsx", sheet = "joventut")
joventut attach(joventut)
= head(joventut)
vistazo2 kable(vistazo2, align = "c", caption = "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.
= glm(Resultado~T3C_R+GanaQ+Tomic+Visitante, family=binomial("logit"))
logit_joventut 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:
= c(1, 0, 1, 10, 1)
partido4 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:
= c(1, 1, 1, 15, 1)
partido5 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%:
= c(1, 1, 0, 20, 1)
partido6 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\):
= 1.4629 - 0.8925 * 1 + 3.8644 * 1 - 0.0793 * 15 - 1.9551 * 1
z 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.