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.
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.
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)\).
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\).
Gere um valor \(u\) de \(U \sim \text{U}(0,1)\).
Tome \(x = F_X^{-1}(u)\).
Repita os passos 1 e 2 quantas vezes forem necessárias até obter a amostra do tamanho desejado.
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}.\]
Gere um valor \(u\) de \(U \sim \text{U}(0,1)\).
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)
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}.\]
Gere um valor \(u\) de \(U \sim \text{U}(0,1)\).
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)
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)
Derive a transformação inversa para a distribuição Uniforme \((a,b)\).
Derive a transformação inversa da distribuição Cauchy.
Derive a transformação inversa da distribuição Pareto e implemente uma função que gere valores de acordo com este modelo.
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.