
Emplear la cantidad adecuada de bins a la hora de crear un histograma es un factor clave para visualizar estos de forma correcta. Cuando se usan demasiados bins, los histogramas resultantes muestran básicamente ruido, mientras el caso contrario, menos de los necesarios, puede ocultar los patrones que se desean observar en la gráfica. Problema que se ha explicado en detalle en una entrada anterior. En esta ocasión se van a explicar una serie de reglas que se pueden utilizar para seleccionar el número de bins en un histograma, alternativas a los de las reglas de Sturges y de Freedman–Diaconis.
La regla de la raíz cuadrada
Posiblemente una de las reglas para seleccionar el número de bins en un histograma más fáciles de implementar es la de la raíz cuadrada. La cual se basa en la idea intuitiva de distribuir los datos en una cantidad de bins proporcional al número de observaciones. Usando para ello la raíz cuadrada como una forma simple de obtener un valor aproximado de bins k_{sqrt} = \sqrt{n}, donde n es el número de observaciones en el conjunto de datos
La regla de Rice
Otra regla que únicamente usa el tamaño de los datos para estimar el número de bins es la regla de Rice. Esta regla usa dos veces la raíz cúbica del número de observaciones k_{rice} = \sqrt[3]{n}. Este método generalmente sobreestima el bins necesarios, por lo que puede ser una buena opción cuando no se desea terminar con un cantidad insuficiente de bins.
La regla de Scott
A diferencia de las reglas anteriores, la regla de Scott también tiene en cuenta la variabilidad de los datos para estimar el número de bins. Usando para ello un enfoque diferente. En lugar de calcular el número de bins, calcular el ancho óptimo como 3,49 veces la desviación estándar partido de la raíz cúbica del número de registros en los datos h_{scott} = \frac{3.49 \sigma(x)}{\sqrt[3]{n}}. Una vez obtenido el ancho es fácil calcular el número de bins necesarios.
Los resultados son similares a los obtenidos mediante la regla de Freedman-Diaconis. Aunque, es más sensible a la presencia de valores atípicos ya que la desviación estándar no es tan robusta cuando en el conjunto de datos existen registros de este tipo.
La regla de Doane
Finalmente, la regla de Doane es una modificación de la regla de Sturges en la que se intenta mejorar el rendimiento para datos que no son normales. Usando para ello el sesgo (skewness) de los datos. La fórmula usada por la regla de Doane es k_{doane} = 1 + \log2\left | n \right | + \log2\left | 1 + \frac{s}{\sigma_s} \right |, donde s es el sesgo y \sigma_s se define como \sigma_s = \sqrt{\frac{6 (n - 2)}{(n+1)(n+3)}}.
Implementación de las reglas en Python
Las reglas anteriores se pueden implementar fácilmente en Python, tal como se hace en el siguiente ejemplo.
import math import numpy as np from scipy.stats import skew def square_root_bins(datos): """ Calcula el número de bins para un histograma utilizando la regla de la raíz cuadrada. Parámetros: ----------- datos : list, array-like Los datos de los cuales se desea calcular el número de bins. Retorna: -------- numero_bins : int El número de bins calculado según la regla de la raíz cuadrada. """ n = len(datos) numero_bins = math.ceil(math.sqrt(n)) return numero_bins def rice_bins(datos): """ Calcula el número de bins para un histograma utilizando la regla de Rice. La regla de Rice elige un número de bins usando la raíz cubica del número de observaciones. Parámetros: ----------- datos : array-like Los datos de los cuales se desea calcular el número de bins. Retorna: -------- numero_bins : int El número de bins calculado según la regla de Rice. """ n = len(datos) numero_bins = int(np.ceil(np.power(n, 1/3) * 2)) return numero_bins def scott_bins(datos): """ Calcula el número de bins para un histograma utilizando la regla de Scott. La regla de Scott estima el ancho óptimo de los bins basándose en el error estándar de la muestra y el tamaño total de la muestra. Parámetros: ----------- datos : array-like Los datos de los cuales se desea calcular el número de bins. Retorna: -------- numero_bins : int El número de bins calculado según la regla de Scott. """ datos = np.asarray(datos) n = len(datos) std = np.std(datos) if std == 0: return 1 ancho_optimo = 3.49 * std / np.power(n, 1/3) numero_bins = int(np.ceil((np.max(datos) - np.min(datos)) / ancho_optimo)) return numero_bins def doane_bins(datos): """ Calcula el número de bins para un histograma utilizando la regla de Doane. La regla de Doane ajusta el número de bins para tener en cuenta el sesgo (skewness) de la distribución de los datos. Parámetros: ----------- datos : array-like Los datos de los cuales se desea calcular el número de bins. Retorna: -------- numero_bins : int El número de bins calculado según la regla de Doane. """ datos = np.asarray(datos) n = len(datos) skewness = skew(datos) se_skewness = np.sqrt((6 * (n - 2)) / ((n + 1) * (n + 3))) numero_bins = 1 + math.log2(n) + math.log2(1 + (abs(skewness) / se_skewness)) return int(numero_bins)
Conclusiones
Hoy se han visto cuatro reglas alternativas que se pueden usar para seleccionar el número de bins en un histograma que complementan a la de Sturges y de Freedman–Diaconis.
Deja una respuesta