Motivação

Muitas distribuições podem ser geradas a partir de uma variável uniforme em \((0,1)\). O método da transformação inversa é um dos procedimentos mais importantes da simulação estatística baseado neste princípio.


Método da Transformação Inversa para V.A. Contínuas

Assim como no caso discreto, é possível gerar valores de uma v.a. contínua a partir de sua função de distribuição (acumulada).

Lembre-se que, se \(X\) é v.a. contínua com função de distribuição \(F_X\), então, \(F_X\) é uma função absolutamente contínua e, portanto, inversível.

O método da transformação inversa no caso contínuo é, portanto, baseado no inverso da função de distribuição, baseando-se no seguinte resultado teórico.

Proposição

Seja \(U\) uma variável aleatória contínua com distribuição uniforme no intervalo \((0, 1)\). Para qualquer função de distribuição contínua \(F\), cuja inversa é denotada por \(F^{-1}\), a variável aleatória \(X\) definida por \[X = F^{-1}(U)\] possui distribuição \(F\).

Demonstração:

Seja \(F_X\) a função de distribuição de \(X = F^{-1}(U)\). Então \[\begin{align} F_X(x) = P(X \le x) = P(F^{-1}(U) \le x) \end{align}\]

Agora, visto que \(F\) é função de distribuição de uma v.a. contínua, segue que \(F(x)\) é uma função monotonamente crescente de \(x\), e portanto a desigualdade “\(a \le b\)” é equivalente à desigualdade “\(F(a) \le F(b)\)”. Desse modo, segue que

\[\begin{align*} F_X(x) &= P(\;F(F^{-1}(U))\;) \le F(x)\} \\ &= P(U \le F(x)) \\ &= F_U(\;F(x)\;)\underbrace{=}_{\star} F(x) \end{align*}\] \(^\star\) uma vez que \(U \sim \text{U}(0,1) \Rightarrow F_U(u) = u, \;0<u<1 \quad\quad \square\).

A proposição acima garante que podemos gerar uma variável aleatória \(X\) a partir da função de distribuição contínua \(F\) gerando um número aleatório \(U\) e então definindo \(X = F^{-1}(U)\).

Observação

Robert e Casella (2024) definem, para uma função não decrescente \(F\) em \({\rm I\!R}\), a função inversa generalizada de \(F\), \(F^{-}\), dada por \[ F^{-}(u) = \inf\{x:\;F(x) \geq u\}. \]

Partindo desta definição, demonstram o lema a seguir, mais geral por não exigir a hipótese de continuidade de \(F\), incluindo o caso discreto, por exemplo.

Lema:

Se \(U \sim \text{U}(0,1)\), então a v.a. \(F^{-}(U)\) tem função de distribuição \(F\).

Algoritmo

  1. Gere um valor \(u\) de \(U \sim \text{U}(0,1)\).

  2. Tome \(x = F_X^{-1}(u)\).

Repita os passos 1 e 2 quantas vezes forem necessárias até obter a amostra do tamanho desejado.

Exemplo 1

Suponha que queremos gerar uma variável aleatória \(X\) que possui a função de distribuição \[F_X(x) = x^a, \quad 0 < x < 1.\] Utilize o Método da Transformação Inversa para obter uma amostra de \(X\).

Solução:

Se definirmos \(x = F_X^{-1}(u)\), então \[u = F(x) = x^n \quad \text{ou, equivalentemente,} \quad x = u^{1/a}.\]

Algoritmo 1

  1. Gere um valor \(u\) de \(U \sim \text{U}(0,1)\).

  2. Tome \(x = u^{1/n}\).

n = 1000
u = runif(n)

a = 5
x = u^{1/a}

hist(x,prob=TRUE,main="",ylab=expression(f[X](x)))

dens = function(x,a){
  a*x^(a-1)
}
curve(dens(x,a=a),add=T,col=2,lwd=2,lty=2)


Visitando algumas Distribuições Contínuas

Exemplo 2: Distribuição Exponencial

Simular valores de uma v.a. \(X \sim \text{Exp}(\lambda)\), para \(\lambda\) fixo.

Solução:

Se \(X\) é uma variável aleatória exponencial com média \(1/\lambda\), então sua função de distribuição é dada por \[F_X(x) = 1 - e^{-\lambda x}.\] Se definirmos \(x = F_X^{-1}(u)\), então \[u = F_X(x) = 1 - e^{-\lambda x} \qquad \Leftrightarrow \qquad 1 - u = e^{-\lambda x} \qquad \Leftrightarrow \qquad x = -\dfrac{\log(1 - u)}{\lambda}.\]

Algoritmo 2

  1. Gere um valor \(u\) de \(U \sim \text{U}(0,1)\).

  2. Tome \(x = -\dfrac{\log(1 - u)}{\lambda}\).

rexp.inv = function(n,lambda){
  u = runif(n)
  
  x = -log(1-u)/lambda
}

lambda = 2
x = rexp.inv(1000,lambda)

hist(x,prob=TRUE,ylab=expression(f[X](x)),
     main="Exponencial pela Transformação Inversa")
curve(dexp(x,lambda),
      add=TRUE,col=2,lwd=2,lty=2)

Exemplo 3: Distribuição Erlang

Suponha que queremos gerar o valor de uma variável aleatória \(X \sim \text{Erlang}(k,\lambda) \equiv \text{Gama}(k, \lambda)\), \(k\) natural.

Utilize o Método da Transformação Inversa para obter uma amostra de \(X\).

Solução:

Como a função de distribuição \(F_X\) de tal variável aleatória é dada por \[F_X(x) = \int_{0}^{x} \frac{\lambda^k}{(k-1)!} e^{-\lambda y}y^{k-1} \, dy\] não é possível obter uma expressão em forma fechada para sua inversa. No entanto, usando o resultado de que uma variável aleatória gama \((n, \lambda)\) pode ser considerada como a soma de \(k\) exponenciais independentes, cada uma com taxa \(\lambda\) (veja a Seção 2.9 do Capítulo 2 de Ross (2022)), podemos fazer uso do Exemplo 2 para gerar \(X\).

Especificamente, podemos gerar \(X\) gerando \(k\) números aleatórios \(U_1, \dots, U_k\) e então definindo \[\begin{align*} X &= \sum_{i=1}^k-\frac{1}{\lambda} \log (1-U_i) = -\frac{1}{\lambda} \sum_{i=1}^k\log (1-U_i) = -\frac{1}{\lambda} \log\left(\prod_{i=1}^k(1-U_i)\right) \end{align*}\] onde o uso da identidade \(\sum_{i=1}^{k} \log y_i = \log(y_1 \dots y_k)\) economiza tempo computacional, pois requer apenas um cálculo logarítmico em vez de \(n\) cálculos.

rerlang.inv = function(n,k,lambda){
  for(i in 1:n){
    u = runif(k)
    x[i] = -log(prod(1-u))/lambda  
  }
  x
}

k = 5
lambda = 2
x = rerlang.inv(1000,k,lambda)

hist(x,prob=TRUE,ylab=expression(f[X](x)),
     main="Erlang pela Transformação Inversa")
curve(dgamma(x,k,lambda),
      add=TRUE,col=2,lwd=2,lty=2)


Exercícios

  1. Derive a transformação inversa para a distribuição Uniforme \((a,b)\).

  2. Derive a transformação inversa da distribuição Cauchy.

  3. Derive a transformação inversa da distribuição Pareto e implemente uma função que gere valores de acordo com este modelo.

  1. Compare as amostras geradas pelo método inverso com as funções nativas do R.

Referências

ROSS, Sheldon M. Simulation. 6. ed. London: Academic Press, 2022.

ROBERT, Christian P.; CASELLA, George. Monte Carlo Statistical Methods. 2. ed. New York: Springer, 2004.