Em um artigo de pesquisa sobre análise de sensibilidade de um modelo de equação diferencial ordinária de um sistema dinâmico, o autor forneceu a distribuição de um parâmetro de modelo como Distribuição normal (média = 1e-4, std = 3e-5) truncada no intervalo [0,5e -4 1,5e-4]. Ele então usa amostras dessa distribuição truncada para simulações do modelo. O que significa ter uma distribuição truncada e uma amostra dessa distribuição truncada?
Eu poderia criar duas maneiras de fazer isso:
- Amostra de uma distribuição Normal, mas ignore todos os valores aleatórios que estão fora do intervalo especificado antes das simulações.
- De alguma forma, obtenha uma distribuição especial "Truncated Normal" e obtenha amostras dela.
Essas abordagens são válidas e equivalentes?
Acredito que no primeiro caso, se alguém plotar o cdf / pdf experimental da amostra, não pareceria uma distribuição Normal porque as curvas não se estendem a .
qnorm
em um loop R não é uma boa ideia.Esse método está correto, mas, como mencionado por @ Xi'an em sua resposta, levaria muito tempo quando o intervalo é pequeno (mais precisamente, quando sua medida é pequena na distribuição normal).
Simule uma distribuição truncada usando amostragem de importância
After a bit of simplifications, samplingU∼Unif(G(a),G(b)) and taking G−1(U) is equivalent to take tan(U′) with U′∼Unif(arctan(a),arctan(b)) :
Now one has to calculate the weight for each sampled valuexi , defined as the ratio ϕ(x)/g(x) of the two densities up to normalization, hence we can take
A amostra ponderada( xEu, w ( xEu) )) permite estimar a medida de cada intervalo [ u , v ] na distribuição de destino, somando os pesos de cada valor amostrado dentro do intervalo:
Isso fornece uma estimativa da função cumulativa de destino. Podemos rapidamente obtê-lo e plotá-lo com o
spatsat
pacote:Claro, a amostra( xEu) definitivamente não é uma amostra da distribuição de destino, mas da distribuição instrumental de Cauchy, e obtém-se uma amostra da distribuição de destino realizando uma reamostragem ponderada , por exemplo, usando a amostra multinomial:
Outro método: amostragem por transformação inversa rápida
Olver e Townsend desenvolveram um método de amostragem para uma ampla classe de distribuição contínua. Ele é implementado na biblioteca chebfun2 para Matlab , bem como na biblioteca ApproxFun para Julia . Eu descobri recentemente essa biblioteca e parece muito promissora (não apenas para amostragem aleatória). Basicamente, este é o método de inversão, mas usando aproximações poderosas do cdf e do cdf inverso. A entrada é a função de densidade de destino até a normalização.
A amostra é simplesmente gerada pelo seguinte código:
Como verificado abaixo, ele produz uma medida estimada do intervalo[ 2 , 4 ] próximo ao obtido anteriormente por amostragem por importância:
fonte