Amostragem eficiente de uma distribuição Beta com limite

10

Como devo coletar amostras com eficiência da seguinte distribuição?

xB(α,β), x>k

Se não for muito grande, a amostragem por rejeição pode ser a melhor abordagem, mas não sei como proceder quando for grande. Talvez exista alguma aproximação assintótica que possa ser aplicada?kk

user1502040
fonte
11
Não é inequivocamente claro o que você pretende lá com " ". Você quer dizer uma distribuição beta truncada (truncada à esquerda em )? xB(α,β), x>kk
Glen_b -Reinstala Monica
@Glen_b exatamente.
precisa saber é o seguinte
5
Para ambos os parâmetros de forma maiores que 1, a distribuição beta é côncava em log; portanto, envelopes exponenciais podem ser usados ​​para amostragem por rejeição. Para gerar variáveis ​​beta não truncadas, você já está amostrando a partir de distribuições exponenciais truncadas (o que é fácil de fazer), deve ser fácil adaptar esse método.
Scortchi - Reinstate Monica

Respostas:

14

A maneira mais simples e mais geral que se aplica a qualquer distribuição truncada (também pode ser generalizada para truncamento nos dois lados) é usar a amostragem por transformação inversa . Se é a distribuição cumulativa de juros, defina e tomeFp0=F(k)

UU(p0,1)X=F1(U)

onde é uma amostra de truncada à esquerda em . A função quantil vai mapear probabilidades para amostras de . Como tomamos valores de somente da "área" que corresponde aos valores da distribuição beta da região não truncada, você amostrará apenas esses valores.XFkF1FU

Este método é ilustrado na imagem abaixo, onde a área truncada é marcada por um retângulo cinza, os pontos em vermelho são desenhados da distribuição e depois transformados em amostras.U(p0,1)B(2,8)

Amostragem de transformação inversa a partir de distribuição truncada

Tim
fonte
5
(+1) Vale ressaltar que a função quantil não é tão facilmente avaliada.
Scortchi - Restabelece Monica
11
@ Scortchi Se a ou b são 1 ou, pelo menos, um número inteiro, existe uma forma não tão ruim (consulte a Wikipedia ). E em Python existe scipy.special.betainco inverso e em R existe pbeta.
Graipher
3
@ Graipher: Eu deveria ter dito "barato, em geral" - seria melhor evitar Newton-Raphson ou outras soluções iterativas, se possível. (BTW é qbetapara a função quantílica em R.)
Scortchi - Reinstate Monica
11
@ Scortchi, você está certo, mas na maioria dos casos, para computadores modernos, isso não deve ser um grande problema. Eu também recomendo essa abordagem, uma vez que está diretamente disponível na maioria dos softwares e pode ser generalizada para qualquer distribuição truncada, apenas se alguém tiver acesso à função quantil.
Tim
11
Sem dúvida, é bom ter um método geralmente aplicável e de fácil implementação, cujo tempo de execução não cresça com ; e para distribuições com funções quantílicas de forma fechada, por exemplo, o Weibull, deve ser o melhor possível. No entanto, desconfio que terá que ser configurado para cortar uma parte bastante grande da distribuição beta antes que ela supere os algoritmos eficientes de amostragem por rejeição que também estão disponíveis na maioria dos softwares e que dependem apenas do cálculo da densidade de probabilidade do beta. kk
Scortchi - Restabelece Monica
8

@ 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)(1x)(β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λ(xxL)

Encontre definindo os gradientes das densidades de log iguaisλ

λ=a1xb11x
e encontre calculando quanto a densidade exponencial precisa ser dimensionada para atender à densidade naquele ponto c
c=f(x)λeλ(xxL)

insira a descrição da imagem aqui

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(1eλ(xUxL))
xλc

Q(x)=xa(1x)b(a+b2)xa+1[exp((b1)(xxL)1x+xL(a1)x(a1))exp((b1)(xxU)1x+xU(a1)x(a1))]

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 .)k1k2Ulog(1U)λλ

insira a descrição da imagem aqui

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.

Scortchi - Restabelecer Monica
fonte
11
+1 Boa ideia. Como o Beta é aproximadamente normal para valores modestos a grandes de seus parâmetros, dependendo da proximidade entre si, o uso de um envelope gaussiano pode ser um pouco mais eficiente ainda.
whuber
@whuber: eu queria uma distribuição com uma distribuição quantílica de forma fechada para o envelope, mas suponho que você pudesse gerar as variáveis ​​gaussianas truncadas eficientemente usando uma daquelas boas aproximações à função quantílica gaussiana. Ainda estou interessado no que você faria quando ou . α<1β<1
Scortchi - Reinstate Monica
11
Para esses pequenos e , convém mudar para uma cauda exponencial. Não sei ao certo o que você quer dizer com "forma fechada": quando você olha atentamente para implementações computacionais de exponenciais, gaussianas, funções hipergeométricas etc. - ou seja, todas as funções não algébricas - você descobre que nenhuma das eles têm uma "forma fechada" geral: são calculados através de aproximações sucessivas, como séries de Taylor, frações parciais ou expansões assintóticas. Não há muita diferença entre calcular um exponencial e calcular um quantil gaussiano. αβ
whuber
@ whuber: (1) A abordagem adotada aqui para a construção de envelopes não funcionaria porque as densidades não são côncavas em log. (2) (a) eu quis dizer certamente funções algébricas + logs e potências, trig. funções se me perguntassem, e talvez até funções gama - confesso que não tinha uma noção precisa. (b) Ponto tomado - as rápidas avaliações de funções não se limitam àquelas com formulários fechados.
Scortchi - Restabelecer Monica
11
Bom argumento sobre falha de concavidade de log. Eu suspeito que uma distribuição de lei de energia deva criar um bom envelope para ou . α<1β<1
whuber