Path: blob/master/site/pt-br/probability/examples/Gaussian_Copula.ipynb
38627 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.
Veja em TensorFlow.org
Executar no Google Colab
Ver fonte em GitHub
Baixar notebook