@ A resposta de Tim mostra como a amostragem por transformação inversa pode ser adaptada para distribuições truncadas, liberando o tempo de execução da dependência do limite . Eficiências adicionais podem ser obtidas evitando a avaliação numérica dispendiosa da função beta quantil e usando a amostragem por transformada inversa como parte da amostragem por rejeição.k
A função densidade de uma distribuição beta com parâmetros de forma & duplamente truncada em (para um pouco mais de generalidade) éαβk1<k2
f(x)=x(α−1)(1−x)(β−1)B(k2,α,β)−B(k1,α,β)
Pegue qualquer parte monotonicamente crescente da densidade entre e : para é log-côncava, para que você possa envolvê-lo com uma função exponencial desenhada tangente a qualquer ponto ao longo dele:xLxUα,β>1
g(x)=c⋅λe−λ(x−xL)
Encontre definindo os gradientes das densidades de log iguaisλ
−λ=a−1x−b−11−x
e encontre calculando quanto a densidade exponencial precisa ser dimensionada para atender à densidade naquele ponto
cc=f(x)λe−λ(x−xL)
O melhor envelope para amostragem de rejeição é aquele com a menor área abaixo dela. A área é
Substituindo expressões em por & , e largando fatores constantes dá
A=c⋅(1−e−λ(xU−xL))
xλc
Q(x)=xa(1−x)b(a+b−2)x−a+1⋅[exp((b−1)(x−xL)1−x+xL(a−1)x−(a−1))−exp((b−1)(x−xU)1−x+xU(a−1)x−(a−1))]
Escrever a derivada é deixado como um exercício para os leitores ou seus computadores. Qualquer algoritmo de busca de raiz pode então ser usado para encontrar o para o qual .dQdxxdQdx=0
O mesmo vale, mutatis mutandis, para partes monotonicamente decrescentes da densidade. Portanto, a distribuição beta truncada pode ser muito bem envolvida por duas funções exponenciais, digamos, uma de para o modo e outra do modo para , pronta para amostragem por rejeição. (Para uma variável aleatória uniforme truncada , tem uma distribuição exponencial truncada com o parâmetro de taxa .)k1k2U−log(1−U)λλ
A beleza dessa abordagem é que todo o trabalho duro é feito. Uma vez definida a função de envelope, calculada a constante de normalização para a densidade beta truncada, tudo o que resta é gerar variáveis aleatórias uniformes e executar algumas operações aritméticas, logs e potências e comparações simples. Apertar a função de envelope - com linhas horizontais ou mais curvas exponenciais - pode, obviamente, reduzir o número de rejeições.