Media, Mediana y Moda
Las medidas de centralización responden a la pregunta: ¿en torno a qué valor se agrupan los datos? Son el punto de partida de cualquier análisis descriptivo.
Media aritmética
La media es la suma de todos los valores dividida entre el número de elementos. Es la más conocida pero también la más sensible a los valores extremos.
function media(arr) {
const suma = arr.reduce((acc, val) => acc + val, 0);
return suma / arr.length;
}
const salarios = [1800, 1900, 2100, 2000, 1950, 15000]; // el 15000 distorsiona
console.log(media(salarios).toFixed(2)); // 4125.00 — no representa al grupo
Cuando hay valores atípicos (outliers), la media deja de ser representativa. Ahí entra la mediana.
Mediana
La mediana es el valor central cuando los datos están ordenados. Si hay un número par de elementos, es la media de los dos centrales.
function mediana(arr) {
const ordenado = [...arr].sort((a, b) => a - b);
const n = ordenado.length;
const mid = Math.floor(n / 2);
return n % 2 !== 0
? ordenado[mid]
: (ordenado[mid - 1] + ordenado[mid]) / 2;
}
console.log(mediana(salarios)); // 1975 — mucho más representativo
La mediana divide el dataset en dos mitades iguales: el 50% de los valores está por debajo y el 50% por encima.
Moda
La moda es el valor que más veces aparece. Puede haber una sola moda, varias (distribución multimodal) o ninguna si todos los valores son distintos.
function moda(arr) {
const conteo = {};
for (const val of arr) {
conteo[val] = (conteo[val] ?? 0) + 1;
}
const maxFrecuencia = Math.max(...Object.values(conteo));
// Devolver todos los valores con la frecuencia máxima
return Object.entries(conteo)
.filter(([, freq]) => freq === maxFrecuencia)
.map(([val]) => Number(val));
}
const notas = [7, 8, 6, 9, 7, 8, 8, 10, 6, 7];
console.log(moda(notas)); // [7, 8] — bimodal
Comparación: cuándo usar cada una
| Medida | Úsala cuando… | Evítala cuando… |
|---|---|---|
| Media | Los datos son simétricos y sin outliers | Hay valores extremos que distorsionan |
| Mediana | Hay outliers o distribución asimétrica | El dataset es muy pequeño (< 5 elementos) |
| Moda | Quieres saber el valor más frecuente (ej. tallas) | Los datos son continuos con pocos repetidos |
const precios = [120, 125, 118, 130, 122, 119, 500]; // 500 es un outlier
console.log('Media:', media(precios).toFixed(2)); // 190.57 — distorsionada
console.log('Mediana:', mediana(precios)); // 122 — representativa
console.log('Moda:', moda(precios)); // [] — todos distintos
Las tres juntas
function resumenCentral(arr) {
return {
media: media(arr),
mediana: mediana(arr),
moda: moda(arr),
n: arr.length,
};
}
const alturas = [162, 175, 180, 158, 171, 168, 183, 177, 165, 172, 175, 169];
console.table(resumenCentral(alturas));
// media: 171.25
// mediana: 171.5
// moda: [175]
// n: 12
Cuando media ≈ mediana, los datos son aproximadamente simétricos. Si difieren mucho, hay asimetría o outliers.
En la siguiente lección aprendemos a visualizar estos datos con JavaScript: histogramas, gráficos de barras y cómo interpretar lo que vemos.