Generación de Variables Aleatorias · Tema 36

Datos vs teórica

QQ-plots, CDF empírica superpuesta y distancia KS: el ojo calibrado antes del test formal.

01 · Punto de partida

El generador declara; el gráfico verifica

Todo generador promete una F teórica. ¿Cumple? Antes de los p-valores del Tema 38, dos gráficos responden en segundos: la CDF empírica superpuesta a F y el QQ-plot (cuantiles muestrales vs teóricos). Si los puntos no siguen la recta y=x, ningún momento coincidente salva al generador.

La trampa que lo demuestra: una uniforme igualada en media y varianza a N(0,1) pasa los momentos y fracasa el QQ con forma de S.

  • ¿Cómo se construye un QQ-plot punto por punto?
  • ¿Qué forma delata colas pesadas, livianas o asimetría?
  • ¿Qué mide D = máx|Fₙ − F| y qué no dice?
  • ¿Por qué los momentos no alcanzan?

02 · Definición

Cuantiles, recta y distancia

El cuantil teórico qᵢ = F⁻¹((i−0,5)/N) es “lo que F espera en la posición i”; x_(i) es lo observado. D es la mayor distancia vertical entre escalera y curva. La correlación de los puntos QQ ≈ 1 si el ajuste es lineal.

q↔x

QQ-plot

Compara formas completas, no resúmenes: cada punto es un cuantil. Desvíos en extremos = problema de colas.

∩+⌜

CDF superpuesta

Escalera Fₙ sobre la curva F: el ojo estima D al instante y ve dónde (centro o colas) se separan.

D≈0

Distancia KS

Un número para la peor brecha: con N = 2000, D ≈ 0,02 es ruido y D ≈ 0,08 es sentencia. El p-valor queda para el Tema 38.

Formas del QQ normal: diagnóstico por curvatura.
QQ observadoD típicoDiagnóstico
Recta y = x≈ 0,02Ajuste: es N(0,1)
S acostada (⊃⊂)≈ 0,07Colas livianas: es uniforme igualada
Curva que se empina≈ 0,15+Asimetría: es exponencial, no normal

03 · Anatomía

Posiciones, colas y escalas

Posición (i−0,5)/N
Evita F⁻¹(0) = −∞ y F⁻¹(1) = +∞. Otras recetas (i/(N+1), Blom) cambian poco con N grande; fijar una y documentarla.
Colas mandan el juicio
El centro casi siempre calza; mirar primero los extremos del QQ. Con N = 200 hay ~1 punto más allá de ±2,5: no juzgar colas con cientos.
Tipificar antes
Comparar Z = (X−μ)/σ contra N(0,1) separa “forma mal” de “escala mal”: la pendiente del QQ estima σ y el intercepto, μ.
D sin p-valor todavía
D describe; el test decide con distribución nula y α (Tema 38). Un D = 0,05 con N = 100 es ruido y con N = 10000 es rechazo.

QQ + CDF + D

Juicio completo

Forma (QQ), ubicación de la brecha (CDF) y magnitud (D). Los tres juntos no dejan escondite.

Solo media y varianza

Ceguera garantizada

La uniforme igualada calza ambos momentos y es otra distribución: el QQ la desnuda en S.

04 · Dónde se mira así

Del gráfico al test

muestra→QQ + D→test 38
  1. 1
    Auditar generadores.

    Cada método del curso se acepta con su QQ antes de entrar a la biblioteca (Tema 41).

  2. 2
    Validar modelos.

    Residuos contra normal, tiempos contra exponencial: el QQ dice qué familia falla.

  3. 3
    Comparar candidatos.

    Weibull vs lognormal para los mismos datos: gana el QQ más recto.

  4. 4
    Puente al test formal.

    D, chi-cuadrado y rachas con regla de decisión. (Temas 37–38)

05 · Representación en Python

Normal real frente a impostora

N(0,1) genuina contra uniforme igualada en media y varianza: momentos idénticos, D y QQ opuestos.

Python en tu navegador. Bajá N a 200: el QQ genuino también baila en los extremos.

import random
import math

random.seed(320)
N = 2000
z = sorted(random.gauss(0, 1) for _ in range(N))
a = math.sqrt(3)
u = sorted(random.uniform(-a, a) for _ in range(N))
Phi = lambda t: 0.5*(1+math.erf(t/math.sqrt(2)))

def D(m):
    return max(abs((i+1)/N - Phi(x)) for i, x in enumerate(m))

mz = sum(z)/N
mu = sum(u)/N
print("medias:", round(mz, 3), round(mu, 3), "vars:",
      round(sum((x-mz)**2 for x in z)/N, 3), round(sum((x-mu)**2 for x in u)/N, 3))
print("D normal:", round(D(z), 3), "D impostora:", round(D(u), 3))

Momentos ≈ (0, 1) en ambas; D ≈ 0,02 vs ≈ 0,07. El número confirma lo que el QQ grita.

06 · Exploración

Laboratorio: la impostora dibuja una S

QQ contra N(0,1) con N fijo. La recta es y = x; los puntos, (cuantil teórico, observado). Activá la uniforme igualada y mirá la S: centro sobre la recta, colas que se acuestan.

EXPERIMENTO 36

QQ-plot normal

(Φ⁻¹((i−½)/N), x_(i)) vs y = x

Los resultados numéricos aparecen debajo.
D KS0,020
Corr QQ0,999
Media muestral0,000
Desvío muestral1,000

N(0,1) genuina con N 2000: recta y D ≈ 0,02.

Nube QQ en [−3,5; 3,5]² con identidad. Probá la impostora y N = 200.

Preguntas para explorar

  1. Genuina con N = 2000: ¿D ≈ 0,02 y corr QQ ≈ 0,999?
  2. Activá la impostora. ¿La S aparece? ¿D trepa a ≈ 0,07 con momentos intactos?
  3. Genuina con N = 200. ¿Los extremos bailan aunque D siga chico?
Ver respuestas sugeridas
  1. Sí: recta de punta a punta con ruido mínimo.
  2. Sí: colas livianas ⇒ extremos bajo la recta; media ≈ 0 y desvío ≈ 1 igual.
  3. Sí: 1–2 puntos extremos con varianza grande; el ojo se calibra con N grande.

07 · Comprensión

Confusiones frecuentes

«QQ recto = normalidad probada»

El QQ sugiere; el test (Tema 38) decide con α. Recto con N = 200 no distingue normal de t con 10 gl.

«D chico siempre absuelve»

D escala con 1/√N: 0,05 absuelve con N = 100 y condena con N = 10000. Informar siempre el N.

«La correlación QQ alta alcanza»

La impostora da corr ≈ 0,99+ y no es normal: la corr resume linealidad, no identidad con y = x.

«Comparo sin tipificar»

Sin tipificar, un σ ≠ 1 inclina el QQ y parece desajuste de forma. Tipificar primero, juzgar después.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: QQ genuino auditado

N(0,1), N = 3000 (semilla 321): D < 0,035 y corr QQ > 0,999.

import random
import math

random.seed(321)
N = 3000
m = sorted(random.gauss(0, 1) for _ in range(N))
Phi = lambda t: 0.5*(1+math.erf(t/math.sqrt(2)))
D = max(abs((i+1)/N - Phi(x)) for i, x in enumerate(m))
print("D:", round(D, 4))
Ver solución razonada

≈ 0,015–0,025. Si D > 0,05 con N = 3000, el generador no es N(0,1).

Ejercicio 2: cazar la S impostora

Uniforme ±√3, N = 3000: momentos ≈ (0,1) pero D ≈ 0,06–0,08 y extremos bajo la recta.

import random
import math

random.seed(322)
N, a = 3000, math.sqrt(3)
m = sorted(random.uniform(-a, a) for _ in range(N))
Phi = lambda t: 0.5*(1+math.erf(t/math.sqrt(2)))
D = max(abs((i+1)/N - Phi(x)) for i, x in enumerate(m))
media = sum(m)/N
print("media/var:", round(media, 3), round(sum((x-media)**2 for x in m)/N, 3))
print("D:", round(D, 3))
Ver solución

Momentos ≈ (0, 1) y D ≈ 0,07: la condena viene del QQ en S, no de los momentos.

Ejercicio 3: exponencial que se empina

Exp(1) tipificada contra QQ normal, N = 3000: la curva se empina a la derecha (asimetría) con D ≈ 0,15+.

Ver una posible respuesta
import random
import math

random.seed(323)
N = 3000
m = sorted(-math.log(1-random.random()) for _ in range(N))
media = sum(m)/N
z = sorted((x-media)/media for x in m)
Phi = lambda t: 0.5*(1+math.erf(t/math.sqrt(2)))
print("D:", round(max(abs((i+1)/N - Phi(x)) for i, x in enumerate(z)), 3))

D ≈ 0,16: cola derecha pesada ⇒ puntos altos sobre la recta. Asimetría inconfundible.

09 · Síntesis

Ideas para recordar

  • QQ (cuantiles vs teóricos): la forma completa en una recta.
  • CDF superpuesta: dónde se abre la brecha.
  • D = máx|Fₙ−F|: magnitud, siempre con N.
  • Momentos iguales ≠ misma distribución.
  • Tipificar antes de juzgar forma.

En el próximo tema el otro ojo: histogramas frente a la teórica.