Números Pseudoaleatorios · Tema 09

Independencia

Que conocer el presente no regale el futuro: pares sin memoria, correlación cercana a cero y nubes que llenan el cuadrado sin formas.

01 · Punto de partida

Uniforme no alcanza: falta que no se copien

En el Tema 8 exigiste reparto justo. Pero hay secuencias uniformes e inútiles: 0,01, 0,02, 0,03… llena parejo y es totalmente predecible; 0,1, 0,9, 0,1, 0,9… promedia 0,5 y alterna como un reloj. Les falta la segunda exigencia: independencia.

Independencia significa que el pasado no ayuda a adivinar el futuro: saber u(n) no te dice nada de u(n+1). Sin ella, tus sorteos se encadenan y la simulación hereda memoria falsa.

  • ¿Qué diferencia hay entre «cada uno es uniforme» y «son independientes»?
  • ¿Cómo se ve la dependencia en pares consecutivos?
  • ¿Qué mide la correlación y qué no mide?
  • ¿Por qué las rachas no contradicen la independencia?

02 · Definición

Memoria cero, cuadrado lleno

◈

Sin memoria

Ni rachas obligadas ni alternancia obligada: después de 5 subidas puede venir otra subida con la misma chance.

⇄

Pares uniformes

Si tomás (u₀,u₁), (u₁,u₂), …, cada cuadrante del cuadrado debe recibir ~1/4. Es uniformidad en 2D.

▣

Correlación ≈ 0

La correlación lag-1 mide dependencia lineal: sana ronda 0; +1 es copia, −1 es espejo. No detecta todo, pero delata lo grosero.

Tres secuencias uniformes, solo una independiente.
Secuencia¿Uniforme?¿Independiente?
PRNG buenoSíSí (nube informe)
0,01, 0,02, … ordenadoSíNo (diagonal perfecta)
0,1, 0,9, 0,1, 0,9…Sí (media 0,5)No (alterna siempre)

03 · Cómo mirarla

Tres miradas que no perdonan

Nube de pares
Graficá x = u(n), y = u(n+1): lo sano llena sin formas; diagonal, rejilla o bandas = dependencia.
Correlación lag-1 y lag-k
Medí dependencia lineal con el vecino y con el de k pasos. Sana ≈ 0 en todos los lags, no solo el 1.
Rachas arriba/abajo
Contá subidas y bajadas: ni alternancia perfecta ni escalera eterna. Las rachas moderadas son sanas; las extremas delatan.

Independiente

Nube aburrida

Puntos que cubren parejo, correlación 0, rachas mezcladas cortas y largas sin patrón.

Dependiente

Nube con dibujo

Diagonal, bandas paralelas o cuadrícula: el ojo la ve en 2 segundos y el test la confirma.

04 · Ejemplos

Los sospechosos habituales

Secuencia u(n)→Pares (u(n),u(n+1))→Nube
  1. 1
    Ordenada.

    0,01, 0,02, …: nube = diagonal perfecta, corr ≈ +1. Uniforme y totalmente predecible.

  2. 2
    Arrastrada.

    u(n+1) = (u(n)+0,3) mod 1: bandas diagonales paralelas, corr alta. Típica de malos incrementos.

  3. 3
    Alternada.

    0,1, 0,9, …: solo dos puntos en la nube, corr ≈ −1. El espejo perfecto.

  4. 4
    Sana.

    PRNG bueno: nube que llena, corr ≈ 0, rachas naturales de 2–6 sin orden.

05 · Cómputo en Python

Correlación y cuadrantes en 20 líneas

Dos chequeos que usarás hasta el Tema 32: corr lag-1 y reparto de pares por cuadrantes.

Python en tu navegador. Compará el sano de random con el arrastrado didáctico.

import random

def corr_lag1(v):
    m = sum(v) / len(v)
    num = sum((v[i] - m) * (v[i + 1] - m) for i in range(len(v) - 1))
    den = sum((x - m) ** 2 for x in v)
    return num / den


random.seed(21)
sano = [random.random() for _ in range(2000)]
print("sano:", round(corr_lag1(sano), 4))

Sano con N = 2000: entre −0,06 y +0,06 es normal. Fuera de ±0,15, sospechá.

Cuadrantes de pares

Cada cuadrante del cuadrado espera ~25 % de los pares:

arr = []
x = 0.1
for _ in range(2000):
    x = (x + 0.3) % 1.0
    arr.append(x)

cuad = [0, 0, 0, 0]
for a, b in zip(arr, arr[1:]):
    cuad[(a >= 0.5) * 2 + (b >= 0.5)] += 1
print("arrastrado por cuadrante:", cuad)

06 · Exploración

Laboratorio: la nube delata

Elegí la fuente y N. Cada punto es un par (u(n), u(n+1)). El panel da correlación lag-1 y reparto por cuadrantes (ideal 25 % cada uno).

EXPERIMENTO 09

Pares sin memoria

(u(n), u(n+1)) en [0,1)²

Los resultados numéricos aparecen debajo.
Corr lag-1—
Cuadrante menor—
Cuadrante mayor—
Veredicto—

El sano llena; el arrastrado dibuja bandas.

Nube pareja = independencia aparente. Diagonal, bandas o dos puntos = dependencia grosera.

Preguntas para explorar

  1. Con arrastrado, ¿qué forma ves? ¿La correlación es positiva o negativa?
  2. Con alternado, ¿cuántos puntos distintos hay? ¿Qué cuadrantes quedan vacíos?
  3. Con sano y N = 1500, ¿algún cuadrante se escapa mucho de 25 %? ¿Y con N = 100?
Ver respuestas sugeridas
  1. Bandas diagonales paralelas y corr positiva alta: saber u(n) acota mucho u(n+1).
  2. Solo 2 puntos que se alternan; dos cuadrantes en cero. Corr ≈ −1: espejo total.
  3. Con N grande, 23–27 % por cuadrante es normal; con N = 100 el ruido es mayor y no juzgues.

07 · Comprensión

Confusiones frecuentes

«Hay una racha de 6, no es independiente»

Al revés: en 1000 valores independientes debe haber rachas de 5–7. Lo raro sería no ver ninguna: alternancia perfecta es dependencia.

«Corr 0 = independencia probada»

Corr solo mide lo lineal. Hay dependencias con corr 0 (por ejemplo, en forma de U). Se exige nube + varios lags + tests.

«Mezclo la salida y arreglo la correlación»

Barajar a mano rompe el orden que debés evaluar y esconde el defecto en vez de curarlo. Se cambia de generador, no se maquilla.

«Uniforme implica independiente»

Son ortogonales: la ordenada es uniforme y dependiente total. Se prueban por separado (Temas 27–28).

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: el arrastrado

Generá el arrastrado +0,3 mod 1 y medí su corr. ¿Supera 0,5?

def corr(v):
    m = sum(v) / len(v)
    num = sum((v[i] - m) * (v[i + 1] - m) for i in range(len(v) - 1))
    return num / sum((x - m) ** 2 for x in v)


x = 0.1
arr = []
for _ in range(2000):
    x = (x + 0.3) % 1.0
    arr.append(x)
print(round(corr(arr), 4))
Ver solución razonada

Sí, ampliamente (típico 0,7–0,9 según N y arranque). Con ese número, ningún sorteo encadenado es creíble.

Ejercicio 2: cuadrantes del sano

Contá pares por cuadrante con random y N = 4000. ¿Alguno se escapa de 22–28 %?

import random

random.seed(21)
v = [random.random() for _ in range(4000)]
cuad = [0, 0, 0, 0]
for a, b in zip(v, v[1:]):
    cuad[(a >= 0.5) * 2 + (b >= 0.5)] += 1
print(cuad)
print([round(c / (len(v) - 1), 4) for c in cuad])
Ver solución

Todos deben rondar 0,25. Un 0,35 repetido en un cuadrante con N = 4000 ya es bandera roja de dependencia.

Ejercicio 3: rachas arriba/abajo

Contá rachas de subidas consecutivas en una secuencia sana. ¿Hay rachas de 5+? ¿Contradice independencia?

Ver una posible respuesta
import random

random.seed(21)
v = [random.random() for _ in range(500)]
rachas, actual = [], 1
for i in range(1, len(v)):
    if v[i] > v[i - 1]:
        actual += 1
    else:
        rachas.append(actual)
        actual = 1
print("racha máxima de subidas:", max(rachas))

Sí, verás 6–8. No contradice: la independencia permite rachas; la dependencia las obliga. Esa es la diferencia.

09 · Síntesis

Ideas para recordar

  • Independencia = el pasado no ayuda a predecir; pares uniformes en el cuadrado.
  • Nube con forma (diagonal, bandas, puntos) = dependencia grosera.
  • Corr lag-1 ≈ 0 es necesario pero no suficiente; se miran varios lags.
  • Las rachas moderadas son sanas; la alternancia perfecta es dependencia.
  • Uniforme e independiente son ortogonales: se prueban por separado.

En el próximo tema veremos la tercera exigencia: el período de un generador, o por qué toda secuencia calculada está condenada a repetirse.