Método da Tranformação Inversa


Variáveis aleatórias contínuas

Seja \(X\) uma v.a. contínua com fdp \(f(x)\), e seja a função inversa \(F^{-1}(u)\), se esta existir, em que \(0 \leq u \leq 1\), então, a amostra da variável aleatória de \(X\) pode ser simulada a partir da seguinte maneira:

  • Gere números aleatórios a partir da Distribuição Uniforme (0, 1).

Ex: Gere uma amostra aleatória de X usando o método da Transformação Inversa para a \(f(x)\ = \ \lambda e^{- \lambda x}\).

Resolução

  • A \(f(x) \ = \ \lambda e^{- \lambda x}\) é a função de probabilidade da Distribuição exponencial.

  • Sabemos que a \(F(x)\) da dist. exponencial é \(1 - e^{- \ \lambda x}\).

Para encontrar \(F^{-1}(u)\), faremos:

  • \(F(x) \ = \ u\)

  • \(1 - e^{- \ \lambda x} \ = \ u\)

  • \(1 - e^{- \ \lambda x} \ - \ 1 = \ u - 1\)

  • \(- e^{- \ \lambda x} \ = \ 1 - u\)

  • \((-1) \cdot - e^{- \ \lambda x} \ = \ 1 - u \cdot (-1)\)

  • \(e^{- \ \lambda x} \ = \ 1 - u\)

  • \(ln(e^{- \ \lambda x}) \ = \ ln(1 - u)\)

  • \(- \ \lambda x \ = \ ln(1 - u)\)

  • \(- x \ = \frac{\ ln(1 - u)}{\lambda}\)

  • \(x \ = - \frac{ln(1 - u)}{\lambda}\)


O argoritmo:

exp_par <- function(n, lambda){ # defino os parâmetros
  u <- runif(n) # Gerando n valores da distribuição uniforme de 0 a 1
  x <- -log(1 - u)/lambda
  return(x)
}

x <- exp_par(1000, 4)
y <- rexp(1000, rate = 4)

par(mfrow = c(1, 2))
hist(x)
hist(y)


Variáveis aleatórias discretas

Se \(X\) é uma variável aleatória discreta e

\(... < \ x_{i - 1} x_i < x_{i + 1} < ...\)

sejam pontos de descontinuidade de \(F_X(x)\), então a transformação inversa de

\(F_X^{-1} (u) \ = \ x_i\), onde \(F_X{(x_i - 1)} < u \leq F_X{(x_i)}\)

Para cada variável aleatória:

  • Gere números aleatórios a partir da Distribuição Uniforme (0, 1).

  • Determine \(x_i\) tal que \(F(x_{i-1}) < u \leq F(x_i)\).


Ex: Seja \(X\) uma v.a. com a seguinte fdp, usando o método da transformação inversa, encontre a média e a variância de \(X\).

\[\begin{array}{c |c c } \text{x} & 1 & 2 & 3 & 4\\ \hline \text{P (X = x)} & 0.2 & 0.4 & 0.3 & 0.1\\ \end{array}\]

Resolução

A média de uma variável aleatória discreta é o \(\sum_{i = 1}^n x_i \cdot p_i\)

  • \(E (X) = \sum_{i = 1}^n x_i \cdot p_i\)

  • \(E (X) = 1 \ \cdot \ 0.2 \ + \ 2 \ \cdot \ 0.4 \ + \ 3 \ \cdot \ 0.3 \ + \ 4 \ \cdot \ 0.1\)

  • \(E (X) = 0.2 + 0.8 + 0.9 + 0.4\)

  • \(E (X) = 2.3\)

A variância:

  • \(Var(X) = E(X^2) - [E(X)]^2\)

  • \(E(X^2) = \sum_{i = 1}^n x_i^2 \cdot p_i\)

  • \(E(X^2) = 1^2 \cdot 0.2 + 2^2 \cdot 0.4 + 3^2 \cdot 0.3 + 4^2 \cdot 0.1\)

  • \((X^2) = 1 \cdot 0.2 + 4 \cdot 0.4 + 9 \cdot 0.3 + 16 \cdot 0.1\)

  • \(E(X^2) = 0.2 + 1.6 + 2.7 + 1.6\)

  • \(E(X^2) = 6.1\)

  • \(Var(X) = 6.1 - 5.29\)

  • \(Var(X) = 0.81\)

O algoritmo:

va_disc <- function(n) {
  b <- numeric(n)
  # b recebe um vetor de tamanho n
  u <- runif(n)
  # u recebe n realizações da uniforme (0,1)
  for (i in 1:n) {
    if (u[i] <= 0.2) {
      b[i] <- 1
    } else if (u[i] <= 0.6) {
      b[i] <- 2
    } else if (u[i] <= 0.9) {
      b[i] <- 3
    } else {
      b[i] <- 4
    }
    # laço que armazena os valores em b de acordo com as probabilidades pré estabelecidas na distribuição
  }
  
  return(b)  
}


n <- 1000
x <- va_disc(n)

dados_dist <- data.frame(Média = c(mean(x)),
                         Variância = c(var(x)))

dados_dist
##   Média Variância
## 1 2.268  0.825001
freq <- table(x)

# Exbindo as proporções
p <- freq / n
p
## x
##     1     2     3     4 
## 0.222 0.380 0.306 0.092
hist(x)

REFERÊNCIAS

RIZZO, Maria L. Statistical computing with R. 2. ed. New York: Chapman and Hall/CRC, 2019.