Échantillonnage efficace d'une distribution bêta seuil

10

Comment dois-je échantillonner efficacement la distribution suivante?

xB(α,β), x>k

Si n'est pas trop grand, l'échantillonnage de rejet peut être la meilleure approche, mais je ne sais pas comment procéder lorsque k est grand. Peut-être existe-t-il une approximation asymptotique qui peut être appliquée?kk

user1502040
la source
1
Il n'est pas clair sans ambiguïté ce que vous entendez par " ". Voulez-vous dire une distribution bêta tronquée (tronquée à gauche en k )? xB(α,β), x>kk
Glen_b -Reinstate Monica
@Glen_b exactement.
user1502040
5
Pour les deux paramètres de forme supérieurs à 1, la distribution bêta est log-concave, de sorte que des enveloppes exponentielles peuvent être utilisées pour l'échantillonnage de rejet. Pour générer des variantes bêta non tronquées que vous échantillonnez déjà à partir de distributions exponentielles tronquées (ce qui est facile à faire), il devrait être simple d'adapter cette méthode.
Scortchi - Réintégrer Monica

Réponses:

14

La manière la plus simple et la plus générale qui s'applique à n'importe quelle distribution tronquée (elle peut également être généralisée à la troncature des deux côtés) est d'utiliser l' échantillonnage par transformée inverse . Si est la distribution cumulative des intérêts, alors p 0 = F ( k ) et prendreFp0=F(k)

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

est un échantillon de F tronqué à gauche en k . La fonction quantile F - 1 tracera probabilités à des échantillons de F . Étant donné que nous prenons les valeurs de U uniquement dans la "zone" qui correspond aux valeurs de la distribution bêta de la région non tronquée, vous n'échantillonnerez que ces valeurs.XFkF1FU

Cette méthode est illustrée sur l'image ci-dessous où la zone tronquée est marquée par un rectangle gris, les points en rouge sont tirés de la distribution puis transformés en échantillons B ( 2 , 8 ) .U(p0,1)B(2,8)

Échantillonnage par transformée inverse à partir d'une distribution tronquée

Tim
la source
5
(+1) Il convient de noter que la fonction quantile n'est pas si facile à évaluer.
Scortchi - Réintégrer Monica
1
@Scortchi Si a ou b valent 1 ou au moins un entier, il y a une forme pas si mauvaise (voir wikipedia ). Et en Python il y a scipy.special.betaincpour l'inverse et en R il y en a pbeta.
Graipher
3
@Graipher: J'aurais dû dire "à bon marché, en général" - il serait préférable d'éviter Newton-Raphson ou d'autres solutions itératives si possible. (BTW c'est qbetapour la fonction quantile en R.)
Scortchi - Reinstate Monica
1
@Scortchi vous avez raison, mais dans la plupart des cas, pour les ordinateurs modernes, cela ne devrait pas être un problème majeur. Je recommande également cette approche car elle est directement disponible dans la plupart des logiciels et peut être généralisée à n'importe quelle distribution tronquée, uniquement si l'on a accès à la fonction quantile.
Tim
1
Sans aucun doute, il est bon d'avoir à portée de main une méthode généralement applicable et facile à mettre en œuvre dont le temps d'exécution ne croît pas avec ; & pour les distributions avec des fonctions quantiles de forme fermée, par exemple le Weibull, il doit être aussi bon que possible. Néanmoins, je soupçonne que k devra être réglé pour couper une assez grande partie de la distribution bêta avant de battre les algorithmes d'échantillonnage de rejet efficaces qui sont également disponibles dans la plupart des logiciels et qui ne reposent que sur le calcul de la densité de probabilité de la bêta. kk
Scortchi - Réintégrer Monica
8

La réponse de @ Tim montre comment l'échantillonnage par transformée inverse peut être adapté pour les distributions tronquées, libérant ainsi le temps d'exécution de la dépendance au seuil . D'autres gains d'efficacité peuvent être obtenus en évitant une évaluation numérique coûteuse de la fonction quantile bêta et en utilisant l'échantillonnage à transformée inverse dans le cadre de l'échantillonnage de rejet.k

La fonction de densité d'une distribution bêta avec des paramètres de forme & β doublement tronqués à k 1 < k 2 (pour un peu plus de généralité) estαβk1<k2

F(X)=X(α-1)(1-X)(β-1)B(k2,α,β)-B(k1,α,β)

Prenez n'importe quelle partie augmentant de façon monotone de la densité entre et x U : pour α , β > 1, elle est log-concave, de sorte que vous pouvez l'envelopper avec une fonction exponentielle dessinée à une tangente en tout point le long de celle-ci:XLXUα,β>1

g(X)=cλe-λ(X-XL)

λ

-λ=une-1X-b-11-X
c
c=F(X)λe-λ(X-XL)

entrez la description de l'image ici

UNE=c(1-e-λ(XU-XL))
Xλc

Q(X)=Xune(1-X)b(une+b-2)X-une+1[exp((b-1)(X-XL)1-X+XL(une-1)X-(une-1))-exp((b-1)(X-XU)1-X+XU(une-1)X-(une-1))]

QXXQX=0

k1k2U-Journal(1-U)λλ

entrez la description de l'image ici

La beauté de cette approche est que tout le travail est mis en place. Une fois la fonction d'enveloppe définie, la constante de normalisation de la densité bêta tronquée calculée, il ne reste plus qu'à générer des variations aléatoires uniformes et à effectuer sur elles quelques opérations arithmétiques simples, journaux et puissances, et comparaisons. Le resserrement de la fonction enveloppe - avec des lignes horizontales ou des courbes plus exponentielles - peut bien sûr réduire le nombre de rejets.

Scortchi - Réintégrer Monica
la source
1
+1 Belle idée. Étant donné que la bêta est approximativement normale pour des valeurs modestes à grandes de ses paramètres, en fonction de leur proximité, l'utilisation d'une enveloppe gaussienne pourrait être encore un peu plus efficace.
whuber
α<1β<1
1
αβ
@whuber: (1) L'approche que j'ai adoptée ici pour construire des enveloppes ne fonctionnerait pas car les densités ne sont pas log-concaves. (2) (a) Je voulais dire certainement les fonctions algébriques + journaux et pouvoirs, trig. fonctions si on me l'avait demandé, et peut-être même des fonctions gamma - j'avoue que je n'avais pas de notion précise. (b) Point pris - les évaluations rapides des fonctions ne se limitent pas à celles dont les formulaires sont fermés.
Scortchi - Réintégrer Monica
1
α<1β<1