Generación de Variables Aleatorias · Tema 19

Generación binomial

Contar éxitos en n ensayos: suma de Bernoullis e inversión por CDF, con media np y varianza np(1−p).

01 · Punto de partida

Contar cuántos sí en n intentos

¿Cuántos clientes compran de 20 que entran? ¿Cuántas piezas fallan en un lote de 50? ¿Cuántos aciertos en 10 preguntas con prob. p cada una? Todos son Binomial(n,p): n ensayos Bernoulli independientes con la misma p, contando éxitos.

Es el puente natural entre la Bernoulli del Tema 16 y la Poisson del Tema 20: sumar ceros y unos ya genera una distribución rica, con forma que va del sesgo a la campana.

  • ¿Por qué sumar n Bernoullis ya es un generador exacto?
  • ¿Qué forma tiene Bin(n,p) si p es chico, 0,5 o grande?
  • ¿Cuándo conviene inversión por CDF en vez de suma?
  • ¿Qué media y varianza debe reproducir la muestra?

02 · Definición

Masa, media y dispersión del conteo

Soporte {0,1,…,n}. E[X] = np, Var(X) = np(1−p). Con p = 0,5 es simétrica; con p chico se carga a la izquierda; con p grande, a la derecha. Cada k cuenta C(n,k) ordenamientos con igual probabilidad p^k(1−p)^(n−k).

ΣB

Suma exacta

n umbrales Uᵢ < p sumados. Sin aproximación: la única fuente de error es el N finito de la muestra.

▥

Forma que migra

p = 0,5 ⇒ campana simétrica. p → 0 ⇒ cola derecha. p → 1 ⇒ espejo. La varianza se maximiza en p = 0,5.

∑F

CDF en escalera

F(k) = Σⱼ≤ₖ P(X=j). Invertirla con un solo U es la alternativa O(n) en masa cuando n es grande.

La misma n, distinta p: misma receta, distinta forma.
CasoMedia npVarianzaLectura
Bin(10; 0,1)1,00,90Sesgada a 0–2, cola derecha
Bin(10; 0,5)5,02,50Simétrica, campana discreta
Bin(10; 0,9)9,00,90Espejo: masa en 8–10

03 · Anatomía

Suma, inversión y recurrencia

Suma de Bernoullis O(n)
Contar cuántos Uᵢ < p en n ensayos. Gasta n uniformes por muestra. Ideal si n ≤ 30 o si ya necesitás los ensayos individuales.
Inversión por CDF O(n)
Un solo U comparado contra F(0), F(1), … acumulando masa. Gasta 1 uniforme pero recorre k valores. Base del Tema 2 aplicada a Bin(n,p).
Recurrencia de la masa
P(0) = (1−p)^n y P(k+1) = P(k)·(n−k)/(k+1)·p/(1−p). Evita factoriales que desbordan y alimenta la inversión sin combinatorios directos.
n grande / p chica
Con n = 1000 y p = 0,002 la suma gasta 1000 U por muestra: conviene Poisson(np) como aproximación (Tema 20) o normal si np(1−p) es grande (Tema 23).

Suma directa

Clara y reutilizable

Devuelve el conteo y los ensayos. La opción por defecto para enseñar y para n chica.

Inversión / recursiva

Ahorra uniformes

Un U por muestra y tabla de masa precomputada. Mejor cuando n es grande y solo importa el total.

04 · Dónde cuenta la binomial

Del ensayo al lote

Bernoulli×n→conteo k→Bin(n,p)
  1. 1
    Calidad y lotes.

    Defectuosas en un lote de n con prob. p por unidad: plan de muestreo y aceptación.

  2. 2
    Encuestas y conversión.

    Compradores entre n visitantes, aciertos en n preguntas, clics en n impresiones.

  3. 3
    Puente a geométrica y negativa.

    Bin(n,p) fija n y cuenta éxitos; la geométrica fija 1 éxito y cuenta espera; la binomial negativa espera r éxitos. (Temas 18, 26)

  4. 4
    Puente a Poisson y normal.

    Con n grande y p chica ⇒ Poisson(np); con np(1−p) grande ⇒ campana normal. (Temas 20, 23)

05 · Representación en Python

Suma e inversión cara a cara

Mismos n y p: la suma gasta n uniformes, la inversión uno solo con tabla precomputada por recurrencia.

Python en tu navegador. Subí n a 30 con p = 0,5: la media debe ir a 15.

import random

random.seed(150)
n, p, N = 10, 0.3, 8000

def binomial_suma(n, p):
    return sum(1 for _ in range(n) if random.random() < p)

# Tabla de masa por recurrencia (una sola vez)
masa = [0.0] * (n + 1)
masa[0] = (1 - p) ** n
for k in range(n):
    masa[k + 1] = masa[k] * (n - k) / (k + 1) * p / (1 - p)

def binomial_inv():
    u = random.random()
    acum = 0.0
    for k, pk in enumerate(masa):
        acum += pk
        if u < acum:
            return k
    return n

m1 = [binomial_suma(n, p) for _ in range(N)]
m2 = [binomial_inv() for _ in range(N)]
print("suma media:", round(sum(m1) / N, 3), "teórica:", n * p)
print("inv. media:", round(sum(m2) / N, 3), "teórica:", n * p)
print("P(X=0):", round(m1.count(0) / N, 3), "vs", round((1 - p) ** n, 3))

Media ≈ 3,0 y P(X=0) ≈ 0,028. Ambas funciones deben coincidir en distribución: si difieren, revisá la tabla acumulada.

06 · Exploración

Laboratorio: del sesgo a la campana

Movete n y p con N fijo. Las barras son frecuencia de k = 0…n; los rombos, C(n,k)p^k(1−p)^(n−k). Con p = 0,5 ves campana; con p = 0,1, sesgo a la izquierda.

EXPERIMENTO 19

Binomial por suma

X = Σ 1{Uᵢ < p}, i = 1…n

Los resultados numéricos aparecen debajo.
Media muestral3,000
Teórica n·p3,000
Var. muestral2,100
Teórica np(1−p)2,100

Con n 10, p 0,3 y N 5000, media 3,0.

Barras 0…n vs rombos teóricos. Probá n = 20 con p = 0,5 (campana) y p = 0,1 (sesgo).

Preguntas para explorar

  1. Con n = 10 y p = 0,3, ¿media y varianza teóricas? Leelas en el panel.
  2. Dejá n = 10 y llevá p a 0,5. ¿La forma se simetriza? ¿La varianza sube a 2,5?
  3. Subí n a 30 con p = 0,1. ¿La media va a 3 pero con más barras activas?
Ver respuestas sugeridas
  1. Media 3,0 y varianza 2,1.
  2. Sí: Bin(10; 0,5) es simétrica y np(1−p) = 2,5, la máxima para ese n.
  3. Sí: media 3,0 igual, pero el soporte se estira a 0…30 y la masa se reparte en más k.

07 · Comprensión

Confusiones frecuentes

«Bin(n,p) es n veces una Bernoulli»

Es la suma de n Bernoullis, no el producto ni n·B₁. Multiplicar un solo ensayo por n solo da {0, n}, no el conteo 0…n.

«Los ensayos pueden tener distinta p»

Entonces no es binomial sino Poisson-binomial: la masa C(n,k)p^k(1−p)^(n−k) exige la misma p e independencia.

«Uso factoriales para C(n,k)»

Desborda rápido y pierde precisión. Usar recurrencia P(k+1)/P(k) o math.comb con escala logarítmica.

«Con N = 200 ya valido la cola»

Las colas (ej. P(X=0) = 0,028) necesitan miles de réplicas: con N chico la cola observada es 0 por azar, no por bug.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: lote con defectos

Lote n = 20, p = 0,1 por unidad, N = 8000 (semilla 151): estimá media (≈ 2) y P(0 defectos) (≈ 0,9^20 ≈ 0,122).

import random

random.seed(151)
n, p, N = 20, 0.1, 8000
m = [sum(1 for _ in range(n) if random.random() < p) for _ in range(N)]
print(round(sum(m) / N, 3), "vs", n * p)
print(round(m.count(0) / N, 3), "vs", round((1 - p) ** n, 3))
Ver solución razonada

≈ 2,0 y ≈ 0,12 (típicamente 1,9–2,1). Si la media da ≈ 4, estás contando con p = 0,2 o n = 40.

Ejercicio 2: simetría en p = 0,5

Con n = 12, p = 0,5 y N = 8000, verificá que P(X=k) = P(X=12−k) en la muestra (ej. k = 3 vs 9).

import random

random.seed(152)
n, p, N = 12, 0.5, 8000
m = [sum(1 for _ in range(n) if random.random() < p) for _ in range(N)]
for k in [3, 4, 5]:
    print(k, round(m.count(k) / N, 3), "vs", round(m.count(n - k) / N, 3))
Ver solución

Pares ≈ iguales (ej. 0,054 vs 0,054): la simetría se ve salvo ruido Monte Carlo de ±0,01 con este N.

Ejercicio 3: costo suma vs inversión

Con n = 100 y p = 0,3, contá uniformes por muestra de cada método. La suma gasta 100; la inversión, 1.

Ver una posible respuesta
import random

random.seed(153)
n, p, N = 100, 0.3, 2000
usados_suma = n * N
masa = [(1 - p) ** n]
for k in range(n):
    masa.append(masa[-1] * (n - k) / (k + 1) * p / (1 - p))
usados_inv = N
print("U por muestra suma:", usados_suma // N, "vs inv:", usados_inv // N)
m = [sum(1 for _ in range(n) if random.random() < p) for _ in range(500)]
print("media (500):", round(sum(m) / len(m), 2), "vs 30.0")

100 U contra 1 U por muestra, igual distribución. Con n = 1000 la diferencia decide el método.

09 · Síntesis

Ideas para recordar

  • Bin(n,p) = suma de n Bernoulli(p): P(X=k) = C(n,k)p^k(1−p)^(n−k).
  • Media np, varianza np(1−p), máxima en p = 0,5.
  • Suma O(n) en uniformes; inversión O(n) en recorrido con 1 uniforme.
  • Recurrencia evita factoriales que desbordan.
  • Puente a geométrica (espera), Poisson (n grande, p chica) y normal (campana).

En el próximo tema dejamos n fijo y contamos eventos en el tiempo: la Poisson.