Las medidas de dispersión son cruciales porque nos dicen qué tan dispersos o concentrados están los datos alrededor de su centro (como la media). Conocer solo la tendencia central no es suficiente; dos conjuntos de datos pueden tener la misma media pero una variabilidad completamente distinta.
Rango
Es la medida más simple de dispersión. Se calcula como la diferencia entre el valor máximo y el valor mínimo del conjunto de datos.
Rango = Valor Máximo - Valor Mínimo
Varianza (σ²)
La varianza mide la dispersión promedio de los datos respecto a la media. Para cada punto, calcula la distancia a la media y la eleva al cuadrado (para evitar números negativos y magnificar las diferencias grandes). La varianza es el promedio de estas diferencias al cuadrado.
Desviación Estándar (σ)
Es la medida de dispersión más utilizada y es simplemente la raíz cuadrada de la varianza. Su gran ventaja es que vuelve a las unidades originales de los datos.
Coeficiente de Variación (CV)
Es una medida de dispersión relativa, que no tiene unidades. Se calcula dividiendo la desviación estándar por la media. Es especialmente útil para comparar la variabilidad de dos o más conjuntos de datos que tienen diferentes escalas o unidades.
CV = (Desviación Estándar / Media)
import numpy as np
datos = [12, 15, 20, 22, 29, 30, 45, 50]
rango = np.max(datos) - np.min(datos)
print("Rango:", rango)
import numpy as np
datos = [12, 15, 20, 22, 29, 30, 45, 50]
# Varianza poblacional (ddof=0) y muestral (ddof=1)
varianza_poblacional = np.var(datos, ddof=0)
varianza_muestral = np.var(datos, ddof=1)
print("Varianza poblacional:", f"{varianza_poblacional:.2f}")
print("Varianza muestral:", f"{varianza_muestral:.2f}")
import numpy as np
datos = [12, 15, 20, 22, 29, 30, 45, 50]
desvio_poblacional = np.std(datos, ddof=0)
desvio_muestral = np.std(datos, ddof=1)
print("Desviación estándar poblacional:", f"{desvio_poblacional:.2f}")
print("Desviación estándar muestral:", f"{desvio_muestral:.2f}")
import numpy as np
datos = [12, 15, 20, 22, 29, 30, 45, 50]
media = np.mean(datos)
desvio = np.std(datos, ddof=1)
coef_variacion = desvio / media
print("Coeficiente de variación:", f"{coef_variacion:.2f}")
👉 El CV es adimensional. Ejemplo de interpretación:
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
np.random.seed(42)
a = np.random.normal(50, 5, 500) # baja dispersión
b = np.random.normal(50, 15, 500) # alta dispersión
sns.kdeplot(a, label="σ = 5")
sns.kdeplot(b, label="σ = 15")
plt.axvline(np.mean(a), color="blue", linestyle="--", alpha=0.7)
plt.axvline(np.mean(b), color="orange", linestyle="--", alpha=0.7)
plt.title("Comparación de dispersión")
plt.legend()
plt.show()
Explicación de np.random.normal
:
Esta función de NumPy genera números aleatorios que siguen una distribución normal (o "curva de campana"). Los parámetros que usamos son:
loc
: La media (mean
) de la distribución. En nuestro caso es 50 para ambos grupos, por eso sus centros son iguales.scale
: La desviación estándar (standard deviation
). Controla la "anchura" de la curva. Para el grupo a es 5 (baja dispersión), por lo que los datos están más concentrados. Para el grupo b es 15 (alta dispersión), lo que genera datos mucho más extendidos.size
: El número de muestras a generar. En ambos casos, creamos un array con 500 números.👉 Ambos grupos tienen la misma media (~50), pero la curva naranja (σ=15) es mucho más ancha → mayor variabilidad.