Ir al contenido
σestadistica.ar

Caso con datos reales

Medir la dispersión cuando la media está en cero

Los retornos de 170 acciones del S&P 500, donde el coeficiente de variación se dispara hasta 124,87, y qué pasa si en vez de dividir por la media se divide por el rango.

La pregunta

¿Qué sector de la bolsa tiene los retornos más variables?

Parece una pregunta de una línea, y lo primero que uno haría es calcular el coeficiente de variación de cada acción y promediar por sector. Este caso muestra que ahí se rompe todo, por qué se rompe, y qué alternativas hay —incluida una que no funciona tan bien como parece.

Es el caso más avanzado del sitio y el único que no usa datos argentinos. Sirve para un fin concreto: mostrar qué se hace cuando la medida del manual no aplica.

Cuando el coeficiente de variación no sirve · video, 3:44

Los datos

Precios diarios de cierre ajustado de los componentes del S&P 500 entre 2010 y 2024 (conjunto andrewmvd/sp-500-stocks de Kaggle, CC0-1.0). De los 502 símbolos, 170 tienen al menos 1.000 días válidos y sector GICS asignado, lo que deja 617.169 retornos diarios repartidos en 11 sectores, con una mediana de 3.767 observaciones por acción.

Que todas las series tengan aproximadamente el mismo largo no es un detalle: es la condición que hace comparables a varias de las medidas, y la sección sobre el rango explica por qué.

Lo primero: el coeficiente de variación se rompe

El retorno diario de una acción es una variable centrada cerca de cero. Su media ronda el 0,05 % y su desvío el 1,5 %. El coeficiente de variación divide lo segundo por lo primero, y eso es dividir por algo que está cerca de cero.

El resultado sobre las 170 acciones:

MínimoMáximo
Coeficiente de variación14,79124,87
IDRN0,0610,175

Once acciones (el 6,5 %) superan un coeficiente de variación de 50. Y hay cuatro donde la mediana del retorno es indistinguible de cero, lo que deja indefinidos al IQR/mediana y al MAD/mediana: no es que den un valor raro, es que no se pueden calcular.

0 20 40 60 80 100 120 0,0 0,2 0,4 0,6 0,8 1,0 las 170 caen entre 0,061 y 0,175 IDRN — todo su recorrido posible es de 0 a 1 Coeficiente de variación
Las mismas 170 acciones, medidas de dos maneras. En horizontal el IDRN, dibujado sobre todo su recorrido posible; en vertical el coeficiente de variación, que no tiene techo. Los círculos huecos son las once acciones que pasan de 50.La franja sombreada marca dónde caen efectivamente los 170 valores del IDRN.Fuente: Precios diarios ajustados de los componentes del S&P 500, 2010-2024 (Kaggle, CC0-1.0). Elaboración propia.

No hay relación entre las dos medidas, y no debería haberla: están midiendo cosas distintas. Lo que el gráfico sí muestra es la asimetría de escalas. El eje horizontal abarca todo lo que el IDRN puede valer, y las 170 acciones caben en una franja del 11 % de ese ancho. El eje vertical está recortado en 124,87 porque ahí terminan los datos, no porque la medida termine ahí.

Vale aclarar que esto no es un defecto del coeficiente de variación: es su definición funcionando como corresponde fuera de su terreno. El coeficiente de variación mide dispersión relativa al nivel de la variable, y necesita que ese nivel signifique algo. Con retornos diarios no lo significa.

La idea: normalizar por el rango en vez de por la media

Si dividir por la media falla, hay que dividir por otra cosa. La que usa este caso es el rango.

La razón por la que se puede es una desigualdad elemental. Para cualquier conjunto de datos con rango RR, el desvío estándar no puede pasar de R/2R/2:

S≤R2S \le \frac{R}{2}

La demostración cabe en dos renglones. Sea mm el punto medio entre el mínimo y el máximo. Todo dato está a lo sumo a R/2R/2 de mm, así que la suma de cuadrados de las desviaciones respecto de mm no pasa de nR2/4nR^2/4; y como la media es el punto que minimiza esa suma, la de la media es todavía menor. Es un caso particular de la desigualdad de Popoviciu (1935).

Entonces el cociente

IDRN=2SR\text{IDRN} = \frac{2S}{R}

vive siempre entre 0 y 1, y se lee como qué fracción de la dispersión que el propio rango habilita está usando el conjunto de datos. Vale 1 solo en el caso extremo de que la mitad de los datos esté en un borde y la otra mitad en el otro.

Dos propiedades salen directo de la fórmula. Primero, no depende de la media, así que no se rompe cuando la media es cero: ese es el punto. Segundo —y esto es tan importante como lo primero— es invariante ante cambios de escala y de posición, o sea que es ciego al nivel de la variable. No responde la pregunta del coeficiente de variación. Es un indicador de forma, emparentado con la curtosis: sobre estas 170 acciones la correlación de Spearman entre los dos es de −0,936.

El problema que arrastra: el rango no converge

Acá aparece el costo de haber cambiado de denominador, y es serio.

El numerador converge: el desvío estándar de 100 datos y el de 10.000 estiman lo mismo. El denominador no converge nunca. Cada dato nuevo solo puede dejar el máximo donde está o empujarlo más arriba. La entrada sobre el rango trae la tabla: en una misma población normal el rango medio pasa de 2,3 desvíos con 5 datos a 7,7 con 10.000.

Así que el índice encoge a medida que se juntan datos, y dos grupos medidos con distinta cantidad de observaciones no son comparables.

La corrección clásica existe hace un siglo y es la de los gráficos de control: dividir por la constante d2(n)d_2(n), que es el rango esperado de una muestra normal de tamaño nn. El script de este caso la verifica por simulación antes de usar nada:

nnRango medio simuladod2d_2 tabulado
21,1281,128
52,3262,326
103,0803,078
253,9303,931

En este caso el problema queda neutralizado por diseño, porque todas las series tienen alrededor de 3.600 observaciones. Es la condición que hace legítima la comparación que sigue, y conviene no perderla de vista al llevar esto a otros datos.

La prueba exigente: partir la muestra al medio

Con ocho medidas en la mesa —IDRN, Moors, Crow–Siddiqui, Hogg, curtosis, coeficiente de variación, IQR/mediana y MAD/mediana— hace falta un criterio para elegir. El valor p no alcanza, porque con 170 acciones casi cualquier cosa da significativa.

El criterio que usa el caso es de reproducibilidad, y es el aporte metodológico que conviene llevarse:

Se reparten al azar las acciones de cada sector en dos mitades. Con cada mitad por separado se ordenan los once sectores. Si las dos mitades ordenan parecido, la medida capta señal; si no, capta ruido. Se repite mil veces y se mira la distribución de la correlación de Spearman entre los dos ordenamientos.

Es una idea vieja de la psicometría —la confiabilidad por mitades— aplicada a elegir un estadístico descriptivo. Y es mucho más dura que un valor p, porque pregunta si el resultado sobrevive a cambiar las unidades de análisis.

−0,50 −0,25 0,00 0,25 0,50 0,75 1,00 IDRN 0,0 % Moors 0,1 % Crow-Siddiqui 0,6 % Curtosis 8,3 % CV 27,0 % MAD/mediana 36,1 % IQR/mediana 35,4 % Hogg 42,2 % Correlación de Spearman entre el orden de las dos mitades particiones negativas
Mediana e intervalo del 5 al 95 % de la correlación entre las dos mitades, sobre mil particiones. A la derecha, el porcentaje de particiones en que la correlación dio negativa, es decir, en que las dos mitades ordenaron los sectores al revés.La línea de puntos marca el cero. Mil particiones, semilla 2026.Fuente: Precios diarios ajustados de los componentes del S&P 500, 2010-2024 (Kaggle, CC0-1.0). Elaboración propia.
MedidaMediana5 – 95 %% negativa
IDRN0,6550,436 – 0,8360,0
Moors0,5270,191 – 0,7820,1
Crow–Siddiqui0,3730,127 – 0,6820,6
Curtosis0,300−0,055 – 0,6098,3
Coeficiente de variación0,145−0,227 – 0,57327,0
MAD/mediana0,077−0,200 – 0,50036,1
IQR/mediana0,073−0,191 – 0,50035,4
Hogg0,036−0,236 – 0,36442,2

La medida de Hogg se equivoca de dirección en el 42 % de las particiones, que es apenas mejor que tirar una moneda. Y no es una medida mala: en el estudio de simulación del que sale este caso, Hogg es la mejor de las ocho en estabilidad muestral y poder discriminante. Lo que funciona mejor en la simulación no es lo que funciona mejor acá, y ese desacuerdo es, por sí solo, un motivo para no elegir un estadístico solo porque una simulación lo respalda.

Detectar no es lo mismo que reproducir

La pregunta original —¿hay diferencias entre sectores?— se contesta con Kruskal-Wallis, y el tamaño del efecto ε2=H/(n−1)\varepsilon^2 = H/(n-1):

Medidaε2\varepsilon^2pp
Crow–Siddiqui0,2440,0000099
IDRN0,1750,0010
Moors0,1590,0028
IQR/mediana0,1480,0053
MAD/mediana0,1470,0056
Curtosis0,1330,0130
Hogg0,1060,057
Coeficiente de variación0,1040,061

Los dos criterios no coinciden, y las dos tablas hay que leerlas juntas. Crow–Siddiqui detecta la diferencia más grande entre sectores pero la ordena de manera bastante menos reproducible. El IDRN detecta menos y ordena mejor. No hay un ganador: hay dos preguntas distintas.

Quien necesite un orden estable de grupos debería mirar la primera tabla; quien necesite máxima sensibilidad a que exista alguna diferencia, la segunda.

El ordenamiento que resulta, en la escala acotada del índice, va de Energy (0,090), Real Estate (0,092), Consumer Defensive y Utilities (0,096) en los valores más bajos, a Basic Materials (0,120) y Communication Services (0,125) en los más altos.

Marzo de 2020 le fija el denominador a media muestra

Este es el hallazgo del caso, y es una advertencia, no un resultado a favor de nada.

Para cada acción se buscó en qué mes cayó su retorno más extremo, el que fija el rango. Sobre los 180 meses del período aparecen 62 meses distintos. Y uno concentra:

Como el rango lo determinan los extremos, un único evento de mercado le fijó el denominador a casi la mitad de las series al mismo tiempo. Cuando eso pasa, el índice deja de ser una comparación entre series y pasa a ser, en buena medida, un reescalado del desvío estándar por una constante común.

La consecuencia práctica es fea y hay que decirla: ninguna de las ocho medidas reproduce el ordenamiento sectorial entre períodos. Comparando 2010-2017 con 2018-2024, la correlación a nivel de sector da −0,418 para el IDRN, −0,255 para el coeficiente de variación, y la mejor de las ocho llega a +0,155. Con once sectores el error estándar de estas correlaciones ronda 0,3, así que ninguna se distingue del cero: el punto no es que se inviertan, es que no hay señal.

Qué se lleva de acá

Cuatro cosas, y ninguna depende de que el índice prospere:

  1. El coeficiente de variación necesita que la media signifique algo. Con variables centradas —retornos, diferencias entre dos mediciones, puntajes estandarizados— no la significa, y la medida se dispara o queda indefinida.
  2. Normalizar por el rango resuelve eso y compra otro problema: el rango no converge, así que el resultado depende de cuántos datos se junten. Solo es comparable entre grupos medidos con cantidades parecidas de observaciones.
  3. La confiabilidad por mitades es un criterio para elegir un estadístico, y es más exigente que un valor p. Pregunta si el resultado sobrevive a cambiar las unidades, no si es distinto de cero.
  4. La significación y la reproducibilidad pueden ordenar distinto. Acá lo hacen: la medida que detecta más no es la que ordena mejor.

Reproducirlo

El CSV que se baja de esta página trae las 170 acciones con las ocho medidas ya calculadas y el mes de su retorno más extremo.

# R — las dos medidas centrales sobre una serie de retornos
idrn <- function(x) 2 * sqrt(mean((x - mean(x))^2)) / (max(x) - min(x))
cv   <- function(x) sqrt(mean((x - mean(x))^2)) / mean(x)

d <- read.csv2("dispersion-sp500.csv")
range(d$IDRN)   # 0,061  0,175
range(d$CV)     # 14,79  124,87

# La confiabilidad por mitades, para una medida
mitades <- function(d, m, B = 1000) {
  replicate(B, {
    d$mitad <- ave(seq_len(nrow(d)), d$Sector,
                   FUN = function(i) sample(rep_len(1:2, length(i))))
    a <- tapply(d[[m]][d$mitad == 1], d$Sector[d$mitad == 1], mean)
    b <- tapply(d[[m]][d$mitad == 2], d$Sector[d$mitad == 2], mean)
    cor(a, b, method = "spearman", use = "complete.obs")
  })
}
median(mitades(d, "IDRN"))   # 0,655
median(mitades(d, "CV"))     # 0,145
# Python
import pandas as pd, numpy as np
d = pd.read_csv("dispersion-sp500.csv", sep=";", decimal=",")
d[["IDRN", "CV"]].agg(["min", "max"])
d["mes_extremo"].value_counts().head(3)   # 2020-03 en 83 series

El script completo es datos/finanzas/preparar-dispersion-sp500.py. Recalcula las ocho medidas desde los precios crudos —no toma ningún número del trabajo de investigación— y antes de escribir nada verifica tres cosas: que Moors, Crow–Siddiqui y Hogg reproduzcan sus valores de referencia publicados bajo normalidad (1,233 · 2,906 · 2,585), que el rango esperado de muestras normales reproduzca las constantes d2d_2, y que su IDRN y su coeficiente de variación coincidan acción por acción con los del script de R del trabajo original.