---
title: "Medidas de localización"
pagetitle: "Medidas de localización"
open-graph:
description: "Introduce media, mediana, moda y cuantiles como medidas de localización mediante un ejemplo de tiempos de entrega de una mensajería."
twitter-card:
description: "Introduce media, mediana, moda y cuantiles como medidas de localización mediante un ejemplo de tiempos de entrega de una mensajería."
description: "Introduce media, mediana, moda y cuantiles como medidas de localización mediante un ejemplo de tiempos de entrega de una mensajería."
author: "Diego Villalba"
date: today
lang: es
format:
html:
toc: true
toc-depth: 3
number-sections: true
code-fold: true
code-tools: true
code-summary: "Mostrar código"
fig-align: center
theme: cosmo
pdf:
toc: true
toc-depth: 3
number-sections: true
execute:
echo: true
warning: false
message: false
cache: false
jupyter: python3
bibliography: [referencias_eda.bib, ../../references.bib]
crossref:
fig-title: "Figura"
tbl-title: "Tabla"
eq-prefix: "Ec."
---
## El problema: ¿qué tiempo representa una entrega habitual?
Una pequeña mensajería registró el tiempo, en minutos, de nueve entregas
realizadas durante una tarde:
$$
18, 20, 20, 21, 22, 24, 25, 27, 75.
$$
La última motocicleta encontró una avenida cerrada. Los 75 minutos son una
observación real, no necesariamente un error, pero están muy alejados del resto;
la llamaremos **valor extremo**.[^valor-extremo]
Imagine que debemos completar una frase para un cliente:
> Una entrega de esta mensajería tarda alrededor de ______ minutos.
¿Debemos escribir 20, 22 o 28? Los tres números se pueden defender, pero
responden preguntas distintas:
| Pregunta | Idea de centro | Medida |
|---|---|---|
| ¿Cuánto tiempo se consumió por entrega en promedio? | Repartir el tiempo total por igual | Media |
| ¿Qué valor deja la mitad de las entregas a cada lado? | Localizar el caso central | Mediana |
| ¿Qué tiempo exacto se repitió más? | Buscar la mayor frecuencia | Moda |
| ¿Qué tiempo no supera cierto porcentaje de entregas? | Fijar una posición acumulada | Cuantil |
Una **medida de localización** es un estadístico[^estadistico] que sitúa una
distribución sobre la escala de la variable. “Localización” no significa que
exista un centro universal: primero se elige la pregunta y después la fórmula
[@tukey1977eda; @freedman2007statistics].
::: {.callout-note appearance="minimal"}
### Dos cambios que servirán como brújula
- Si sumamos 10 minutos a **todas** las entregas, cualquier centro razonable
debería aumentar 10 minutos.
- Si solo la demora de 75 aumenta, la media debería reaccionar; el caso que
ocupa la mitad del orden podría permanecer igual.
Estas dos ideas anticipan la diferencia entre usar magnitudes y usar posiciones.
:::
## Antes de resumir: conservar los datos visibles
Los datos ya están ordenados. Escribamos debajo sus posiciones:
| Posición $i$ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|:---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|
| Tiempo $x_{(i)}$ | 18 | 20 | 20 | 21 | 22 | 24 | 25 | 27 | 75 |
La notación $x_{(i)}$ indica el dato que ocupa la posición $i$ después de
ordenar; se llama **estadístico de orden**.[^orden]
::: {.callout-warning appearance="minimal"}
Una cifra resumen nunca sustituye la distribución. Antes de elegirla conviene
ver los datos, un histograma o un diagrama de caja. En este ejemplo, informar
solo “28 minutos” ocultaría que ocho de nueve entregas tardaron 27 minutos o
menos.
:::
## Tres respuestas para el mismo conjunto
### Media: repartir el total por igual
Sumemos los nueve tiempos:
$$
18+20+20+21+22+24+25+27+75=252.
$$
Si repartimos esos 252 minutos por igual entre las nueve entregas,
$$
\bar{x}=\frac{252}{9}=28\text{ minutos}. \tag{1}
$$
La media no afirma que alguna entrega haya durado 28 minutos. Afirma que, si
el tiempo total se redistribuyera equitativamente, corresponderían 28 minutos a
cada una. Por eso resulta útil para presupuestar tiempo total: nueve entregas a
28 minutos reproducen los 252 minutos observados.
Otra forma de verla es como punto de equilibrio. Las desviaciones respecto a
28 se cancelan:
$$
\sum_{i=1}^{9}(x_i-28)=\sum_{i=1}^{9}x_i-9(28)=252-252=0.
$$
Los 47 minutos que la entrega de 75 queda por arriba pesan tanto como todos
los déficits que quedan por debajo. Esa es una virtud cuando interesa conservar
el total y una limitación cuando interesa describir un caso habitual.
### Mediana: encontrar el caso central
Como hay nueve observaciones, la posición central es
$$
\frac{n+1}{2}=\frac{9+1}{2}=5.
$$
El quinto tiempo ordenado es 22:
$$
\widetilde{x}=x_{(5)}=22\text{ minutos}. \tag{2}
$$
Hay cuatro observaciones antes y cuatro después. La mediana no reparte minutos;
reparte **posiciones**. Para un número par de observaciones no existe una sola
posición central, por lo que se acostumbra promediar los dos valores centrales.
### Moda: encontrar lo más frecuente
Contemos las repeticiones:
| Tiempo | 18 | 20 | 21 | 22 | 24 | 25 | 27 | 75 |
|:---:|---:|---:|---:|---:|---:|---:|---:|---:|
| Frecuencia | 1 | **2** | 1 | 1 | 1 | 1 | 1 | 1 |
La frecuencia mayor es 2, de modo que
$$
\operatorname{Moda}(x)=20\text{ minutos}. \tag{3}
$$
La moda sí corresponde a un valor observado. Puede haber dos o más modas
—una distribución **multimodal**[^multimodal]— o ninguna repetición que haga
útil hablar de una moda muestral.
::: {.callout-important appearance="minimal"}
### Tres números correctos, tres afirmaciones distintas
- **28 minutos:** tiempo total por entrega si se reparte por igual.
- **22 minutos:** la mitad de las entregas tardó 22 minutos o menos y la otra
mitad 22 minutos o más.
- **20 minutos:** fue el tiempo exacto observado con mayor frecuencia.
Decir solo “el promedio” es ambiguo. Conviene nombrar la medida y traducirla a
una frase vinculada con la decisión.
:::
## ¿Qué cambia cuando se alarga la demora?
Suponga que la entrega tardía pasa de 75 a 120 minutos. La suma aumenta 45 y,
por tanto, la media aumenta
$$
\frac{45}{9}=5\text{ minutos}.
$$
La nueva media es 33, mientras la mediana sigue siendo 22 y la moda sigue
siendo 20. En general, si una observación cambia en una cantidad $\Delta$ y el
tamaño de la muestra no cambia,
$$
\bar{x}_{\mathrm{nueva}}-\bar{x}_{\mathrm{anterior}}
=\frac{\Delta}{n}. \tag{4}
$$
La media escucha la magnitud de cada dato, incluso la de uno extremo. La
mediana escucha principalmente su posición: mover el máximo todavía más a la
derecha no cambia cuál observación ocupa el centro. Esta menor sensibilidad se
denomina **robustez**.[^robustez]
### Un compromiso: la media recortada
Una media recortada elimina la misma cantidad de observaciones en cada cola y
promedia las restantes [@wilcox2012modern]. Si retiramos una observación de
cada extremo —$1/9\approx11.1\%$ de la muestra por cola— quedan
$$
20, 20, 21, 22, 24, 25, 27.
$$
Su media es
$$
\bar{x}_{\mathrm{rec}}
=\frac{20+20+21+22+24+25+27}{7}
=\frac{159}{7}
\approx22.71. \tag{5}
$$
Si 75 cambia a 120, el máximo se vuelve a retirar y el resultado permanece en
22.71. Sin embargo, el recorte no debe escogerse después de mirar qué respuesta
conviene: se declara por anticipado y siempre se aplica simétricamente.
::: {.callout-warning appearance="minimal"}
**Recortar no es borrar errores.** Si 75 proviene de una avenida cerrada,
pertenece al proceso real. La media recortada ofrece otra descripción del
centro, pero el evento extremo debe conservarse, investigarse y comunicarse.
:::
## Cuantiles: responder preguntas de servicio
La mediana es un caso particular de cuantil. El cuantil de nivel $p$ busca un
umbral que deje aproximadamente una proporción $p$ de los datos por debajo o
en él. Cuando $p$ se expresa como porcentaje hablamos de **percentil**: $Q(0.9)$
es el percentil 90 o $P_{90}$.
Para calcular a mano los cuartiles[^cuartiles] usaremos la convención de
“medianas de las mitades”: se excluye la mediana global y se toma la mediana
de cada mitad.
La mitad inferior es
$$
(18,20,20,21),
$$
por lo que
$$
Q_1=\frac{20+20}{2}=20.
$$
La mitad superior es
$$
(24,25,27,75),
$$
y entonces
$$
Q_3=\frac{25+27}{2}=26.
$$
Así, la mitad central de los tiempos se encuentra aproximadamente entre 20 y
26 minutos. En operación, un cuantil alto responde una pregunta distinta del
centro: “¿qué límite cubre, por ejemplo, 90% de las entregas?”. Ese límite es
útil para fijar acuerdos de servicio, pero requiere más datos que nueve
observaciones para estimar con estabilidad la cola.[^cola]
::: {.callout-note appearance="minimal"}
### Por qué dos programas pueden dar cuartiles distintos
Entre posiciones observadas se puede redondear, seleccionar un dato o
interpolar. Existen varias convenciones legítimas para cuantiles muestrales
[@hyndman1996quantiles]. En muestras pequeñas, documente siempre el método. En
este capítulo, “medianas de las mitades” es una decisión explícita, no la única
definición posible.
:::
## Cuando las observaciones representan cantidades distintas
Ahora la mensajería resume tres zonas a partir del tiempo medio de cada zona:
| Zona | Tiempo medio $x_i$ | Entregas $w_i$ | Minutos acumulados $w_ix_i$ |
|---|---:|---:|---:|
| Centro | 20 | 50 | 1,000 |
| Norte | 25 | 30 | 750 |
| Periferia | 40 | 20 | 800 |
| **Total** | | **100** | **2,550** |
Promediar los tres tiempos sin pesos daría
$$
\frac{20+25+40}{3}=28.33,
$$
como si cada zona aportara el mismo número de entregas. Para recuperar el
tiempo por **entrega** usamos el número de entregas como peso:[^peso]
$$
\bar{x}_w
=\frac{\sum_{i=1}^{K}w_ix_i}{\sum_{i=1}^{K}w_i}
=\frac{2550}{100}
=25.5\text{ minutos}. \tag{6}
$$
El peso debe corresponder a la unidad que se quiere describir. Si la pregunta
fuera “¿cómo se comporta una zona elegida al azar?”, dar igual peso a las zonas
podría ser apropiado; si es “¿cuánto tarda una entrega elegida al azar?”, se
necesitan los tamaños de zona.
## Por qué media y mediana aparecen como soluciones
Hasta aquí construimos las medidas desde preguntas concretas. Ahora podemos
formalizar una propiedad que explica por qué aparecen repetidamente en
estadística y aprendizaje automático.
### La media minimiza errores cuadrados
Sea $a$ un número usado para representar todas las observaciones. Su pérdida
cuadrática total[^perdida] es
$$
S_2(a)=\sum_{i=1}^{n}(x_i-a)^2.
$$
Al sumar y restar $\bar{x}$ dentro de cada término se obtiene
$$
S_2(a)
=\sum_{i=1}^{n}(x_i-\bar{x})^2+n(a-\bar{x})^2. \tag{7}
$$
El primer término no depende de $a$ y el segundo nunca es negativo. Por tanto,
$S_2(a)$ alcanza su único mínimo cuando $a=\bar{x}$. En las entregas,
$$
S_2(28)=2548 < S_2(22)=2872.
$$
Elevar al cuadrado penaliza con fuerza los errores grandes: la diferencia de
47 minutos asociada con la entrega tardía aporta $47^2=2209$ unidades a la
pérdida evaluada en 28.
### La mediana minimiza errores absolutos
Si el costo crece linealmente con la distancia, usamos
$$
S_1(a)=\sum_{i=1}^{n}|x_i-a|.
$$
Mover $a$ ligeramente a la derecha reduce la distancia a cada observación que
queda a la derecha y aumenta la distancia a cada observación de la izquierda.
En una mediana hay al menos la mitad de los datos a cada lado, por lo que ningún
movimiento puede reducir el saldo total. Así, cualquier mediana minimiza
$S_1(a)$.[^mediana-par]
En el ejemplo,
$$
S_1(22)=72 < S_1(28)=94.
$$
::: {.callout-important appearance="minimal"}
### Elegir centro equivale a elegir qué error importa
- La media es óptima para pérdida cuadrática: castiga de forma creciente los
errores grandes.
- La mediana es óptima para pérdida absoluta: cada minuto adicional cuesta lo
mismo.
No se trata de que una medida sea universalmente mejor. La función de pérdida
traduce las consecuencias de una decisión a una cantidad que se desea reducir.
:::
## Laboratorio interactivo: arrastrar una demora
Mueva el tiempo de la novena entrega. Observe qué centros se desplazan y dónde
alcanzan su mínimo las dos funciones de pérdida.
::: {.content-visible when-format="html"}
```{=html}
<div id="location-lab" class="location-lab" aria-labelledby="location-lab-title">
<style>
#location-lab { --ink:#172033; --muted:#5b6577; --line:#cbd5e1; --soft:#f6f8fb; --blue:#2563eb; --gold:#d97706; --green:#16835f; color:var(--ink); margin:1.25rem 0 1.75rem; }
#location-lab .lab-shell { border:1px solid var(--line); border-radius:12px; padding:1rem; background:#fff; }
#location-lab .lab-title { font-weight:700; margin:0 0 .25rem; }
#location-lab .lab-intro { color:var(--muted); margin:0 0 1rem; }
#location-lab .lab-layout { display:grid; grid-template-columns:minmax(250px,.78fr) minmax(390px,1.22fr); gap:1.2rem; align-items:start; }
#location-lab .control-row { display:grid; grid-template-columns:7.2rem 1fr 3.4rem; gap:.55rem; align-items:center; margin:.55rem 0; }
#location-lab input { width:100%; }
#location-lab output, #location-lab strong { font-variant-numeric:tabular-nums; }
#location-lab .buttons { display:flex; flex-wrap:wrap; gap:.45rem; margin:.8rem 0; }
#location-lab button { border:1px solid #94a3b8; background:#fff; color:var(--ink); border-radius:6px; padding:.38rem .62rem; cursor:pointer; }
#location-lab button:hover { background:#f1f5f9; }
#location-lab .metrics { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:.55rem; margin-top:.8rem; }
#location-lab .metric { background:var(--soft); border-radius:8px; padding:.6rem .7rem; }
#location-lab .metric span { display:block; color:#64748b; font-size:.8rem; }
#location-lab .metric strong { font-size:1.05rem; }
#location-lab .status { color:var(--muted); font-size:.88rem; margin:.7rem 0 0; }
#location-lab svg { display:block; width:100%; height:auto; }
#location-lab .chart-title { font-size:14px; font-weight:700; fill:var(--ink); }
@media (max-width:780px) { #location-lab .lab-layout { grid-template-columns:1fr; } }
</style>
<div class="lab-shell">
<p id="location-lab-title" class="lab-title">Explorador de centros</p>
<p class="lab-intro">Las primeras ocho entregas permanecen fijas. Cambie solo la novena y compare sensibilidad y función de pérdida.</p>
<div class="lab-layout">
<div>
<label class="control-row"><span>Novena entrega</span><input data-late type="range" min="27" max="120" step="1" value="75"><output data-late-out>75</output></label>
<div class="buttons">
<button type="button" data-value="27">Sin demora: 27</button>
<button type="button" data-value="75">Caso base: 75</button>
<button type="button" data-value="120">Demora: 120</button>
</div>
<div class="metrics" aria-live="polite">
<div class="metric"><span>Media</span><strong data-mean></strong></div>
<div class="metric"><span>Mediana</span><strong data-median></strong></div>
<div class="metric"><span>Moda</span><strong data-mode></strong></div>
<div class="metric"><span>Media recortada</span><strong data-trim></strong></div>
<div class="metric"><span>Q₁ / Q₃</span><strong data-quartiles></strong></div>
<div class="metric"><span>Suma total</span><strong data-total></strong></div>
</div>
<p class="status" data-status></p>
</div>
<div>
<svg data-chart viewBox="0 0 700 520" role="img" aria-label="Tiempos, medidas de localización y funciones de pérdida"></svg>
</div>
</div>
</div>
</div>
<script>
(() => {
const root=document.getElementById('location-lab'); if(!root)return;
const fixed=[18,20,20,21,22,24,25,27], slider=root.querySelector('[data-late]');
const svg=root.querySelector('[data-chart]'),NS='http://www.w3.org/2000/svg';
const add=(tag,attrs,text='')=>{const e=document.createElementNS(NS,tag);Object.entries(attrs).forEach(([k,v])=>e.setAttribute(k,v));e.textContent=text;svg.appendChild(e);return e;};
const avg=a=>a.reduce((s,x)=>s+x,0)/a.length;
const med=a=>{const z=[...a].sort((x,y)=>x-y),m=Math.floor(z.length/2);return z.length%2?z[m]:(z[m-1]+z[m])/2;};
const sx=x=>55+(x-10)*5;
function update(){
const late=+slider.value,data=[...fixed,late],ordered=[...data].sort((a,b)=>a-b),mean=avg(data),median=med(data),trim=avg(ordered.slice(1,-1));
const lower=ordered.slice(0,Math.floor(ordered.length/2)),upper=ordered.slice(Math.ceil(ordered.length/2)),q1=med(lower),q3=med(upper);
const counts={};data.forEach(x=>counts[x]=(counts[x]||0)+1);const top=Math.max(...Object.values(counts)),modes=Object.keys(counts).filter(x=>counts[x]===top).map(Number).sort((a,b)=>a-b);
root.querySelector('[data-late-out]').value=late;root.querySelector('[data-mean]').textContent=mean.toFixed(2)+' min';root.querySelector('[data-median]').textContent=median.toFixed(2)+' min';
root.querySelector('[data-mode]').textContent=(top===1?'Sin repetición':modes.join(', '));root.querySelector('[data-trim]').textContent=trim.toFixed(2)+' min';
root.querySelector('[data-quartiles]').textContent=q1.toFixed(1)+' / '+q3.toFixed(1);root.querySelector('[data-total]').textContent=data.reduce((s,x)=>s+x,0).toFixed(0)+' min';
root.querySelector('[data-status]').textContent='Al mover la demora, la media cambia '+(mean-28>=0?'+':'')+(mean-28).toFixed(2)+' min respecto al caso base; la mediana '+(median===22?'permanece en 22.':'cambia a '+median.toFixed(2)+'.');
svg.replaceChildren();
add('text',{x:350,y:22,'text-anchor':'middle',class:'chart-title'},'Datos y centros sobre la misma escala');
const axisY=150;add('line',{x1:sx(10),y1:axisY,x2:sx(130),y2:axisY,stroke:'#64748b','stroke-width':'1.5'});
for(let t=20;t<=120;t+=20){add('line',{x1:sx(t),y1:axisY-5,x2:sx(t),y2:axisY+5,stroke:'#64748b'});add('text',{x:sx(t),y:axisY+22,'text-anchor':'middle',fill:'#475569','font-size':'11'},t);}
const stacks={};ordered.forEach(x=>{stacks[x]=(stacks[x]||0)+1;add('circle',{cx:sx(x),cy:axisY-12-(stacks[x]-1)*15,r:'6',fill:x===late?'#d97706':'#64748b',stroke:'#fff','stroke-width':'1.5'});});
[[mean,'Media','#d62728',45],[median,'Mediana','#2563eb',65],[trim,'Recortada','#16835f',85]].forEach(([v,name,color,y])=>{add('line',{x1:sx(v),y1:35,x2:sx(v),y2:axisY,stroke:color,'stroke-width':'3','stroke-dasharray':'6 4'});add('text',{x:sx(v),y,'text-anchor':'middle',fill:color,'font-size':'11'},name+' '+v.toFixed(1));});
add('text',{x:350,y:210,'text-anchor':'middle',class:'chart-title'},'Pérdida según el centro candidato a');
const candidates=Array.from({length:181},(_,i)=>15+i*.25),sq=candidates.map(a=>data.reduce((s,x)=>s+(x-a)**2,0)),ab=candidates.map(a=>data.reduce((s,x)=>s+Math.abs(x-a),0));
const left=80,right=620,topY=240,bottom=460,px=a=>left+(a-15)/45*(right-left),path=(vals)=>{const lo=Math.min(...vals),hi=Math.max(...vals);return vals.map((v,i)=>(i?'L':'M')+px(candidates[i]).toFixed(1)+' '+(bottom-(v-lo)/(hi-lo)*(bottom-topY)).toFixed(1)).join(' ');};
add('rect',{x:left,y:topY,width:right-left,height:bottom-topY,fill:'#f8fafc',stroke:'#cbd5e1'});add('path',{d:path(sq),fill:'none',stroke:'#d62728','stroke-width':'3'});add('path',{d:path(ab),fill:'none',stroke:'#2563eb','stroke-width':'3'});
add('circle',{cx:px(mean),cy:bottom,r:'5',fill:'#d62728'});add('circle',{cx:px(median),cy:bottom,r:'5',fill:'#2563eb'});
[20,30,40,50,60].forEach(t=>{add('line',{x1:px(t),y1:bottom,x2:px(t),y2:bottom+5,stroke:'#64748b'});add('text',{x:px(t),y:bottom+21,'text-anchor':'middle',fill:'#475569','font-size':'11'},t);});
add('text',{x:350,y:505,'text-anchor':'middle',fill:'#475569','font-size':'12'},'Centro candidato a (minutos)');
add('line',{x1:100,y1:228,x2:128,y2:228,stroke:'#d62728','stroke-width':'3'});add('text',{x:134,y:232,fill:'#475569','font-size':'11'},'Cuadrática (escala propia)');
add('line',{x1:380,y1:228,x2:408,y2:228,stroke:'#2563eb','stroke-width':'3'});add('text',{x:414,y:232,fill:'#475569','font-size':'11'},'Absoluta (escala propia)');
}
slider.addEventListener('input',update);root.querySelectorAll('[data-value]').forEach(b=>b.addEventListener('click',()=>{slider.value=b.dataset.value;update();}));update();
})();
</script>
```
:::
::: {.content-visible unless-format="html"}
La versión HTML contiene un laboratorio que cambia la novena entrega entre 27
y 120 minutos. En el escenario base de 75 minutos, la media es 28, la mediana
22 y la media recortada 22.71. Al llevar la demora a 120, la media aumenta a
33, mientras la mediana y la media recortada permanecen iguales. El laboratorio
también muestra que la pérdida cuadrática alcanza su mínimo en la media y la
pérdida absoluta en la mediana.
:::
## Formalización
Sea una muestra numérica $x_1,\ldots,x_n$.[^muestra] La media aritmética es
$$
\bar{x}=\frac{1}{n}\sum_{i=1}^{n}x_i. \tag{8}
$$
Si $x_{(1)}\le\cdots\le x_{(n)}$ son los datos ordenados, la mediana es
$$
\widetilde{x}=
\begin{cases}
x_{((n+1)/2)}, & n\text{ impar},\\[4pt]
\dfrac{x_{(n/2)}+x_{(n/2+1)}}{2}, & n\text{ par}.
\end{cases} \tag{9}
$$
Para datos discretos o categóricos, si $f(v)$ es la frecuencia del valor $v$,
el conjunto de modas es
$$
\operatorname{Moda}(x)=\left\{v:f(v)=\max_u f(u)\right\}. \tag{10}
$$
Para una distribución poblacional con función acumulada $F$,[^acumulada] una
definición general del cuantil de nivel $p\in(0,1)$ es
$$
Q(p)=\inf\{x:F(x)\ge p\}. \tag{11}
$$
El ínfimo selecciona el menor valor donde la probabilidad acumulada alcanza o
supera $p$; en una muestra finita todavía debe elegirse una convención de
interpolación.
### Qué ocurre al cambiar de unidad
Suponga que transformamos cada dato mediante $y_i=ax_i+b$, con $a>0$. Entonces
$$
\bar y=a\bar x+b,
\qquad
\widetilde y=a\widetilde x+b,
\qquad
Q_y(p)=aQ_x(p)+b.
$$
Esta propiedad se llama **equivarianza afín**.[^afin] Por ejemplo, convertir
minutos a segundos multiplica los centros por 60; retrasar todos los registros
cinco minutos les suma cinco. La moda también conserva esta relación si la
transformación es uno a uno.
### Robustez no significa inmunidad
La media puede desplazarse arbitrariamente al mover una sola observación cada
vez más lejos. En contraste, para llevar la mediana fuera del centro es
necesario alterar aproximadamente la mitad de la muestra [@huber2009robust].
Esto hace atractiva a la mediana frente a contaminación o colas largas, pero no
la vuelve infalible: datos duplicados, sesgos de selección o una muestra que no
representa la población afectan cualquier resumen.
### La moda exige cuidado con datos continuos
En variables continuas dos mediciones exactas rara vez coinciden. La barra más
alta de un histograma describe una **clase modal**, pero puede cambiar al mover
el origen o el ancho de los intervalos. Una estimación por densidad también
depende de un parámetro de suavizado.[^densidad] Por ello, la moda suele ser más
natural para categorías o conteos discretos que para mediciones continuas.
## Implementación reproducible
La siguiente función explicita las convenciones usadas en el cálculo manual.
En particular, los cuartiles se obtienen como medianas de las mitades y el
recorte se expresa como un número entero de observaciones por cola.
```{python}
import numpy as np
import pandas as pd
def cuartiles_mediana_mitades(x):
x = np.sort(np.asarray(x, dtype=float))
n = x.size
punto = n // 2
inferior = x[:punto]
superior = x[punto + (n % 2):]
return np.median(inferior), np.median(superior)
def resumen_localizacion(x, recorte=1):
x = np.asarray(x, dtype=float)
if x.ndim != 1 or x.size == 0:
raise ValueError("x debe ser un vector no vacío.")
if not np.all(np.isfinite(x)):
raise ValueError("x solo puede contener valores finitos.")
if recorte < 0 or 2 * recorte >= x.size:
raise ValueError("El recorte debe conservar al menos una observación.")
ordenados = np.sort(x)
frecuencias = pd.Series(x).value_counts()
frecuencia_maxima = frecuencias.max()
modas = sorted(frecuencias[frecuencias == frecuencia_maxima].index.tolist())
q1, q3 = cuartiles_mediana_mitades(x)
interior = ordenados[recorte:x.size - recorte] if recorte else ordenados
return pd.Series({
"n": x.size,
"Media": x.mean(),
"Mediana": np.median(x),
"Moda(s)": ", ".join(f"{m:g}" for m in modas),
"Q1 (medianas de mitades)": q1,
"Q3 (medianas de mitades)": q3,
"Media recortada": interior.mean(),
})
tiempos = [18, 20, 20, 21, 22, 24, 25, 27, 75]
resumen_localizacion(tiempos, recorte=1)
```
La sensibilidad puede comprobarse sin cambiar los primeros ocho tiempos:
```{python}
filas = []
for demora in [27, 30, 75, 120]:
x = [18, 20, 20, 21, 22, 24, 25, 27, demora]
r = resumen_localizacion(x, recorte=1)
filas.append({
"Novena entrega": demora,
"Media": r["Media"],
"Mediana": r["Mediana"],
"Media recortada": r["Media recortada"],
})
pd.DataFrame(filas).round(2)
```
### Exploración visual de la sensibilidad
El mismo experimento puede recorrerse sobre una gráfica interactiva. Las
líneas usan exactamente los cuatro escenarios de la tabla anterior.
```{python}
import plotly.express as px
from IPython.display import HTML, display
def mostrar_plotly(figura):
"""Incrusta Plotly sin cargar una segunda versión de MathJax."""
display(HTML(figura.to_html(
full_html=False,
include_plotlyjs="cdn",
include_mathjax=False,
)))
sensibilidad_localizacion = (
pd.DataFrame(filas)
.melt(
id_vars="Novena entrega",
var_name="Medida",
value_name="Minutos",
)
)
fig = px.line(
sensibilidad_localizacion,
x="Novena entrega",
y="Minutos",
color="Medida",
markers=True,
title="La demora extrema desplaza de manera distinta cada centro",
)
fig.update_layout(
xaxis_title="Tiempo de la novena entrega (minutos)",
yaxis_title="Valor de la medida (minutos)",
legend_title_text="Medida de localización",
)
mostrar_plotly(fig)
```
Para datos resumidos por grupos, la media ponderada debe validar que los pesos
sean no negativos y que al menos uno sea positivo:
```{python}
def media_ponderada(valores, pesos):
valores = np.asarray(valores, dtype=float)
pesos = np.asarray(pesos, dtype=float)
if valores.shape != pesos.shape or valores.ndim != 1:
raise ValueError("valores y pesos deben ser vectores del mismo tamaño.")
if not np.all(np.isfinite(valores)) or not np.all(np.isfinite(pesos)):
raise ValueError("valores y pesos deben ser finitos.")
if np.any(pesos < 0) or pesos.sum() <= 0:
raise ValueError("Los pesos deben ser no negativos y sumar más de cero.")
return np.sum(valores * pesos) / np.sum(pesos)
media_ponderada([20, 25, 40], [50, 30, 20])
```
## Guía de decisión
| Pregunta | Medida principal | Qué debe acompañarla |
|---|---|---|
| ¿Qué valor conserva el total al repartirlo por igual? | Media | Tamaño de muestra, dispersión y presencia de extremos |
| ¿Cuál es el caso central por posición? | Mediana | Cuartiles y forma de la distribución |
| ¿Qué valor o categoría se repite más? | Moda | Tabla de frecuencias; informar empates |
| ¿Qué umbral cubre una proporción $p$? | Cuantil $Q(p)$ | Método de cálculo y cantidad de datos en la cola |
| ¿Cada resumen representa un número distinto de casos? | Media ponderada | Significado y suma de los pesos |
| ¿Se desea un centro menos sensible sin abandonar el promedio? | Media recortada | Porcentaje retirado en cada cola, fijado de antemano |
Una buena descripción suele reportar más de una pieza: centro, variabilidad y
una gráfica. Media y mediana cercanas no demuestran normalidad; distribuciones
multimodales o con colas pesadas también pueden compartir ambos centros.
## Errores frecuentes
- **Eliminar el extremo solo porque cambia la media.** Primero se verifica su
origen. Un cierre vial real y un error de captura requieren decisiones
distintas.
- **Promediar códigos nominales.** Si `bicicleta=1`, `moto=2` y `auto=3`, la
media de los códigos cambia al renombrarlos y no tiene interpretación
métrica.[^nominal]
- **Confundir moda con mayoría.** Que 20 sea la moda no significa que más de
50% de las entregas tarde 20 minutos; aquí solo son 2 de 9.
- **Ocultar pesos.** Promediar promedios de grupos sin sus tamaños concede el
mismo peso a grupos grandes y pequeños.
- **Comparar cuantiles calculados con convenciones distintas.** En muestras
pequeñas, la interpolación puede cambiar el resultado.
- **Usar la media recortada sin declarar el recorte.** “Media robusta” no basta;
se debe informar cuánto se retiró de cada cola.
## Puentes con minería de datos
| Contexto | Papel de las medidas de localización |
|---|---|
| Imputación de faltantes | Media o mediana sirven como línea base; la mediana suele resistir mejor colas y extremos, pero ambas reducen artificialmente la variabilidad. |
| Escalamiento robusto | Centrar con la mediana y escalar con el rango intercuartílico reduce la influencia de extremos. |
| Regresión | La predicción que minimiza error cuadrático estima una media condicional; con error absoluto, una mediana condicional.[^condicional] |
| Pronóstico de servicio | Cuantiles condicionales permiten estimar tiempos que cubren 50%, 90% o 95% de los casos. |
| Segmentación | Comparar centros por grupo solo es informativo junto con tamaños, dispersiones y distribuciones. |
| Monitoreo | Cambios en media y mediana pueden distinguir un desplazamiento general de unos pocos incidentes extremos. |
Una medida descriptiva no explica por qué cambió el proceso ni demuestra que
una variable cause otra. Primero resume; la explicación requiere contexto,
diseño y análisis adicional.
## Puente al caso BigMart
El capítulo [Medidas de localización en Big Mart Sales](2-3-example_localizacion_bigmart.qmd)
traslada esta secuencia a variables como peso, visibilidad, precio y ventas:
1. inspeccionar la distribución y la unidad de medida;
2. formular qué significa un valor “típico” en ese contexto;
3. reproducir media, mediana, moda, cuantiles o centros ponderados;
4. comparar su sensibilidad a asimetrías y extremos;
5. interpretar el centro junto con variabilidad y forma.
El código aplicado deja de ser una colección de funciones: cada cálculo queda
asociado con una pregunta y con los supuestos aprendidos en este capítulo.
## Ejercicios formativos
1. **Cálculo completo.** Para los tiempos
$(12,14,14,15,16,18,19,21,51)$, calcule media, mediana, moda, $Q_1$, $Q_3$
por medianas de mitades y media recortada retirando un dato por cola.
2. **Sensibilidad exacta.** En el ejemplo de entregas, cambie 75 por 210.
Prediga el cambio de la media mediante la ecuación (4) antes de recalcular.
Explique por qué la mediana no cambia.
3. **Dos pérdidas.** Calcule $S_1(a)$ y $S_2(a)$ para $a=20,22,28$ usando los
nueve tiempos. Verifique dónde es menor cada pérdida y explique por qué los
mínimos difieren.
4. **Media ponderada.** Una cuarta zona tarda 55 minutos y aporta 5 entregas.
Actualice la media ponderada. Compare el resultado con el promedio sin pesos
de los cuatro tiempos zonales.
5. **Mismo centro, distinta distribución.** Construya dos conjuntos de nueve
valores con la misma media y mediana, pero con dispersiones claramente
distintas. Dibújelos antes de concluir que se parecen.
6. **Moda sin mayoría.** Construya un conjunto donde la moda aparezca más que
cualquier otro valor pero represente menos de 25% de las observaciones.
7. **Decisión de servicio.** Argumente qué medida usaría para (a) presupuestar
horas totales de trabajo, (b) describir una entrega habitual y (c) prometer
un tiempo que cubra 90% de los pedidos. Indique qué información adicional
necesitaría.
## Referencias {.unnumbered}
::: {#refs}
:::
[^valor-extremo]: Un **valor extremo** es una observación muy alejada del cuerpo principal de los datos. Puede ser un evento genuino, un caso de otra población o un error; la distancia por sí sola no decide cuál explicación es correcta.
[^estadistico]: Un **estadístico** es cualquier función calculada a partir de una muestra, como una media o un máximo. Su valor cambia si cambia la muestra. Un **parámetro** describe a la población completa y normalmente es desconocido.
[^orden]: Un **estadístico de orden** es una observación identificada por su posición después de ordenar la muestra. Los paréntesis en $x_{(i)}$ indican rango, no el dato originalmente registrado en la fila $i$.
[^multimodal]: Una distribución **multimodal** posee más de un máximo local o más de un valor con frecuencia máxima. Puede ser señal de que se mezclaron subgrupos, aunque no lo demuestra por sí sola.
[^robustez]: Una medida es **robusta** si cambios pequeños en la mayoría de los datos o una fracción limitada de observaciones anómalas no producen cambios desproporcionados en el resultado.
[^cuartiles]: Los cuartiles dividen la distribución ordenada en cuatro partes. $Q_1=Q(0.25)$, $Q_2=Q(0.5)$ es la mediana y $Q_3=Q(0.75)$.
[^cola]: Una **cola** es la región de valores poco frecuentes situada en un extremo de la distribución. Estimar cuantiles altos exige suficientes observaciones precisamente en la cola derecha.
[^peso]: Un **peso** indica cuánto contribuye o cuántas unidades representa una observación resumida. No debe confundirse con el peso físico de un producto ni elegirse solo para forzar un resultado.
[^perdida]: Una **función de pérdida** asigna un costo numérico a la diferencia entre una predicción o resumen y lo observado. Minimizarla convierte el significado práctico de un error en un criterio matemático.
[^mediana-par]: Con $n$ par, cualquier punto entre los dos valores centrales minimiza la suma de desviaciones absolutas. Promediarlos selecciona un único valor por convención.
[^muestra]: Una **muestra** es el conjunto de unidades observadas; la **población** es el conjunto más amplio sobre el que se desea aprender. Describir bien una muestra no garantiza que represente a la población.
[^acumulada]: La **función de distribución acumulada** es $F(x)=P(X\le x)$: la probabilidad de observar un valor no mayor que $x$. Es no decreciente y toma valores entre 0 y 1.
[^afin]: Una transformación afín combina un cambio de escala, $a$, con un desplazamiento, $b$. La condición $a>0$ conserva el orden de las observaciones.
[^densidad]: Una **densidad** describe cómo se distribuye localmente la probabilidad de una variable continua. Su altura no es una probabilidad puntual; son las áreas bajo la curva las que representan probabilidades.
[^nominal]: Una variable **nominal** usa etiquetas sin orden ni distancias naturales, como color o medio de transporte. Los números asignados como códigos son identificadores, no magnitudes.
[^condicional]: Una media o mediana **condicional** resume la respuesta dentro de casos que comparten ciertos predictores, por ejemplo el tiempo de entrega para una zona y una hora específicas.