Path: blob/master/site/es-419/probability/examples/Gaussian_Copula.ipynb
25118 views
Copyright 2018 The TensorFlow Probability Authors.
Licensed under the Apache License, Version 2.0 (the "License");
Introducción a las cópulas
Una [cópula](https://en.wikipedia.org/wiki/Copula_(probability_theory)) es un enfoque clásico para capturar la dependencia entre variables aleatorias. Más formalmente, una cópula es una distribución multivariada tal que al marginar se obtiene .
Las cópulas son interesantes porque podemos usarlas para crear distribuciones multivariadas con marginales arbitrarios. Estos son los pasos a seguir:
El uso de la transformación integral de probabilidad convierte una RV continua arbitraria en una uniforme , donde es el CDF de .
Dada una cópula (digamos bivariada) , tenemos que y tienen distribuciones marginales uniformes.
Ahora, dadas nuestras RV de interés , cree una nueva distribución . Los marginales para y son los que deseábamos.
Los marginales son univariados y por lo tanto pueden ser más fáciles de medir y/o modelar. Una cópula permite partir de marginales, pero también lograr una correlación arbitraria entre dimensiones.
Cópula gaussiana
Para ilustrar cómo se construyen las cópulas, consideremos el caso de capturar la dependencia según correlaciones gaussianas multivariadas. Una cópula gaussiana es aquella dada por donde representa la CDF de un MultivariateNormal, con covarianza y media 0, y es la CDF inversa de la normal estándar.
La aplicación de la CDF inversa de la normal deforma las dimensiones uniformes para que se distribuyan normalmente. La aplicación de la CDF de la normal multivariada luego aplasta la distribución para que sea marginalmente uniforme y con correlaciones gaussianas.
De este modo, lo que obtenemos es que la cópula gaussiana es una distribución sobre el hipercubo unitario con marginales uniformes.
Definida como tal, la cópula gaussiana se puede implementar con tfd.TransformedDistribution
y Bijector
apropiados. Es decir, estamos transformando una MultivariateNormal, mediante el uso de la CDF inversa de la distribución normal, implementada por el biyector tfb.NormalCDF
.
A continuación, implementamos una cópula gaussiana con una suposición simplificadora: que la covarianza e parametriza mediante un factor de Cholesky (de ahí una covarianza para MultivariateNormalTriL
). (Se podrían usar otros tf.linalg.LinearOperators
para codificar diferentes suposiciones sin matrices).
Sin embargo, el poder de tal modelo es usar la Transformada Integral de Probabilidad, para usar la cópula en RV arbitrarias. De esta manera, podemos especificar marginales arbitrarios y usar la cópula para unirlos.
Empezamos con un modelo:
y usamos la cópula para obtener una RV bivariada, que tiene marginales Kumaraswamy y Gumbel.
Para empezar, trazaremos la distribución de productos generada por esas dos variables aleatorias. Esto es solo para que sirva como punto de comparación cuando aplicamos la cópula.
Distribución conjunta con diferentes marginales
Ahora usamos una cópula gaussiana para unir las distribuciones y trazarla. Nuevamente, nuestra herramienta preferida es TransformedDistribution
y aplicamos el Bijector
apropiado para obtener los marginales elegidos.
Específicamente, utilizamos un biyector Blockwise
que aplica diferentes biyectores en diferentes partes del vector (que sigue siendo una transformación biyectiva).
Ahora podemos definir la cópula que queremos. Dada una lista de marginales objetivo (codificados como biyectores), podemos construir fácilmente una nueva distribución que use la cópula y tenga los marginales especificados.
Finalmente, usemos esta cópula gaussiana. Usaremos un factor de Cholesky de , que corresponderá a las varianzas 1 y la correlación para la normal multivariada.
Veremos algunos casos:
Finalmente, verifiquemos que realmente obtengamos los marginales que queremos.
Conclusión
¡Y ahí está! Hemos demostrado que podemos construir cópulas gaussianas mediante el uso de la API Bijector
.
De manera más general, escribir biyectores con la API Bijector
y componerlos con una distribución puede crear complejas familias de distribuciones para un modelado flexible.