01 · Punto de partida
No se puede sortear hasta infinito
U(a,b) con b = ∞ no existe. Hay dos salidas: truncar en [0,L] y acotar la cola que se pierde, o transformar (0,1) en (0,∞) con un cambio de variable y sortear exponenciales.
El ejemplo guía: ∫₀^∞ e^(−x) dx = 1. Cabe en la cabeza y prueba ambos caminos.
- ¿La cola más allá de L es despreciable?
- ¿Qué L deja sesgo menor que mi e?
- ¿Qué cambio x = φ(u) mapea (0,1) al infinito?
- ¿Muestreo directo de la cola en vez de truncar?
02 · Definición
Dos caminos al infinito
Truncamiento
Integrar hasta L con Monte Carlo clásico. Sesgo = cola. Fácil y auditable si la cola decae.
Transformación
x = φ(u) con φ:(0,1)→(0,∞). Sin sesgo, pero f·φ′ puede tener más varianza.
Muestreo directo
Sortear de la cola (exponencial) y promediar el resto. Puente al tema 23.
| Blanco | Cambio x = φ(u) | Integral |
|---|---|---|
| (0,∞) | x = −ln(1−u) | ∫₀¹ f(φ(u))·φ′(u) du |
| (0,∞) | x = u/(1−u) | ∫₀¹ f(u/(1−u))/(1−u)² du |
| (−∞,∞) | x = tan(π(u−1/2)) | Con jacobiano π·sec² |
03 · Método
Elegir camino en 3 preguntas
- 1Medir la cola.
Para e^(−x), cola(L) = e^(−L). Con L = 7, sesgo ≈ 0,001: despreciable.
- 2Si decae rápido, truncar.
Elegir L con sesgo < e/2 y gastar el resto en N. Simple y robusto.
- 3Si no, transformar.
Mapear y promediar f(φ)·φ′ en (0,1). Sin sesgo, vigilar la varianza cerca de u = 1.
- Sesgo de truncamiento
- Lo que falta más allá de L. Se acota analíticamente o agrandando L hasta que no se mueva.
- Jacobiano φ′
- El precio del doblez: estira el diferencial dx = φ′(u)du. Si explota, la varianza explota.
- Cola pesada
- Decae lento (1/x²): truncar pide L enorme. Mejor muestreo de la cola o importance sampling.
04 · Ejemplos
Tres infinitos domados
- 1∫₀^∞ e^(−x) = 1.
Truncar en L = 8 (sesgo 0,0003) o sortear exponenciales directo.
- 2Normal (−∞,∞).
Truncar en [−5,5] (cola ~10⁻⁶) o mapear con tan.
- 3∫₁^∞ 1/x² = 1.
Con x = 1/(1−u): integral en (0,1) de 1. Sin truncar.
05 · Representación en Python
Truncar y transformar, lado a lado
Python en tu navegador. Ambos deben dar ~1: uno con sesgo controlado, otro sin sesgo.
import random
import math
def truncada(N, L=8):
m = sum(math.exp(-random.uniform(0, L)) for _ in range(N)) / N
return L * m # sesgo = exp(-L)
def transformada(N):
# x = -ln(1-u), dx = du/(1-u); e^-x * dx = du: integral exacta 1
tot = 0
for _ in range(N):
u = random.random()
x = -math.log(1 - u)
tot += 1.0 # f*phi' = 1
return tot / N
N = 20000
print("truncada:", round(truncada(N), 4), "sesgo ~", round(math.exp(-8), 5))
print("transformada:", round(transformada(N), 4))
06 · Exploración
Laboratorio: cortar la cola de e^(−x)
Mové el corte L. La zona verde es lo integrado; la gris la cola perdida e^(−L). Con L chico hay sesgo; con L grande, más varianza por el ancho.
Sesgo vs varianza
Î(L) = L·promedio en [0,L]
Tocá «Integrar» para truncar.
Con L = 2 la cola es 0,135: sesgo enorme. Con L = 8 es 0,0003: despreciable frente al error Monte Carlo.
Preguntas para explorar
- Con L = 2 y N gigante, ¿la estimada llega a 1? ¿Por qué no?
- Con L = 10, ¿el error es sesgo o varianza?
- ¿Qué L elegirías para e = 0,005?
Ver respuestas sugeridas
- No: llega a 1 − e^(−2) ≈ 0,865. El sesgo no lo baja N.
- Varianza: la cola es 0,00005 y el SE con N = 8 000 es ~0,01.
- L = 6 (cola 0,0025 < e/2) y N para SE ≈ 0,0025.
07 · Comprensión
Confusiones frecuentes
«Uniforme hasta infinito»
No existe. O se trunca o se transforma: no hay U(0,∞).
«L grande siempre es mejor»
Baja el sesgo pero sube la varianza (ancho L). Hay L óptimo, no máximo.
«Transformar quita el error»
Quita el sesgo, no la varianza: f·φ′ puede ser más ruidosa que la original.
«La cola se ignora»
Se acota y se reporta. Ignorarla es sesgar en silencio.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: truncar e^(−x)
Con L = 5 y N = 20 000, compará con 1 − e^(−5).
import random
import math
L, N = 5, 20000
m = sum(math.exp(-random.uniform(0, L)) for _ in range(N)) / N
print(L*m, 1-math.exp(-L))
Ver solución razonada
Ambas ~0,993. La diferencia con 1 (0,007) es la cola, no el azar.
Ejercicio 2: mapa 1/x²
Con x = 1/(1−u), mostrá que ∫₁^∞ 1/x² = promedio de 1.
import random
N = 10000
m = sum(1.0 for _ in range(N)) / N
print(m)
Ver solución
Da 1 exacto en media: el jacobiano cancela a f. El mapa perfecto existe a veces.
Ejercicio 3: elegir L
¿Qué L deja cola menor que 0,001 para e^(−x)?
Ver una posible respuesta
import math
for L in [5, 6, 7, 8]:
print(L, round(math.exp(-L), 5))
L = 7 (0,00091). Regla: e^(−L) < e/2 para que el sesgo no domine.
09 · Síntesis
Ideas para recordar
- Sin U(0,∞): truncar con cola acotada o transformar (0,1)→∞.
- Truncar es simple; el sesgo es la cola e^(−L).
- Transformar quita sesgo con jacobiano φ′; vigilar varianza.
- Elegir L con sesgo < e/2 y N para el resto.
- Reportar L + sesgo + N + SE: doble auditoría.
En el próximo tema sortearemos cualquier F sin rodeos: el muestreo directo.