Probabilidad y Estadística · Tema 30

Distribuciones empíricas

La distribución que sale de los datos: cuándo simular remuestreando lo observado y cómo hacerlo sin teoría de por medio.

01 · Punto de partida

Si los datos alcanzan, los datos mandan

Cuando ninguna teórica cierra (mezclas, picos raros) o cuando hay miles de observaciones, lo más honesto es simular con los datos mismos: sortear con reposición de lo observado. Es la distribución empírica: cada dato con probabilidad 1/n.

Su ECDF es escalera con saltos 1/n; su histograma es el de la muestra. Con n grande estima F real (temas 11 y 15); con n chico repite sus huecos: remuestrear no inventa lo no visto.

  • ¿Ninguna teórica cierra o hay datos de sobra?
  • ¿n alcanza para cubrir colas y combinaciones?
  • ¿El futuro se parece a la ventana medida?
  • ¿Cómo sorteo de la lista en el simulador?

02 · Definición

ECDF, histograma y remuestreo

F̂

ECDF

Escalera que sube 1/n por dato ordenado. Estima F: con n grande la calca (tema 11).

1/n

Masa empírica

Cada observado pesa igual. Simular es tirar un dado de n caras con los datos escritos.

↻

Remuestreo

Elegir al azar con reposición. Base del bootstrap (re-muestrear para medir error) y del simulador sin teoría.

12 demandas observadas (ejemplo del laboratorio).
i123456789101112
xᵢ6,57,28,18,89,39,910,411,011,812,513,113,8

03 · Cuándo usarla

Datos que alcanzan vs teoría que conviene

Empírica gana

Forma rara o n enorme

Mezclas, picos horarios, miles de tickets: remuestrear respeta todo sin forzar campana.

Teórica gana

n chico o futuro distinto

12 datos no cubren colas; escenarios fuera de lo visto piden extrapolar con teoría (tema 34).

Límite
Jamás genera lo no visto: máximo simulado = máximo observado. Colas fuera requieren teoría.
Suavizado
Con n medio, histograma + núcleo suaviza dientes sin imponer familia.
Bootstrap
Re-muestrear para medir error de x̄, mediana o cuantil sin fórmulas (adelanto tema 42).
Trazabilidad
Guardar dataset + semilla: la empírica se audita mostrando los datos.

04 · Ejemplos

Datos como generador

Datos xᵢ→choice→Réplicas reales
  1. 1
    Demanda.

    12 demandas remuestreadas para 30 días: respeta picos sin suponer uniforme.

  2. 2
    Atención.

    300 tiempos sorteados: mezcla mañana/tarde intacta.

  3. 3
    Llegadas.

    Minuto a minuto observado: reproduce hora pico sin λ por tramo.

  4. 4
    Fallos.

    Historial de fallas como escenarios: lo raro observado se repite con su frecuencia.

  5. 5
    Juego.

    Tiempos reales de partida remuestreados para balancear sin teoría.

05 · Representación en Python

choice es el generador empírico

Python en tu navegador. Remuestreá y compará medias.

import random
random.seed(301)
datos = [6.5,7.2,8.1,8.8,9.3,9.9,10.4,11.0,11.8,12.5,13.1,13.8]

sim = [random.choice(datos) for _ in range(5000)]
print("media datos:", round(sum(datos)/len(datos), 2))
print("media sim:", round(sum(sim)/len(sim), 2))
print("P(X>11):", round(sum(1 for x in sim if x > 11)/len(sim), 3))

Consejo: con 12 datos la sim solo repite esos 12: el histograma tiene huecos reales.

ECDF a mano

datos = sorted([6.5,7.2,8.1,8.8,9.3,9.9,10.4,11.0,11.8,12.5,13.1,13.8])
def F_emp(x):
    return sum(1 for v in datos if v <= x)/len(datos)
print("F(10):", round(F_emp(10), 3), "| F(12):", round(F_emp(12), 3))

06 · Exploración

Laboratorio: remuestrear 12 demandas

Datos fijos (tabla sección 02). Barras claras = histograma original (8 tramos 6–14); sólidas = histograma de N sorteos choice. La ECDF blanca es de los 12; las de colores, de 3 remuestreos. Subí N y las sólidas calcan las claras… con sus huecos.

EXPERIMENTO 30

X* = choice(datos)

12 valores · P̂ = 1/12 c/u

Los resultados numéricos aparecen debajo.
Media datos10,20
Media sim0,00
P̂(X mayor a 11)0,000
Máx sim (nunca mayor a 13,8)0,0

El remuestreo repite lo visto: máximo 13,8 siempre.

En ECDF se ven las escaleras: la blanca de 12 escalones y las simuladas que la calcan con dientes.

Preguntas para explorar

  1. Con N = 6000, ¿aparece algún valor fuera de los 12? ¿Por qué?
  2. ¿P(X mayor a 14) simulada cuánto da? ¿Y la realista con teoría?
  3. ¿Cuándo conviene empírica y cuándo ajustar uniforme/normal (tema 34)?
Ver respuestas sugeridas
  1. No: choice solo repite. Los huecos entre datos jamás se rellenan.
  2. 0: la empírica no extrapola. Una U(6,14) daría 0 pero con masa entre datos; una teórica con cola daría mayor a 0.
  3. Empírica con cientos y forma rara; teórica con pocos datos o futuro fuera de rango.

07 · Comprensión

Confusiones frecuentes

«Empírica no tiene parámetros»

Tiene n y los datos mismos: cambiar la ventana cambia el modelo. Se versiona como parámetro.

«Con pocos datos igual simula bien»

Simula lo poco visto con total confianza: colas y combinaciones ausentes. n chico pide teoría.

«Remuestrear inventa variabilidad»

Repite la observada, ni más ni menos. No crea valores nuevos ni suaviza.

«ECDF con 12 datos ya es F»

Es estimación con escalones de 1/12 ≈ 0,083: los cuantiles saltan. Con cientos se vuelve rampa.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: media que se hereda

Verificá que la media remuestreada tiende a 10,2 con N = 200 y 10000.

import random
datos = [6.5,7.2,8.1,8.8,9.3,9.9,10.4,11.0,11.8,12.5,13.1,13.8]
for N, s in [(200, 1), (10000, 1)]:
    random.seed(s)
    print(N, round(sum(random.choice(datos) for _ in range(N))/N, 2))
Ver solución razonada

Ambas rondan 10,2: el remuestreo hereda la media (y sus sesgos). LGN sobre la empírica, no sobre la real.

Ejercicio 2: techo empírico

¿Máximo simulado en 5000 sorteos? ¿P(X mayor a 13,8)?

import random
random.seed(2)
datos = [6.5,7.2,8.1,8.8,9.3,9.9,10.4,11.0,11.8,12.5,13.1,13.8]
sim = [random.choice(datos) for _ in range(5000)]
print(max(sim), sum(1 for x in sim if x > 13.8)/len(sim))
Ver solución

13,8 y 0: techo duro. Para pedir más allá hacen falta teoría o más ventana medida.

Ejercicio 3: bootstrap de la media

Re-muestreá medias de 12 (con reposición) 2000 veces y mirá su dispersión: error de la media sin fórmulas.

Ver una posible respuesta
import random, statistics
random.seed(9)
datos = [6.5,7.2,8.1,8.8,9.3,9.9,10.4,11.0,11.8,12.5,13.1,13.8]
medias = [statistics.mean(random.choices(datos, k=12)) for _ in range(2000)]
print("media:", round(statistics.mean(medias), 2), "| s:", round(statistics.stdev(medias), 2))

s ≈ 0,6: error de x̄ con n = 12 sin suponer normal. Adelanto del bootstrap (tema 42).

09 · Síntesis

Ideas para recordar

  • Empírica: cada dato pesa 1/n; simular es choice(datos).
  • Respeta formas raras sin teoría; no extrapola ni rellena huecos.
  • ECDF escalera estima F; con n grande la calca.
  • Con n chico o futuro distinto, teoría (tema 34).
  • Versionar dataset + semilla: así se reproduce.

En el próximo tema resumiremos corridas: estadísticos descriptivos en simulaciones.