O método é muito simples, então vou descrevê-lo em palavras simples. Primeiro, pegue a função de distribuição cumulativa de alguma distribuição da qual você deseja amostrar. A função assume como entrada algum valor x e informa qual é a probabilidade de obter X ≤ x . tãoFXxX≤x
FX(x)=Pr(X≤x)=p
inverso dessa função, levaria p como entrada e retornaria x . Observe que p 's são distribuídos uniformemente - isso poderia ser usado para a amostragem de qualquer F X se você sabe F - 1 X . O método é chamado de amostragem de transformação inversa . A ideia é muito simples: é fácil amostrar valores uniformemente a partir de U ( 0 , 1 ) ; portanto, se você quiser amostrar a partir de algum F X , basta pegar os valores u ∼F−1XpxpFXF−1XU(0,1)FX e passe u através de F - 1 X para obter x 'su∼U(0,1)uF−1Xx
F−1X(u)=x
ou em R (para distribuição normal)
U <- runif(1e6)
X <- qnorm(U)
Para visualizá-lo, observe o CDF abaixo, geralmente, pensamos em distribuições em termos de olhar para o eixo para probabilidades de valores de eixo x . Com esse método de amostragem, fazemos o oposto e começamos com "probabilidades" e as usamos para escolher os valores que estão relacionados a elas. Com distribuições discretas de tratar L como uma linha a partir de 0 para 1 e os valores com base em atribuir onde faz algum ponto L se encontrar nesta linha (por exemplo, 0 se 0 ≤ u < 0,5 ou 1 se 0,5 ≤ u ≤ 1 para a amostragem a partir de ByxU01u00≤u<0.510.5≤u≤1 ).Bernoulli(0.5)
Infelizmente, isso nem sempre é possível, pois nem todas as funções têm seu inverso; por exemplo, você não pode usar esse método com distribuições bivariadas. Também não precisa ser o método mais eficiente em todas as situações; em muitos casos, existem algoritmos melhores.
Você também pergunta qual é a distribuição de . Desde F - 1 X é o inverso de M X , em seguida, F X ( M - 1 X ( u ) ) = u e F - 1 X ( F X ( x ) ) = x , por isso, sim, os valores obtidos utilizando este método têm a mesma distribuição que XF−1X(u)F−1XFXFX(F−1X(u))=uF−1X(FX(x))=xX . Você pode verificar isso por uma simulação simples
U <- runif(1e6)
all.equal(pnorm(qnorm(U)), U)