Generación de Variables Aleatorias · Tema 04

Función de distribución acumulada

Qué es F(x) = P(X ≤ x), sus propiedades, su inversa generalizada y por qué F(X) ~ U(0,1) es la llave de toda la generación.

01 · Punto de partida

Una sola función describe todo el azar

Masa, densidad, tabla, histograma: cada notación muestra una cara. Pero hay una que las unifica a todas y que además genera: la acumulada F(x) = P(X ≤ x). Si conocés F, conocés cualquier probabilidad por resta y conocés el generador por inversión.

En los Temas 2 y 3 ya la usamos sin nombrarla: acumuladas Fk para discretas, F(x) = (x−a)/(b−a) para la uniforme, F(x) = 1 − e^(−λx) para la exponencial. Ahora la estudiamos de frente.

  • ¿Qué propiedades cumple toda F, discreta o continua?
  • ¿Cómo se lee P(a < X ≤ b) directamente del gráfico?
  • ¿Qué es el cuantil F⁻¹(u) cuando F tiene saltos o planos?
  • ¿Por qué F(X) es uniforme y U invertida por F es X?

02 · Definición

Propiedades que toda F cumple

Sea F(x) = P(X ≤ x). Entonces, sin importar si X es discreta, continua o mezcla:

↗

Monótona 0 → 1

No decrece nunca, tiende a 0 a la izquierda y a 1 a la derecha. La altura es probabilidad acumulada.

◫

Salto = masa

En discretas cada salto vertical mide pk. En continuas no hay saltos: la pendiente es f(x).

⇄

Doble lectura

Horizontal: dado x, leo u = F(x) (probabilidad). Vertical: dado u, leo x = Q(u) (cuantil). Generar es leer en vertical.

Y el teorema que sostiene el curso (transformada integral de probabilidad): si X ~ F continua, entonces F(X) ~ U(0,1); al revés, si U ~ U(0,1), entonces Q(U) ~ F. Por eso la acumulada es el puente en ambas direcciones.

Tres F canónicas y su lectura en ambos sentidos.
X ~F(x)Q(u) = F⁻¹(u)
U(a,b)(x−a)/(b−a) en [a,b]a + (b−a)·u
Exp(λ)1 − e^(−λx), x ≥ 0−ln(1−u)/λ
Bernoulli(p)0 si x<0 · 1−p si 0≤x<1 · 1 si x≥10 si u ≤ 1−p, 1 si no

03 · Anatomía

Escaleras, curvas y mixtas

Discreta: escalera
Saltos pk en cada xk, plana entre saltos. El cuantil Q(u) es constante por tramos: devuelve el escalón donde cae u. (Tema 2)
Continua: rampa lisa
Estrictamente creciente donde f > 0, plana donde f = 0. Si es invertible, Q = F⁻¹ clásica; si tiene planos, Q salta (inversa generalizada).
Mixta / empírica
Masa en puntos + tramos continuos, o escalera empírica de datos con saltos 1/n. Se invierte igual: primer x con F(x) ≥ u. (Temas 34–35)
Cola S(x) = 1 − F(x)
P(X > x). En fiabilidad y riesgo se trabaja con S. Generar por cola es lo mismo: u alto ↔ x grande.

Leer en horizontal

Probabilidad

Dado x = 2, F(2) = 0,86 significa “86 % de la masa está ≤ 2”. Sirve para validar: la fracción muestral ≤ 2 debe rondar 0,86.

Leer en vertical

Generación

Dado u = 0,86, Q(0,86) = 2 significa “el percentil 86 vale 2”. Repetir con u aleatorios reproduce F completa.

04 · Para qué sirve F en cada método

La misma F, cinco usos

F evalúa→Q genera→muestra valida
  1. 1
    Inversión analítica (Temas 5–6).

    Si despejás Q en fórmula cerrada, el generador es una línea: -log(1-u)/lam.

  2. 2
    Inversión numérica (Tema 7).

    Si solo podés evaluar F, resolvemos F(x) = u por bisección. F monótona garantiza convergencia.

  3. 3
    Rechazo (Temas 8–10).

    No usa F sino f y envolvente g. Pero se valida comparando histogramas contra f = F′.

  4. 4
    Empíricas (Temas 34–35).

    La F empírica F̂(x) = #{xᵢ ≤ x}/n se invierte por ordenamiento: remuestrear es invertir F̂.

  5. 5
    Validación (Temas 36–38).

    CDF empírica vs. teórica y Kolmogorov-Smirnov miden la distancia máxima entre curvas F.

05 · Representación en Python

Evaluar F y su cuantil con la misma tabla

Para discretas finitas, F y Q comparten las acumuladas. Para continuas con fórmula, F y Q son dos funciones inversas. Este bloque lo muestra en ambos mundos.

Python en tu navegador. Cambiá x y u y verificá que Q(F(x)) ≈ x y F(Q(u)) ≈ u.

import bisect
import math

# Discreta: dado cargado.
valores = [1, 2, 3, 4, 5, 6]
probs = [0.10, 0.20, 0.30, 0.25, 0.10, 0.05]
acum = []
s = 0.0
for p in probs:
    s += p
    acum.append(s)
acum[-1] = 1.0

def F_discreta(x):
    # P(X <= x): suma de masas con valor <= x.
    return sum(p for v, p in zip(valores, probs) if v <= x)

def Q_discreta(u):
    return valores[bisect.bisect_left(acum, u)]

print("F(3) =", F_discreta(3), " Q(0.73) =", Q_discreta(0.73))

# Continua: exponencial lam=1.5.
lam = 1.5
def F_exp(x):
    return 0.0 if x < 0 else 1 - math.exp(-lam * x)

def Q_exp(u):
    return -math.log(1 - u) / lam

x, u = 1.0, 0.73
print("F_exp(1) =", round(F_exp(x), 3))
print("Q_exp(0.73) =", round(Q_exp(u), 3))
print("ida y vuelta:", round(Q_exp(F_exp(x)), 3), round(F_exp(Q_exp(u)), 3))

La ida y vuelta debe devolver ≈ 1,0 y ≈ 0,73. En la discreta no hay ida y vuelta lisa: Q(F(3)) = 3 pero F(Q(0,73)) = 0,85, el salto del 4.

06 · Exploración

Laboratorio: leer F en horizontal y vertical

Elegí la distribución, mové λ (exponencial) o el punto x. El punto marca (x, F(x)): la línea horizontal lee probabilidad, la vertical lee cuantil. Verificá que son inversas.

EXPERIMENTO 04

La acumulada como puente

u = F(x) · x = Q(u)

Los resultados numéricos aparecen debajo.
F(x) = P(X ≤ x)0,777
Cola P(X > x)0,223
Q(F(x)) vuelve a1,000
Lectura77,7 % ≤ 1

Con λ 1,5 y x 1, F = 0,777 y el cuantil vuelve a 1.

Curva F de 0 a 1 en x ∈ [0,6]. Las guías punteadas muestran la doble lectura probabilidad ↔ cuantil.

Preguntas para explorar

  1. En exponencial λ = 1,5 con x = 1: ¿cuánto vale F y cuánto la cola? ¿Suman 1?
  2. Cambiá a uniforme U(0,4) con x = 1: ¿cuánto da F? ¿Por qué es lineal?
  3. Subí x a 6 en la exponencial: ¿a qué tiende F? ¿Y la cola?
Ver respuestas sugeridas
  1. F ≈ 0,777 y cola ≈ 0,223; suman 1 por complemento.
  2. 0,25 = 1/4: F(x) = x/4, recta de pendiente 1/4 = densidad.
  3. F → 1 y la cola → 0: casi toda la masa ya quedó acumulada.

07 · Comprensión

Confusiones frecuentes

«F es lo mismo que f»

f es altura/área local, F es acumulado 0→1. f puede superar 1; F nunca. Se conectan por F′ = f, no por igualdad.

«P(X = x) = F(x)»

En el continuo P(X = x) = 0 y F(x) = P(X ≤ x). En discretas P(X = x) es el salto, no la altura acumulada.

«Toda F se invierte despejando»

Solo si hay fórmula cerrada. La normal no tiene inversa elemental: se invierte numéricamente o se evita con Box-Muller/rechazo.

«La empírica no es una F»

Sí lo es: escalera con saltos 1/n que sube de 0 a 1. Invertirla es remuestrear (bootstrap). Ver Temas 34–35.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: intervalo por resta

Exponencial λ = 2: calculá P(0,5 < X ≤ 1,5) como F(1,5) − F(0,5) y validá con 20000 muestras.

import random
import math

lam = 2.0
def F(x):
    return 0.0 if x < 0 else 1 - math.exp(-lam * x)

print("teórica:", round(F(1.5) - F(0.5), 3))
random.seed(21)
N = 20000
m = [-math.log(1 - random.random()) / lam for _ in range(N)]
print("muestral:", round(sum(1 for x in m if 0.5 < x <= 1.5) / N, 3))
Ver solución razonada

Teórica ≈ 0,318. La muestral debe caer 0,31–0,33. Si contaste < en vez de ≤ no cambia nada aquí (continuo), pero en discretas sí.

Ejercicio 2: cuantil a mano

Sin ejecutar: U(0,4), ¿cuánto vale Q(0,25)? ¿Y Q(0,73)? Verificá con código.

def Q_unif(u, a=0, b=4):
    return a + (b - a) * u

print(Q_unif(0.25), Q_unif(0.73))
Ver solución

1,0 y 2,92. Lineal: el 25 % de 4 es 1, el 73 % es 2,92.

Ejercicio 3: F empírica invierte sola

Con datos [2,5,2,7,2], construí F̂ y remuestreá 5000 valores invirtiéndola (elegir dato al azar). Compará la media.

Ver una posible respuesta
import random

random.seed(22)
datos = [2, 5, 2, 7, 2]
# Invertir la empírica = elegir índice uniforme.
remuestra = [random.choice(datos) for _ in range(5000)]
print("media datos:", sum(datos) / len(datos))
print("media remuestra:", round(sum(remuestra) / len(remuestra), 3))

Media datos = 3,6; remuestra ≈ 3,6. random.choice es exactamente Q̂(U) sobre la escalera empírica.

09 · Síntesis

Ideas para recordar

  • F(x) = P(X ≤ x) sube de 0 a 1 y da cualquier intervalo por resta.
  • Saltos = masa discreta; pendiente = densidad continua.
  • Q(u) = mín{x : F(x) ≥ u} es la inversa universal, lisa o escalonada.
  • F(X) ~ U y Q(U) ~ F: el puente en ambas direcciones.
  • El par (F, Q) se implementa y testea junto con ida y vuelta.

En el próximo tema usaremos ese puente como método estrella: la transformada inversa.