Simulando variables aleatorias en SAS

Anuncio
Simulando variables aleatorias
en SAS
José Alberto Bonilla Vera
Copyright © 2014, SAS Institute Inc. All rights reserved.
Simulación
 Existen muchos problemas reales para los cuales es muy caro, muy difícil o inconveniente
modelar exactamente el fenómeno
 Simulación (en este contexto) significa generar números pseudoaleatorios con
características afines a una verdadera distribución aleatoria
 Es extremadamente útil (y utilizado) y las bases son sencillas
• Apuestas, modelos estadísticos, pronósticos, criptografía, generación de datos de prueba,
inteligencia artificial, videojuegos…
 Permite obtener un conocimiento integral de los diferentes escenarios posibles
Copyright © 2014, SAS Institute Inc. All rights reserved.
Generador de números (pseudo)aleatorios
 Es un dispositivo o programa computacional que genera números que parecen ser
aleatorios
• Tienen características afines a la “verdadera” aleatoriedad
 Varios tipos
• Objetos comunes (monedas, dados, pirinolas etc.)
• Dispositivos físicos (medición de ruido ambiental, decaimiento radiactivo, etc.)
• Generador pseudoaleatorio de software (en adelante, PRNG)
• Otros
− 
Copyright © 2014, SAS Institute Inc. All rights reserved.
PRNG
 Es un programa de software que toma como entrada una semilla y genera una secuencia
de números que parecen ser aleatorios (pero no lo son)
• De hecho, la secuencia es completamente determinística dada la semilla
− Esto de hecho es bueno para simulación estadística, no bueno para criptografía
 Semilla: valor inicial. Dada la semilla, la secuencia siempre es la misma.
 Periodo: longitud de una determinada secuencia antes de repetirse.
 0.4123,0.5155,0.9514,0.9615,0.1124,0.9595,0.5812,0.4145,0.8777…
 1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,…
 ¿Cómo evaluar si un PRNG es “suficientemente aleatorio”?
• Baterías de pruebas estadísticas basadas en propiedades de la distribución uniforme
− DIEHARD, TestU01, …
− Propiedades derivadas (paradoja de cumpleaños, repeticiones,
Copyright © 2014, SAS Institute Inc. All rights reserved.
PRNG (cont.)
 El primer PRNG se atribuye a John von Neumann (método de dígitos intermedios de
cuadrados)
• Toma un número de n dígitos
• Elévalo al cuadrado
• Toma los n dígitos intermedios
• Repite el proceso
 El generador de Von Neumann es muy malo (¿qué pasa si comienzas con 0000?)
Copyright © 2014, SAS Institute Inc. All rights reserved.
PRNG (cont.)
 Después, vinieron los generadores congruenciales lineales
• 𝑋𝑛+1 = 𝑎𝑋𝑛 + 𝑐 mod 𝑚 (parámetros < 𝑚)
• Altamente dependientes de la elección de parámetros
• El periodo de un GCL es a lo más, 𝑚; hay formas de elegir los parámetros para que el periodo
sea maximal
• Todavía muy usados (e.g. java.util.random)
• El saber la semilla identifica el estado del generador
• Hay buenos y malos (java.util.Random vs RANDU)Buenos para aplicaciones simples, pero no
tanto para simulaciones Montecarlo ni para aplicaciones criptográficas
− Por ejemplo, el Teorema de Marsaglia asevera que los puntos generados por un GCL de
módulo 𝑚 en un espacio de 𝑛 dimensiones caen en a lo más 𝑛! 𝑚
serial)
• RANXXX… en SAS es un generador congruencial lineal
Copyright © 2014, SAS Institute Inc. All rights reserved.
1
𝑛
hiperplanos (correlación
PRNG (cont.)
 Después, vinieron otros más sofisticados como Mersenne Twister
• El más utilizado hoy en día
• Periodo muy largo (219937 − 1)
• El saber la semilla no identifica el estado del generador (tiene un vector de estados de 624
posiciones)
• Excelentes propiedades, pasa las baterías de pruebas como Diehard
• No apto para aplicaciones criptográficas
 Existen varios PRNG que son criptográficamente seguros (CSPRNG)
• Idealmente, basado en hardware o procesos impredecibles
• Deben pasar las pruebas estadísticas de aleatoriedad
• Pero también debe ser imposible predecir números siguientes o anteriores incluso si se conoce
información del estado actual
• Por ejemplo Fortuna
Copyright © 2014, SAS Institute Inc. All rights reserved.
PRNG en SAS
 Existen dos principales conjuntos de funciones en SAS para PRNG:
• RANUNI / RANNOR / …
− GCL con periodo < 231
– ¡No es tan grande como parece!
• RAND (o CALL RANDGEN en IML)
− Mersenne Twister
 Los GCL RANUNI/RANNOR etc. no pasan tantas pruebas de aleatoriedad como RAND
 RAND tiene mejor manejo de valores de parámetros que se acercan a producir
distribuciones degeneradas
 La sintaxis es mucho más sencilla y uniforme
 Consecuentemente, usen RAND / CALL RANDGEN siempre
• Y sus funciones de probabilidad acumulada y cuantiles asociadas (CDF y QUANTILE)
 El resto de la presentación está enfocado a RAND (en paso DATA).
Copyright © 2014, SAS Institute Inc. All rights reserved.
Estableciendo la semilla
 Usar CALL STREAMINIT al inicio del paso DATA
• Si el parámetro es no positivo, la semilla se inicializa con el reloj de la computadora
• Si no, se inicializa con ese dato
 Si se llama RAND antes de CALL STREAMINIT, esa llamada hace referencia al generador
sembrado con el reloj de la computadora
 Únicamente se honra una llamada a CALL STREAMINIT por paso DATA
• Mersenne Twister no se puede “reinicializar” a la mitad con otro llamado de CALL STREAMINIT.
 Cada paso DATA es una instancia diferente del PRNG
 El valor de la semilla se guarda en la variable macro SYSRANDOM después de cada
ejecución de paso DATA
Copyright © 2014, SAS Institute Inc. All rights reserved.
Simulando una variable aleatoria uniforme continua
 La sintaxis es:
• x = RAND("UNIFORM");
 Si se ha establecido la semilla en una línea anterior del paso DATA, se genera el siguiente
número pseudoaleatorio de la secuencia definida por la semilla
 Si no se ha especificado semilla en ese paso DATA, entonces se genera utilizando el reloj
de la computadora
 Compárese con la sintaxis del generador antiguo:
• x = RANUNI(0);
Copyright © 2014, SAS Institute Inc. All rights reserved.
Simulando directamente con RAND
Distribución
Bernoulli
Beta
Sintaxis
RAND("BERNOULLI",p);
RAND("BETA",a,b);
Parámetros
p – Probabilidad de éxito [0,1]
a, b – Parámetros de forma [0, )
Binomial
Binomial Negativa
RAND("BINOMIAL",p,n);
RAND("NEGBINOMIAL",k,p);
p – Probabilidad de éxito [0,1]; n – Número de ensayos Bernoulli {1,2,…}
k – Número de éxitos deseados Bernoulli {1,2,…}; p – Probabilidad de éxito [0,1]
Cauchy
Erlang
Exponencial
RAND("CAUCHY");
RAND("ERLANG",k);
RAND("EXPONENTIAL");
N/A
k – Parámetro de forma {1,2,…}
N/A
F
Gama
Geométrica
RAND("F",n,d);
RAND("GAMMA",a);
RAND("GEOMETRIC",p);
Lognormal
Normal
Poisson
n – Grados de libertad del numerador {1,2,…}; d – Grados de libertad del denominador {1,2,…}
a – Parámetro de forma [0, )
p – Probabilidad de éxito [0,1]
RAND("HYPERGEOMETRIC",N,R,n); N – Tamaño de población {1,2,…}; R – Número de objetos de interés en la población {0,1,…,N}; n –
Tamaño de muestra {1,2,…,N}
RAND("CHISQUARE",df);
df – Número de grados de libertad (0, )
RAND("LOGNORMAL");
N/A
RAND("NORMAL",m,s);
m – Media (real); s – Desviación estándar (0, )
RAND("POISSON",m);
m – Razón promedio de ocurrencia de eventos
T (de Student)
Tabular
Triangular
RAND("T",df);
RAND("TABLE",p1,p2,…);
RAND("TRIANGLE",h);
df – Número de grados de libertad (0, )
p1, p2, … - Probabilidades de ocurrencia de cada valor 1,2,…
h – Abcisa en donde se localiza el vértice superior del triángulo [0,1
Uniforme Continua
Weibull
RAND("UNIFORM");
RAND("WEIBULL",a,b);
N/A
a – Parámetro de forma (0, ); b – Parámetro de escala (0, )
Hipergeométrica
Ji Cuadrada
Copyright © 2014, SAS Institute Inc. All rights reserved.
Simulando vía transformación
 Identificar transformación teórica
 Generar variable aleatoria base
 Realizar transformación teórica en las pseudoaleatorias generadas
 Ejemplos
• Generar una uniforme en 𝑎, 𝑏 mediante 𝑏 − 𝑎 𝑈 + 𝑎
• Si 𝑋 es una variable aleatoria estándar, entonces 𝑌 = 𝜃 + 𝜎𝑋 es una variable aleatoria
con localización 𝜃 y parámetro de escala 𝜎
− El parámetro de escala es el recíproco del parámetro de tasa/razón
• Generar una lognormal usando 𝑌 = 𝑒 𝑋 donde 𝑋~𝑁 𝜇, 𝜎 2
• Generar una Pareto usando 𝑌 = 𝑚 𝑒 𝑋 donde 𝑋~𝐸𝑥𝑝 𝜆
Copyright © 2014, SAS Institute Inc. All rights reserved.
Simulando mediante otros métodos
 Método de la distribución inversa
• Si 𝑋~𝐹 𝑥 y u~𝑈 0,1 entonces 𝑣 = 𝐹 −1 𝑢 ~𝐹 𝑥
• Por lo tanto:
− Simular un número pseudoaleatorio uniforme continuo
− Aplicar la inversa de la distribución acumulada a dicho número
– Directamente (forma cerrada de la inversa)
– Mediante métodos numéricos (por ejemplo la inversa de la normal)
• Ejemplo: Muestrear de la distribución empírica
 Método de aceptación-rechazo
• Encontrar una función t 𝑥 cota superior de la densidad deseada 𝑓 𝑥
• Generar uniformes y aceptarlas si 𝑢𝑡 𝑥 ≤ 𝑓 𝑥
• Mientras mejor ajusta la función, la probabilidad de rechazo es más baja
 Muchos otros métodos (Metropolis-Hastings, variables antitéticas…)
Copyright © 2014, SAS Institute Inc. All rights reserved.
Simulando de conjuntos finitos
 CALL RANPERM permite generar permutaciones de (valores de) n variables SAS
 CALL RANPERK genera permutaciones de tamaño k en un conjunto de n
 CALL ALLPERM permite iterar sobre todas las permutaciones de un conjunto n
 PROC SURVEYSELECT permite muestrear de un dataset
Copyright © 2014, SAS Institute Inc. All rights reserved.
Simulando distribuciones de estadísticas (Monte Carlo)
 Simular una muestra de una distribución de interés y computar alguna estadística muestral
 Repetir este proceso muchas veces
 Analizar la distribución de las estadísticas muestrales y generar inferencia sobre la misma
• Error estándar = desviación estándar de la distribución de la estadística
• Se pueden computar descriptivos, intervalos de confianza, etc.
 Poder responder preguntas del estilo ¿cuál es la probabilidad de que la estadística esté en
cierto rango?
Copyright © 2014, SAS Institute Inc. All rights reserved.
Funciones asociadas para las distribuciones estadísticas
 CDF computa el valor de la distribución acumulada de interés
 SDF computa el valor de la función de supervivencia
 PDF computa el valor de la función de masa o densidad de interés
 QUANTILE computa el percentil de la distribución deseada (función inversa de la
distribución)
Copyright © 2014, SAS Institute Inc. All rights reserved.
¿Cómo revisar si la simulación es adecuada?
 Revisar momentos muestrales vs momentos poblacionales
 Revisar la distribución empírica vs la distribución teórica
 Revisar el histograma empírico vs la densidad/función de masa teórica
 Realizar pruebas de bondad de ajuste
Copyright © 2014, SAS Institute Inc. All rights reserved.
Tips de eficiencia
 Identificar la muestra con un ID para poder usar procesamiento BY para procesar los
estadísticos por muestra en Monte Carlo (usando PROC)
 Desactivar notas y salidas innecesarias en el log (opciones de debug, etc.)
 Exportar log a disco
 Preferir procesamiento BY a ciclos de macros en este contexto (para Monte Carlo)
 Usar IML para estudios más complejos o intensivos de simulación
• IML permite simular muchas variables aleatorias con mejor performance que DATA y puede
trabajar en memoria (RAM)
• IML facilita enormemente simular de distribuciones multivariadas
• IML soporta vectorización (trabajo de operaciones en memoria aplicadas a matrices o vectores)
• IML soporta distribuciones adicionales
• El trabajo con matrices hace que IML pueda generar simulaciones Monte Carlo más fácilmente
Copyright © 2014, SAS Institute Inc. All rights reserved.
Workshop
1. Elegir aleatoriamente el número de créditos hipotecarios en un Banco con alguna
distribución de probabilidad adecuada (considerar al menos 1,000 créditos)
2. Modelar el saldo inicial de los créditos con alguna distribución de probabilidad adecuada y
justificar la elección.
3. Modelar el número de pagos vencidos mediante una distribución tabular con
probabilidades elegidas.
4. Simular el portafolio en el momento 𝑡0 en un dataset de SAS, generando un ID del crédito,
el saldo y el número de pagos vencidos.
5. Generar datasets para el portafolio en los periodos 𝑡1 − 𝑡12 mediante la aplicación de las
siguientes funciones (eligiendo b,f,h probabilidades de regreso, avance y permanencia de
pago vencido respectivamente y 𝛽, 𝛾 son variables aleatorias Gama con parámetros
adecuados)
• 𝑝𝑣𝑡+1
Copyright © 2014, SAS Institute Inc. All rights reserved.
max(0, 𝑝𝑣𝑡 − 1), 𝑐𝑜𝑛 𝑝𝑟𝑜𝑏𝑎𝑏𝑖𝑙𝑖𝑑𝑎𝑑 𝑏
𝑝𝑣𝑡 + 1, 𝑐𝑜𝑛 𝑝𝑟𝑜𝑏𝑎𝑏𝑖𝑙𝑖𝑑𝑎𝑑 𝑓
=
𝑝𝑣𝑡 , 𝑐𝑜𝑛 𝑝𝑟𝑜𝑏𝑎𝑏𝑖𝑙𝑖𝑑𝑎𝑑 ℎ
𝑆𝑡+1
𝛽𝑆𝑡 , 𝑐𝑜𝑛 𝑝𝑟𝑜𝑏𝑎𝑏𝑖𝑙𝑖𝑑𝑎𝑑 𝑏
= 𝛾𝑆𝑡 , 𝑐𝑜𝑛 𝑝𝑟𝑜𝑏𝑎𝑏𝑖𝑙𝑖𝑑𝑎𝑑 𝑓
𝑆𝑡 , 𝑐𝑜𝑛 𝑝𝑟𝑜𝑏𝑎𝑏𝑖𝑙𝑖𝑑𝑎𝑑 ℎ
Workshop
6. Calcular la probabilidad de incumplimiento y el saldo total incumplido de los créditos
vigentes en 𝑡0 que están vencidos en 𝑡12 . Utilice la definición de “vencido” de CNBV (4+
pagos vencidos).
7. Repetir el ejercicio 1,000 veces, generando los valores del punto 6 en cada iteración.
8. Utilizar un método Monte Carlo para computar la media y la desviación estándar de la
probabilidad de incumplimiento y del saldo total incumplido.
Para las simulaciones, utilizar una semilla aleatoria predeterminada almacenada en una
variable macro.
Copyright © 2014, SAS Institute Inc. All rights reserved.
Lectura recomendada
 Ross, S. (2012) Simulation. Academic Press, 328 pp.
 Wicklin, R. (2013) Simulating Data With SAS. SAS Institute, 364 pp.
 Wicklin, R. The DO Loop. En http://blogs.sas.com/content/iml/author/rickwicklin/,
consultado el 21 de agosto de 2014
 Bonilla, J (2004) Valuación de Proyectos de Inversión en Ambientes de Incertidumbre.
ITAM, 161 pp.
Copyright © 2014, SAS Institute Inc. All rights reserved.
Descargar