Path: blob/master/site/pt-br/probability/examples/Gaussian_Copula.ipynb
25118 views
Copyright 2018 The TensorFlow Probability Authors.
Licensed under the Apache License, Version 2.0 (the "License");
Guia sobre cópulas
Uma [cópula](https://pt.wikipedia.org/wiki/Cópula_(estatística) é uma estratégia básica para obter a dependência entre variáveis aleatórias. Mais formalmente, uma cópula é uma distribuição multivariada em que a marginalização fornece .
As cópulas são interessantes porque podemos usá-las para criar distribuições multivariadas com distribuições marginais arbitrárias. Esta é a receita:
Usar a Transformação Integral da Probabilidade transforma uma variável aleatória contínua arbitrária em outra uniforme , em que é a função de distribuição acumulada (CDF, na sigla em inglês) de .
Dada uma cópula (bivariada, digamos) , e têm distribuições marginais uniformes.
Agora, dadas nossas variáveis aleatórias de interesse , crie uma nova distribuição . As distribuições marginais para e são as que desejamos.
As distribuições marginais são univariadas e, portanto, podem ser mais fáceis de mensurar e/ou modelar. Uma cópula permite começar pelas distribuições marginais, mas ainda assim obter a correlação arbitrária dentre as dimensões.
Cópula gaussiana
Para ilustrar como as cópulas são construídas, considere o caso de obter a dependência segundo as correlações gaussianas multivariadas. Uma cópula gaussiana é aquela fornecida por , em que representa a função de distribuição acumulada de uma distribuição normal multivariada (MultivariateNormal), com covariância e média 0, e é a função de distribuição acumulada inversa para a distribuição normal padrão.
Aplicar a CDF inversa da distribuição normal deforma as dimensões uniformes de modo a terem distribuição normal. Em seguida, aplicar a CDF da distribuição normal multivariada espreme a distribuição de forma a se tornar uniforme marginalmente e com correlações gaussianas.
Portanto, a cópula gaussiana é uma distribuição ao longo do hipercubo unitário com distribuições marginais uniformes.
Definida desta forma, a cópula gaussiana pode ser implementada com tfd.TransformedDistribution
e um Bijector
apropriado. Ou seja, estamos transformando uma distribuição normal multivariada pelo uso da CDF inversa da distribuição normal, implementada pelo bijetor tfb.NormalCDF
.
Abaixo, implementamos uma cópula gaussiana com uma suposição simplificadora: que a covariância é parametrizada por um fator de Cholesky (portanto, uma covariância de MultivariateNormalTriL
). Também é possível usar outros tf.linalg.LinearOperators
para codificar diferentes suposições sem matrizes.
Portanto, o poder de um modelo como esse é usar a Transformação Integral da Probabilidade para utilizar a cópula em variáveis aleatórias arbitrárias. Dessa forma, podemos especificar distribuições marginais arbitrárias e usar a cópula para uni-las.
Começamos com o seguinte modelo:
E depois usamos a cópula para obter uma variável aleatória bivariada , que tem distribuições marginais Kumaraswamy e Gumbel.
Vamos começar plotando a distribuição do produto gerada por essas duas variáveis aleatórias apenas para servir como ponto de comparação quando aplicarmos a cópula.
Distribuição conjunta com distribuições marginais diferentes
Agora, usamos uma cópula gaussiana para unir as distribuições e plotamos o resultado. Novamente, escolhemos a ferramenta TransformedDistribution
, aplicando o Bijector
adequado para obter as distribuições marginais escolhidas.
Especificamente, usamos o bijetor Blockwise
, que aplica diferentes bijetores em diferentes partes do vetor (isso ainda é uma transformação bijetora).
Agora, podemos definir a cópula que desejamos. Dada uma lista de distribuições marginais alvo (codificadas como bijetores), podemos construir facilmente uma nova distribuição que use a cópula e tenha as distribuições marginais especificadas.
Por fim, vamos usar a cópula gaussiana. Usaremos um Cholesky de , que corresponderá a variâncias 1 e correlação para a distribuição normal multivariada.
Vamos conferir alguns casos:
Por fim, vamos verificar se obtivemos as distribuições marginais que desejamos.
Conclusão
Pronto! Demonstramos que podemos criar cópulas gaussianas usando a API Bijector
.
De forma mais geral, ao escrever bijetores usando a API Bijector
e uni-los com uma distribuição, é possível criar famílias avançadas de distribuições, o que proporciona uma modelagem flexível.