Método da transformação inversa

O método de transformação inversa (também conhecida como amostragem de inversão, transformada integral de probabilidade inversa, amostragem de transformação inversa ou transformada de Smirnov) é um método básico para amostragem de números pseudoaleatórios, ou seja, para gerar números de amostra aleatoriamente a partir de qualquer distribuição de probabilidade dada sua função de distribuição acumulada (FDA).

O método da transformação inversa pega amostras uniformes de um número entre 0 e 1, interpretadas como uma probabilidade, retornando o menor número tal que para a função de FDA de uma variável aleatória. Por exemplo, imagine que é a distribuição normal padrão com média zero e desvio padrão um. A tabela abaixo mostra amostras retiradas da distribuição uniforme e sua representação na distribuição normal padrão.

Transformação de amostra uniforme para normal
.5 0
.975 1.95996
.995 2,5758
.999999 4.75342
1-2 −52 8.12589
Gráfico do método da transformação inversa para distribuição normal

Estamos escolhendo aleatoriamente uma proporção da área sob a curva e retornando o número no domínio de forma que exatamente essa proporção da área ocorra à esquerda desse número. Intuitivamente, é improvável que escolhamos um número próximo às caudas da função porque há uma quantidade mínima de área nelas que exigiria a escolha de um número demasiado próximo do zero ou do um.

Computacionalmente, esse método envolve calcular a função quantil da distribuição — em outras palavras, calcular a função de distribuição acumulada (FDA) da distribuição (que mapeia um número no domínio para uma probabilidade entre 0 e 1) e então inverter essa função. Esta é a origem do termo "inverso" ou "inversão" na maioria dos nomes alternativos deste método. Observe que, para uma distribuição discreta, calcular a FDA não é, em geral, muito difícil: simplesmente somamos as probabilidades individuais para os vários pontos da distribuição. Para uma distribuição contínua, no entanto, precisamos integrar a função de densidade de probabilidade (FDP) da distribuição, o que é impossível de fazer analiticamente para a maioria das distribuições (incluindo a distribuição normal). Como resultado, esse método pode ser computacionalmente ineficiente para muitas distribuições e outros métodos são utilizados no lugar; no entanto, é um método útil para construir amostradores de aplicação mais aplicáveis na geralidade, como os baseados em amostragem de rejeição.

Para a distribuição normal, a falta de uma expressão analítica para a função quantil correspondente significa que outros métodos (por exemplo, a transformada de Box-Muller) podem ser preferidos computacionalmente. Muitas vezes, mesmo para distribuições simples, o método da transformação inversa pode ser melhorado:[1] veja, por exemplo, o algoritmo zigurate e a amostragem de rejeição. Por outro lado, é possível aproximar a função quantil da distribuição normal com extrema precisão usando polinômios de grau moderado e, de fato, o método para fazer isso é rápido o suficiente que a amostragem por inversão seja agora o método padrão para amostragem de uma distribuição normal no pacote estatístico R.[2]

Definição formal

editar

Seja uma variável aleatória  , a variável aleatória   tem a mesma distribuição que  , onde   é o inverso generalizado da FDA   de   e   é uniforme em  .[3]

Para variáveis aleatórias contínuas, a transformação integral de probabilidade inversa é de fato o inverso da transformação integral de probabilidade, que afirma que para uma variável aleatória contínua   com FDA  , a variável aleatória   é uniforme em  .

Intuição

editar

A partir de  , queremos gerar   com FDA   Nós consideramos   ser uma função contínua, estritamente crescente, o que proporciona boa intuição.

Procuramos encontrar alguma transformação estritamente monótona  , de modo que  . Nós teremos  onde o último passo usou   quando   tem distribuição uniforme em  .

Então nós obtemos   como função inversa de  , ou, equivalentemente  

Portanto, podemos gerar   de  

O método

editar
 
Gráfico da técnica de inversão de   para  . No canto inferior direito vemos a função regular e no canto superior esquerdo sua inversão
 
Esquema da amostragem por transformada inversa. A função inversa de   pode ser definida por  
 
Uma animação de como o método da transformação inversa gera valores aleatórios distribuídos normalmente a partir de valores aleatórios distribuídos uniformemente

O problema que o método da transformação inversa resolve é o seguinte:

O método da transformação inversa funciona da seguinte maneira:

  1. Gere um número aleatório   da distribuição uniforme padrão no intervalo  , ou seja, de  
  2. Encontre o inverso generalizado da FDA desejada, ou seja  .
  3. Calcule  . A variável aleatória computada   tem distribuição   e, portanto, o mesmo comportamento que  .

Dito de forma diferente, dada uma FDA   e uma variável uniforme  , a variável aleatória   possui a mesma distribuição  .[3]

No caso contínuo, um tratamento dessas funções inversas como objetos que satisfazem equações diferenciais pode ser feito.[4] Algumas dessas equações diferenciais admitem soluções explícitas em séries de potências, apesar de sua não linearidade.[5]

Exemplos

editar
  • Por exemplo, suponha que temos uma variável aleatória   e uma FDA
 
Para realizar uma inversão, queremos resolver para  
 
A partir daqui, executaríamos os passos um, dois e três, acima listados.
  • Como outro exemplo, usamos a distribuição exponencial com   para x ≥ 0 (e 0 caso contrário). Resolvendo y=F(x) obtemos a função inversa
 
Isso significa que se desenharmos alguns   de um   e calcular   Esse   tem distribuição exponencial.
A ideia é ilustrada no gráfico a seguir:
 
Os números aleatórios yi são gerados a partir de uma distribuição uniforme entre 0 e 1, ou seja, Y ~ U(0, 1). Eles são representados como pontos coloridos no eixo y. Cada um dos pontos é mapeado de acordo com x = F −1(y), que é mostrado com setas cinzas para dois pontos de exemplo. Neste exemplo, usamos uma distribuição exponencial. Portanto, para x ≥ 0, a densidade de probabilidade é   e a FDA é   . Portanto,  . Podemos ver que, usando esse método, muitos pontos acabam próximos de 0 e apenas alguns pontos acabam tendo valores de x altos - exatamente como é esperado para uma distribuição exponencial
Note que a distribuição não muda se começarmos com 1-y em vez de y. Para fins computacionais, portanto, é suficiente gerar números aleatórios y em [0, 1] e então simplesmente calcular
 

Prova de correção

editar

Seja   uma FDA e deixe   seja sua função inversa generalizada (usando o ínfimo porque os FDAs são fracamente monotônicas e contínuas à direita ):[6]

 

Alegação: Se   é uma v.a. uniforme em   então   tem   como sua FDA.

Prova:

 

Distribuição truncada

editar

O método da transformação inversa pode ser simplesmente estendido para casos de distribuições truncadas no intervalo   sem que seja necessário recorrer ao custo computacional de uma amostragem de rejeição: o mesmo algoritmo pode ser seguido, mas em vez de gerar um número aleatório   uniformemente distribuído entre 0 e 1, este gera   uniformemente distribuído entre   e  , e então seguir o roteiro novamente para obtenção de  .

Redução do número de inversões

editar

Para obter um grande número de amostras, é necessário realizar o mesmo número de inversões da distribuição. Uma maneira possível de reduzir o número de inversões e, ao mesmo tempo, obter um grande número de amostras é a aplicação do chamado amostrador de Monte Carlo de Colocação Estocástica (amostrador SCMC[7]) dentro de uma estrutura de expansão de caos polinomial. Isso nos permite gerar qualquer número de amostras de Monte Carlo, com custo computacional baixo, usando apenas algumas inversões da distribuição original a partir das amostras independentes de uma variável para as quais as inversões estão disponíveis de maneira analítica, como ocorre, por exemplo, no caso de uma variável normal padrão.[8]

Implementações em software

editar

Existem implementações em software disponíveis para aplicar o método de amostragem inversa usando aproximações numéricas do inverso no caso de não estar disponível em formato fechado. Por exemplo, uma aproximação da inversa pode ser calculada se o usuário fornecer alguma informação sobre as distribuições, como a FDP[9] ou a FDA.

Ver também

editar

Referências

  1. Luc Devroye (1986). Non-Uniform Random Variate Generation (PDF). New York: Springer-Verlag. Consultado em 12 de abril de 2012. Cópia arquivada (PDF) em 18 de agosto de 2014 
  2. «R: Random Number Generation» 
  3. a b McNeil, Alexander J.; Frey, Rüdiger; Embrechts, Paul (2005). Quantitative risk management. Col: Princeton Series in Finance. [S.l.]: Princeton University Press, Princeton, NJ. ISBN 0-691-12255-5 
  4. Steinbrecher, György; Shaw, William T. (19 de março de 2008). «Quantile mechanics». European Journal of Applied Mathematics. 19 (2). doi:10.1017/S0956792508007341 
  5. Arridge, Simon; Maass, Peter; Öktem, Ozan; Schönlieb, Carola-Bibiane (2019). «Solving inverse problems using data-driven models». Acta Numerica (em inglês). 28: 1–174. ISSN 0962-4929. doi:10.1017/S0962492919000059  
  6. Luc Devroye (1986). «Section 2.2. Inversion by numerical solution of F(X) = U». Non-Uniform Random Variate Generation. New York: Springer-Verlag 
  7. Grzelak, L.A.; Witteveen, J.A.S.; Oosterlee, C.W.; Suárez-Taboada, M. (2018). «The stochastic collocation Monte Carlo sampler: Highly efficient sampling from 'expensive' distributions». Quantitative Finance: 1–18. ISSN 1469-7688. doi:10.1080/14697688.2018.1459807. Consultado em 28 de agosto de 2024 
  8. L.A. Grzelak, J.A.S. Witteveen, M. Suarez, and C.W. Oosterlee. The stochastic collocation Monte Carlo sampler: Highly efficient sampling from “expensive” distributions. https://ssrn.com/abstract=2529691
  9. Derflinger, Gerhard; Hörmann, Wolfgang; Leydold, Josef (2010). «Random variate generation by numerical inversion when only the density is known» (PDF). ACM Transactions on Modeling and Computer Simulation. 20 (4). doi:10.1145/945511.945517 
  10. «UNU.RAN - Universal Non-Uniform RANdom number generators» 
  11. «Runuran: R Interface to the 'UNU.RAN' Random Variate Generators». 17 de janeiro de 2023 
  12. «Random Number Generators (Scipy.stats.sampling) — SciPy v1.12.0 Manual» 
  13. Baumgarten, Christoph; Patel, Tirth (2022). «Automatic random variate generation in Python». Proceedings of the 21st Python in Science Conference. [S.l.: s.n.] pp. 46–51. doi:10.25080/majora-212e5952-007