Estados de forma

Una propuesta para cuantificarlos
readxl
kable
attach
knitr
dplyr
filter
Author

Román Salmerón Gómez

Published

February 13, 2024

Hace un tiempo intenté publicar un trabajo que planteaba una transformación MinMax para medir tendencias a lo largo de una temporada. El caso es que aunque me divertí bastante escribiéndolo (ya que comparaba las estadísticas de las carreras de Larry Bird, Earvin Johnson, Michael Jordan y Kobe Bryant), no tuve suerte y no se ha publicado.

El artículo lo tenéis disponible en: https://arxiv.org/ftp/arxiv/papers/2402/2402.07004.pdf. Al final digo cuál de los cuatro tiene un mejor/peor rendimiento. Sólo digo que hay sorpresas (o no).

¿En qué consiste la transformación MinMax? Muy sencillo, dado un conjunto de datos \(x\) su transformación MinMax se obtiene mediante la siguiente expresión: \[y = \frac{x - min_{x}}{max_{x} - min_x} \cdot 100,\] donde \(max_{X}\) y \(min_{X}\) son, respectivamente, el máximo y minimo valor de \(x\). Se verifica que \(y \in [0, 100]\), por lo que se puede interpretar en términos de porcentaje.

Veamos un ejemplo sencillo:

x = c(5:7,10:12,4:1)
x
 [1]  5  6  7 10 11 12  4  3  2  1
MinMax(x)
 [1]  36.363636  45.454545  54.545455  81.818182  90.909091 100.000000
 [7]  27.272727  18.181818   9.090909   0.000000

Se observa que al máximo valor se le asigna el valor 100 y al mínimo el valor 0: en este caso se observa una tendencia creciente al principio, que pasa a decrecer a partir del sexto valor pasando a tener los peores valores del conjunto de datos.

Con una representación gráfica todo es más sencillo:

plot(MinMax(x), type="b")

Vamos a aplicar esta idea a los equipos que disputan en ná y menos la Copa del Rey de 2024 en Málaga. para ello usaremos los datos correspondientes a las 22 jornadas disputadas hasta el momento en la Liga ACB.

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

library(readxl)
datos <- read_excel("EquiposACB.xlsx", sheet = "datos")
vistazo = head(datos)
library(knitr)
kable(vistazo, align = "c", caption = "Visualización de los datos que tenemos: unas pocas observaciones")
Visualización de los datos que tenemos: unas pocas observaciones
Fecha Jornada Liga Fase Local Resultado Nombre Min Seg Ptos T2C T2I T2P T3C T3I T3P TCC TCI TCP T1C T1I T1P RT RD RO Asis BR BP Contras TF TC Mates FP FPR MasMenos Val PtosQ Mas10 Q1 Q2 Q3 Q4 Nombre_R Min_R Seg_R Ptos_R T2C_R T2I_R T2P_R T3C_R T3I_R T3P_R TCC_R TCI_R TCP_R T1C_R T1I_R T1P_R RT_R RD_R RO_R Asis_R BR_R BP_R Contras_R TF_R TC_R Mates_R FP_R FPR_R MasMenos_R Val_R PtosQ_R Mas10_R Q1_R Q2_R Q3_R Q4_R AtaquesPARTIDO PosesionesPARTIDO TiempoAtaques TiempoPosesiones NombreBIS Diferencia PorcRT PorcRD PorcRO Ataques Posesiones PosesionesXAtaque OER DER OERpotencial Eficacia PorcBPPosesiones PorcAsisPosesiones BRxBP AsisxBP TCIAsis PorcPQ PorcT3IxTCI PorcT1 PorcT3 T1IxFP TCIxT1I BPnoF PorcBPnoF TS eFG Diferencia_R PorcRT_R PorcRD_R PorcRO_R Ataques_R Posesiones_R PosesionesXAtaque_R OER_R DER_R OERpotencial_R Eficacia_R PorcBPPosesiones_R PorcAsisPosesiones_R BRxBP_R AsisxBP_R TCIAsis_R PorcPQ_R PorcT3IxTCI_R PorcT1_R PorcT3_R T1IxFP_R TCIxT1I_R BPnoF_R PorcBPnoF_R TS_R eFG_R DifQ1 DifQ2 DifQ3 DifQ4
20230923 1 ACB LR 1 0 Valencia 200 0 85 22 32 68.75 8 29 27.59 30 61 49.18 17 20 85.00 27 20 7 16 14 17 13 3 3 3 21 20 -20 90 39 4 21 20 17 27 Girona 200 0 89 20 35 57.14 11 26 42.31 31 61 50.82 16 19 84.21 32 22 10 21 11 18 4 3 2 2 20 21 20 104 47 4 27 15 17 30 155.6 172.6 15.42416 13.90498 Valencia -4 45.76271 66.66667 24.13793 79.0 86.0 1.088608 0.9883721 1.0277136 1.2318841 49.70760 19.76744 18.60465 0.8235294 0.9411765 3.812500 45.88235 47.54098 20.00000 28.23529 1.0000000 3.050000 6 35.29412 60.88825 55.73770 4 54.23729 75.86207 33.33333 76.6 86.6 1.130548 1.0277136 0.9883721 1.2390671 53.29341 20.78522 24.24942 0.6111111 1.1666667 2.904762 52.80899 42.62295 17.97753 37.07865 0.9047619 3.210526 4 22.22222 64.15802 59.83607 -6 5 0 -3
20230923 1 ACB LR 0 1 Girona 200 0 89 20 35 57.14 11 26 42.31 31 61 50.82 16 19 84.21 32 22 10 21 11 18 4 3 2 2 20 21 20 104 47 4 27 15 17 30 Valencia 200 0 85 22 32 68.75 8 29 27.59 30 61 49.18 17 20 85.00 27 20 7 16 14 17 13 3 3 3 21 20 -20 90 39 4 21 20 17 27 155.6 172.6 15.42416 13.90498 Girona 4 54.23729 75.86207 33.33333 76.6 86.6 1.130548 1.0277136 0.9883721 1.2973761 53.29341 20.78522 24.24942 0.6111111 1.1666667 2.904762 52.80899 42.62295 17.97753 37.07865 0.9047619 3.210526 4 22.22222 64.15802 59.83607 -4 45.76271 66.66667 24.13793 79.0 86.0 1.088608 0.9883721 1.0277136 1.2898551 49.70760 19.76744 18.60465 0.8235294 0.9411765 3.812500 45.88235 47.54098 20.00000 28.23529 1.0000000 3.050000 6 35.29412 60.88825 55.73770 6 -5 0 3
20230923 1 ACB LR 1 0 Granada 250 0 101 16 40 40.00 14 38 36.84 30 78 38.46 27 30 90.00 41 24 17 21 9 16 7 3 5 2 26 27 -15 104 74 5 25 15 17 19 Murcia 250 0 104 31 53 58.49 8 26 30.77 39 79 49.37 18 22 81.82 43 29 14 14 10 13 12 5 3 1 28 25 15 113 69 4 24 15 18 19 175.8 206.8 17.06485 14.50677 Granada -3 48.80952 63.15789 36.95652 89.0 106.0 1.191011 0.9528302 1.0317460 1.1222222 45.08929 15.09434 19.81132 0.5625000 1.3125000 3.714286 73.26733 48.71795 26.73267 41.58416 1.1111111 2.600000 6 37.50000 55.37281 47.43590 3 51.19048 63.04348 36.84211 86.8 100.8 1.161290 1.0317460 0.9528302 1.1503417 50.48544 12.89683 13.88889 0.7692308 1.0769231 5.642857 66.34615 32.91139 17.30769 23.07692 0.8800000 3.590909 4 30.76923 58.63780 54.43038 1 0 -1 0
20230923 1 ACB LR 0 1 Murcia 250 0 104 31 53 58.49 8 26 30.77 39 79 49.37 18 22 81.82 43 29 14 14 10 13 12 5 3 1 28 25 15 113 69 4 24 15 18 19 Granada 250 0 101 16 40 40.00 14 38 36.84 30 78 38.46 27 30 90.00 41 24 17 21 9 16 7 3 5 2 26 27 -15 104 74 5 25 15 17 19 175.8 206.8 17.06485 14.50677 Murcia 3 51.19048 63.04348 36.84211 86.8 100.8 1.161290 1.0317460 0.9528302 1.1845103 50.48544 12.89683 13.88889 0.7692308 1.0769231 5.642857 66.34615 32.91139 17.30769 23.07692 0.8800000 3.590909 4 30.76923 58.63780 54.43038 -3 48.80952 63.15789 36.95652 89.0 106.0 1.191011 0.9528302 1.0317460 1.1555556 45.08929 15.09434 19.81132 0.5625000 1.3125000 3.714286 73.26733 48.71795 26.73267 41.58416 1.1111111 2.600000 6 37.50000 55.37281 47.43590 -1 0 1 0
20230923 1 ACB LR 1 1 Obradoiro 200 0 84 21 40 52.50 10 22 45.45 31 62 50.00 12 17 70.59 31 26 5 18 11 6 12 1 3 2 18 20 100 102 53 4 28 19 27 10 Palencia 200 0 64 14 31 45.16 8 26 30.77 22 57 38.60 12 18 66.67 36 25 11 14 2 17 2 3 1 1 20 18 -100 58 26 2 20 11 18 15 140.0 156.0 17.14286 15.38462 Obradoiro 20 46.26866 70.27027 16.66667 69.8 74.8 1.071633 1.1229947 0.7881773 1.2209302 51.53374 8.02139 24.06417 1.8333333 3.0000000 3.444444 63.09524 35.48387 14.28571 35.71429 0.8500000 3.647059 4 66.66667 60.44905 58.06452 -20 53.73134 83.33333 29.72973 70.2 81.2 1.156695 0.7881773 1.1229947 1.3084112 40.50633 20.93596 17.24138 0.1176471 0.8235294 4.071429 40.62500 45.61404 18.75000 37.50000 1.0000000 3.166667 6 35.29412 49.29144 45.61404 8 8 9 -5
20230923 1 ACB LR 0 0 Palencia 200 0 64 14 31 45.16 8 26 30.77 22 57 38.60 12 18 66.67 36 25 11 14 2 17 2 3 1 1 20 18 -100 58 26 2 20 11 18 15 Obradoiro 200 0 84 21 40 52.50 10 22 45.45 31 62 50.00 12 17 70.59 31 26 5 18 11 6 12 1 3 2 18 20 100 102 53 4 28 19 27 10 140.0 156.0 17.14286 15.38462 Palencia -20 53.73134 83.33333 29.72973 70.2 81.2 1.156695 0.7881773 1.1229947 0.9968847 40.50633 20.93596 17.24138 0.1176471 0.8235294 4.071429 40.62500 45.61404 18.75000 37.50000 1.0000000 3.166667 6 35.29412 49.29144 45.61404 20 46.26866 70.27027 16.66667 69.8 74.8 1.071633 1.1229947 0.7881773 0.9302326 51.53374 8.02139 24.06417 1.8333333 3.0000000 3.444444 63.09524 35.48387 14.28571 35.71429 0.8500000 3.647059 4 66.66667 60.44905 58.06452 -8 -8 -9 5

Como véis hay mucha información y de todos los equipos de la liga. Pero como he dicho, me voy a centrar sólo en los que disputan la Copa:

library(dplyr)
RMadrid = filter(datos, Nombre=="RMadrid")
Murcia = filter(datos, Nombre=="Murcia")
GranCanaria = filter(datos, Nombre=="GranCanaria")
Valencia = filter(datos, Nombre=="Valencia")
FCBarcelona = filter(datos, Nombre=="FCBarcelona")
Manresa = filter(datos, Nombre=="Manresa")
Unicaja = filter(datos, Nombre=="Unicaja")
Tenerife = filter(datos, Nombre=="Tenerife")

Por ejemplo, usemos CompararEQUIPOS (disponible en funciones.txt) para comparar los puntos anotados por posesión (OER) de cada uno de los enfrentamientos que se producirán en los cuartos de final. Empezamos por el enfrentamiento entre el R. Madrid y UCAM Murcia:

variable = "Puntos anotados por posesión"
CompararEQUIPOS(RMadrid$OER, Murcia$OER, graf=1, salida=1,
                eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del R. Madrid"), eje_y2=paste(variable, "del Murcia"), 
                leyenda=c("R. Madrid", "Murcia"), columnas=2, tamano=0.75)

   R. Madrid     Murcia
1   89.67095  64.595153
2   70.41809  48.192614
3   38.57350  65.639460
4   67.64126   7.262409
5   89.19492  71.661928
6   62.11430  70.092004
7   76.88160   5.438569
8   60.96523  48.092466
9   45.61737  47.379995
10  68.62546  65.428009
11  40.83797 100.000000
12  61.18044  19.635596
13  90.89549   0.000000
14  74.70336  79.864183
15 100.00000  17.806483
16  39.31790  57.266019
17  93.99048  21.912724
18   0.00000  27.512182
19  93.04536  49.458897
20  40.55156  37.593079
21  86.12913  98.007383
22  45.44931  96.436379

En primer lugar se tiene la representación gráfica de los datos transformados para cada uno de los equipos, en segundo lugar la representación gráfica conjunta de los dos conjuntos de datos transformados y, por último, los valores transformados para cada equipo.

Se oberva que en las últimas jornadas UCAM Murcia venía presentando sus peores valores en cuanto a puntos anotados por posesión, si bien en la última jornada disputada contra el Covirán Granada ha tenido uno de sus mejores valores.

En cuanto al R. Madrid se observa la irregularidad que ha mostrado el equipo blanco en las últimas jornadas y que le hace llegar con ciertas dudas a la cita copera.

Sobre el resto de enfrentamientos (adviértase que en este caso no salen las representaciones gráficas individuales ni los valores transformados de cada equipo), destaca que Unicaja no llega en su mejor momento anotador al mismo tiempo que se vislumbra la mejora de Tenerife:

CompararEQUIPOS(GranCanaria$OER, Valencia$OER, graf=0, salida=0,
                eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del Gran Canaria"), eje_y2=paste(variable, "del Valencia"), 
                leyenda=c("Gran Canaria", "Valencia"), columnas=2, tamano=0.75)

CompararEQUIPOS(FCBarcelona$OER, Manresa$OER, graf=0, salida=0, 
                eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del F.C. Barcelona"), eje_y2=paste(variable, "del Manresa"), 
                leyenda=c("F.C. Barcelona", "Manresa"), columnas=2, tamano=0.75)

CompararEQUIPOS(Unicaja$OER, Tenerife$OER, graf=0, salida=0, 
                eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del Unicaja"), eje_y2=paste(variable, "del Tenerife"), 
                leyenda=c("Unicaja", "Tenerife"), columnas=2, tamano=0.75)

Pero claro, no todo va a ser atacar, también hay que defender (y más para ganar títulos):

variable = "Puntos recibidos por posesión"
CompararEQUIPOS(RMadrid$DER, Murcia$DER, graf=0, salida=0, 
                eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del R. Madrid"), eje_y2=paste(variable, "del Murcia"), 
                leyenda=c("R. Madrid", "Murcia"), columnas=2, tamano=0.75)

CompararEQUIPOS(GranCanaria$DER, Valencia$DER, graf=0, salida=0, 
                eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del Gran Canaria"), eje_y2=paste(variable, "del Valencia"), 
                leyenda=c("Gran Canaria", "Valencia"), columnas=2, tamano=0.75)

CompararEQUIPOS(FCBarcelona$DER, Manresa$DER, graf=0, salida=0, 
                eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del F.C. Barcelona"), eje_y2=paste(variable, "del Manresa"), 
                leyenda=c("F.C. Barcelona", "Manresa"), columnas=2, tamano=0.75)

CompararEQUIPOS(Unicaja$DER, Tenerife$DER, graf=0, salida=0, 
                eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del Unicaja"), eje_y2=paste(variable, "del Tenerife"), 
                leyenda=c("Unicaja", "Tenerife"), columnas=2, tamano=0.75)

En este caso se observa que Gran Canaria parece llegar mejor que Valencia.

Vamos a centrarnos en el primer enfrentamiento entre el R. Madrid y Murcia. Si nos fijamos en el porcentaje de rebote total capturado, se observa que el R. Madrid ha flojeado en las últimas jornadas (¿factor Tavares?):

variable = "Porcentaje de rebote total capturado"
CompararEQUIPOS(RMadrid$PorcRT, Murcia$PorcRT, graf=0, salida=0, 
                eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del R. Madrid"), eje_y2=paste(variable, "del Murcia"), 
                leyenda=c("R. Madrid", "Murcia"), columnas=2, tamano=0.75)

Y si trabajamos con el porcentaje de tiros de campo, se tiene una tendencia creciente muy clara en UCAM Murcia:

variable = "Porcentaje de tiros de campo"
CompararEQUIPOS(RMadrid$TCP, Murcia$TCP, graf=0, salida=0, 
                eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del R. Madrid"), eje_y2=paste(variable, "del Murcia"), 
                leyenda=c("R. Madrid", "Murcia"), columnas=2, tamano=0.75)

¿Qué tipo de partido deberíamos esperar? En el siguiente gráfico se observa que ambos equipos tienen una tendencia decreciente en las posesiones disputadas, seguramente se deba a que (como se ha visto anteriormente) ambos equipos no pasan por su mejor momento en la captura del rebote:

variable = "Posesiones"
CompararEQUIPOS(RMadrid$Posesiones, Murcia$Posesiones, graf=0, salida=0, 
                eje_y=paste(variable, "comparados"), eje_y1=paste(variable, "del R. Madrid"), eje_y2=paste(variable, "del Murcia"), 
                leyenda=c("R. Madrid", "Murcia"), columnas=2, tamano=0.75)

Resumiendo:

Por cierto, también os dejo algunos informes de los equipos y jugadores que participan en la Copa del Rey de este año por si queréis leerlos.