01 · Punto de partida
Una corrida no prueba nada
Con N = 10 000 la moneda da 0,502. ¿Suerte o convergencia? La única forma de saberlo es repetir la corrida completa con otra semilla y mirar cuánto se mueven los resultados entre sí.
Cada macro-réplica es una simulación entera de n escenarios. La dispersión entre réplicas mide la estabilidad real.
- ¿Cuántas macro-réplicas R conviene hacer?
- ¿Qué n lleva cada una?
- ¿Cuánto se dispersan entre sí?
- ¿La conclusión aguanta el cambio de semilla?
02 · Definición
Dos niveles de repetición
Réplica (n)
Un escenario dentro de la corrida. N total = R × n si hay replicaciones.
Replicación (R)
Una corrida entera con semilla propia. Típico: R = 10–30 para validar.
Dispersión
Desvío entre las R medias. Si es grande frente a e, falta n o sobra ruido.
| Nivel | Qué es | Para qué sirve |
|---|---|---|
| n escenarios | Dentro de una corrida | Reducir el error 1/√n |
| R replicaciones | Corridas con otra semilla | Verificar estabilidad y detectar sesgos |
| R × n total | Presupuesto total | Repartir entre precisión (n) y confianza (R) |
03 · Método
Validar en 3 pasos
- 1Repetir R veces.
Misma n, semillas 1…R. Guardar cada media m₁…mR.
- 2Comparar dispersión.
Rango y desvío de las m. Si el rango supera 2e, agrandar n.
- 3Consolidar.
Media global y su error con desvío entre réplicas. Reportar R, n y semillas.
Bien validado
R = 20, n = 5 000
20 puntos apiñados en ±0,01: la conclusión no depende de la semilla.
Sin validar
Una corrida de 100 000
Un solo número sin dispersión: imposible saber si fue suerte.
- Semillas 1…R
- Secuencia explícita y reproducible. Nada de «semilla aleatoria del sistema» sin anotar.
- Error entre réplicas
- Desvío de las m dividido √R. Alternativa sólida al σ/√N interno.
- Comparar políticas
- Usar las mismas R semillas para cada Q: la diferencia deja de ser ruido.
04 · Ejemplos
Cuándo R salva el día
- 1Moneda.
R = 20 × n = 1 000: las 20 medias caen en 0,5 ± 0,03. Estable.
- 2Q óptimo.
Q = 100 gana en las 20 semillas: la decisión es robusta, no un golpe de suerte.
- 3Evento raro.
Con p = 0,01 y n = 500, algunas réplicas dan 0: R revela que n no alcanza.
05 · Representación en Python
El doble bucle: R afuera, n adentro
Python en tu navegador. R corridas, una media por corrida, y la dispersión canta.
import random
import statistics
def una_corrida(n, semilla):
random.seed(semilla)
return sum(random.random() < 0.5 for _ in range(n)) / n
R, n = 20, 1000
medias = [una_corrida(n, s) for s in range(1, R + 1)]
print("medias:", [round(m, 3) for m in medias[:5]], "...")
print("global:", round(statistics.mean(medias), 4))
print("desvío entre réplicas:", round(statistics.pstdev(medias), 4))
06 · Exploración
Laboratorio: 20 corridas no mienten
Cada punto es una replicación (media de n tiradas). Subí n y mirá cómo los puntos se apiñan sobre 0,5. Subí R y mirá cómo se llena el cuadro.
R medias, una verdad
mⱼ = carasⱼ / n · j = 1…R
Tocá «Replicar» para correr R corridas.
Puntos: medias de cada replicación. Línea amarilla: 0,5. Banda: ±2·error. Con n chico los puntos se desparraman; con n grande se alinean.
Preguntas para explorar
- Con n = 200 y R = 30, ¿qué rango cubren los puntos?
- Con n = 5 000, ¿el rango se parte a la mitad o mucho más?
- ¿Para qué sirve subir R si ya tenés n grande?
Ver respuestas sugeridas
- ~0,15 de ancho: verás puntos de 0,42 a 0,58. Normal con n chico.
- Mucho más: el desvío cae como 1/√n, de ~0,035 a ~0,007. Se apiñan.
- Para probar estabilidad y estimar el error entre réplicas. R grande no achica el sesgo, lo revela.
07 · Comprensión
Confusiones frecuentes
«R × n chico equivale a N grande»
En total sí, pero R aporta el diagnóstico: 20×500 diagnostica mejor que 1×10 000 a ciegas.
«Cambio la semilla y cambió todo: hay bug»
No: con n chico es esperable. El bug es no haber medido esa variación.
«Con R = 3 alcanza»
Tres puntos no estiman dispersión. Mínimo 10, ideal 20–30.
«Replicar es tirar N más grande»
Replicar es estructurar: mismas n, distintas semillas, análisis entre medias. No es solo sumar.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: rango con n chico
Corré R = 15 con n = 200 y anotá el rango de las medias.
import random
def corrida(n, s):
random.seed(s)
return sum(random.random() < 0.5 for _ in range(n)) / n
ms = [corrida(200, s) for s in range(15)]
print(round(min(ms), 3), round(max(ms), 3), round(max(ms) - min(ms), 3))
Ver solución razonada
Rango ~0,15. Con n = 200 el error por réplica es ~0,035: el rango de 15 cubre unas 4σ.
Ejercicio 2: apiñar con n grande
Repetí con n = 5 000. ¿Cuánto se achica el rango?
import random
def corrida(n, s):
random.seed(s)
return sum(random.random() < 0.5 for _ in range(n)) / n
ms = [corrida(5000, s) for s in range(15)]
print(round(max(ms) - min(ms), 4))
Ver solución
~0,03: cae ~5× porque √(5000/200) = 5. La teoría 1/√n se ve en el rango.
Ejercicio 3: comparar Q con mismas semillas
Q = 90 vs 100 con las mismas 10 semillas: ¿gana siempre el mismo?
Ver una posible respuesta
import random
def media_Q(Q, n, s):
random.seed(s)
tot = 0
for _ in range(n):
D = random.choices([80, 100, 120], weights=[30, 40, 30])[0]
tot += 5 * min(Q, D) - 2 * Q
return tot / n
semillas = list(range(10))
dif = [media_Q(100, 2000, s) - media_Q(90, 2000, s) for s in semillas]
print([round(d, 1) for d in dif])
print("gana 100 en:", sum(1 for d in dif if d > 0), "/10")
100 gana en casi todas: decisión robusta. Con semillas distintas por Q, el ruido taparía la diferencia.
09 · Síntesis
Ideas para recordar
- Réplica = escenario; replicación = corrida con su semilla.
- R = 10–30 valida; n da la precisión. Presupuesto total R × n.
- La dispersión entre mⱼ es el test de estabilidad.
- Comparar políticas con las mismas semillas elimina ruido común.
- Reportar R, n y semillas: sin eso no hay reproducibilidad.
En el próximo tema formalizaremos la estimación mediante promedios: el estimador estrella y sus garantías.