Je veux échantillonner selon une densité où et sont strictement positifs. (Motivation: cela pourrait être utile pour l'échantillonnage de Gibbs lorsque le paramètre de forme d'une densité gamma a une priorité uniforme.)
Quelqu'un sait-il facilement échantillonner à partir de cette densité? Peut-être que c'est standard et juste quelque chose que je ne sais pas?
Je peux penser à un stupide algorithme d'échantillonnage de rejet qui fonctionnera plus ou moins (trouver le mode de , échantillon d'uniforme dans une grande boîte et rejeter si ), mais (i) ce n'est pas du tout efficace et (ii) sera trop gros pour qu'un ordinateur puisse le gérer facilement même modérément grand et . (Notez que le mode pour les grands et est approximativement à .) f ( a , u ) [ 0 , 10 a ∗ ] × [ 0 , f ( a ∗ ) ] u > f ( a ) f ( a ∗ ) c dd a = c d
Merci d'avance pour votre aide!
Réponses:
L'échantillonnage de rejet fonctionnera exceptionnellement bien lorsque et est raisonnable pour c d ≥ exp ( 2 ) .cd≥exp(5) cd≥exp(2)
Pour simplifier un peu les mathématiques, soit , écrivez x = a et notez quek=cd x=a
pour . Réglage x = u 3 / 2 donnex ≥ 1 x = u3 / 2
pour . Lorsque k ≥ exp ( 5 ) , cette distribution est extrêmement proche de la normale (et se rapproche à mesure que k grandit). Plus précisément, vous pouvezu ≥ 1 k ≥ exp( 5 ) k
Trouvez le mode de numériquement (en utilisant, par exemple, Newton-Raphson).F( u )
Développez au deuxième ordre sur son mode.JournalF( u )
Cela donne les paramètres d'une distribution normale très approximative. Avec une grande précision, cette normale approximative domine sauf dans les queues extrêmes. (Lorsque k < exp ( 5 ) , vous devrez peut-être augmenter légèrement le pdf normal pour assurer la domination.)F( u ) k < exp( 5 )
Ayant effectué ce travail préliminaire pour une valeur donnée de et ayant estimé une constante M > 1 (comme décrit ci-dessous), l'obtention d'une variable aléatoire est une question de:k M> 1
Tirez une valeur de la distribution normale dominante g ( u ) .u g( u )
Si ou si une nouvelle variable uniforme X dépasse f ( u ) / ( M g ( u ) ) , retournez à l'étape 1.u < 1 X F( u ) / ( Mg(u))
Set .x=u3/2
Le nombre prévu d'évaluations de raison des écarts entre g et f n'est que légèrement supérieur à 1. (Certaines évaluations supplémentaires se produiront en raison des rejets de variances inférieures à 1 , mais même lorsque k est aussi faible que 2, la fréquence de telles les occurrences sont petites.)f g f 1 k 2
Ce graphique montre les logarithmes de g et f en fonction de u pour . Parce que les graphiques sont si proches, nous devons inspecter leur ratio pour voir ce qui se passe:k=exp(5)
Ceci affiche le rapport logarithmique ; le facteur M = exp ( 0,004 ) a été inclus pour garantir que le logarithme est positif dans toute la partie principale de la distribution; c'est-à-dire pour assurer M g ( u ) ≥ f ( u ) sauf éventuellement dans des régions de probabilité négligeable. En rendant M suffisamment grand, vous pouvez garantir que M ⋅ glog(exp(0.004)g(u)/f(u)) M=exp(0.004) Mg(u)≥f(u) M M⋅g domine dans toutes les queues sauf les plus extrêmes (qui n'ont pratiquement aucune chance d'être choisies dans une simulation de toute façon). Cependant, plus M est grand, plus les rejets se produisent fréquemment. Lorsque k devient grand, M peut être choisi très près de 1 , ce qui n'entraîne pratiquement aucune pénalité.f M k M 1
Une approche similaire fonctionne même pour , mais des valeurs assez grandes de M peuvent être nécessaires lorsque exp ( 2 ) < k < exp ( 5 ) , car f ( u ) est sensiblement asymétrique. Par exemple, avec k = exp ( 2 ) , pour obtenir un g raisonnablement précis, nous devons définir M = 1 :k>exp(2) M exp(2)<k<exp(5) f(u) k=exp(2) g M=1
La courbe rouge supérieure est le graphique de tandis que la courbe bleue inférieure est le graphique de log ( f ( u ) ) . L'échantillonnage de rejet de f par rapport à exp ( 1 ) g entraînera le rejet d' environ 2/3 de tous les tirages d'essai, triplant l'effort: toujours pas mal. La queue droite ( u > 10 ou x > 10 3 / deux ~ 30log(exp(1)g(u)) log(f(u)) f exp(1)g u>10 x>103/2∼30 ) sera sous-représentée dans l'échantillonnage de rejet (car n'y domine plus f ), mais cette queue comprend moins que exp ( - 20 ) ∼ 10 - 9 de la probabilité totale.exp(1)g f exp( - 20 ) ∼ 10- 9
Pour résumer, après un effort initial pour calculer le mode et évaluer le terme quadratique de la série de puissance de autour du mode - un effort qui nécessite au plus quelques dizaines d'évaluations de fonction - vous pouvez utiliser l'échantillonnage de rejet à un coût prévu compris entre 1 et 3 (ou plus) évaluations par variable. Le multiplicateur de coût tombe rapidement à 1 lorsque k = c d augmente au-delà de 5.F( u ) k = c d
Même lorsqu'un seul tirage de est nécessaire, cette méthode est raisonnable. Il prend tout son sens lorsque de nombreux tirages indépendants sont nécessaires pour la même valeur de k , car le surcoût des calculs initiaux est amorti sur de nombreux tirages.F k
Addenda
@Cardinal a demandé, tout à fait raisonnablement, le soutien d'une partie de l'analyse de la main dans ce qui précède. En particulier, pourquoi la transformation faire la distribution à peu près normale?x = u3 / 2
À la lumière de la théorie des transformations de Box-Cox , il est naturel de rechercher une transformation de puissance de la forme (pour une constante α , espérons-le pas trop différente de l'unité) qui rendra une distribution "plus" normale. Rappelons que toutes les distributions normales sont simplement caractérisées: les logarithmes de leurs pdfs sont purement quadratiques, avec zéro terme linéaire et aucun terme d'ordre supérieur. Par conséquent, nous pouvons prendre n'importe quel pdf et le comparer à une distribution normale en étendant son logarithme en tant que série de puissance autour de son pic (le plus élevé). Nous recherchons une valeur de α qui fait (au moins) le troisièmex = uα α α la puissance s'évanouit, au moins approximativement: c'est le plus que l'on puisse raisonnablement espérer qu'un seul coefficient libre accomplira. Cela fonctionne souvent bien.
Mais comment maîtriser cette distribution particulière? En effectuant la transformation de puissance, son pdf est
Prenez son logarithme et utilisez l'expansion asymptotique de Stirling de :Journal( Γ )
(pour les petites valeurs de , ce qui n'est pas constant). Cela fonctionne à condition que α soit positif, ce que nous supposerons être le cas (car sinon nous ne pouvons pas négliger le reste de l'expansion).c α
Calculez sa dérivée troisième (qui, lorsqu'elle est divisée par Sera le coefficient de la troisième puissance de u dans la série de puissance) et exploitez le fait qu'au sommet, la dérivée première doit être nulle. Cela simplifie considérablement la troisième dérivée, donnant (approximativement, parce que nous ignorons la dérivée de c )3 ! u c
Lorsque n'est pas trop petit, u sera en effet grand au sommet. Parce que α est positif, le terme dominant dans cette expression est la puissance 2 α , que nous pouvons mettre à zéro en faisant disparaître son coefficient:k u α 2 α
Voilà pourquoi les fonctionne si bien: avec ce choix, le coefficient du terme cubique autour du pic se comporte comme u - 3 , qui est proche de exp ( - 2 k ) . Une fois que k dépasse 10 environ, vous pouvez pratiquement l'oublier, et il est raisonnablement petit, même pour k jusqu'à 2. Les puissances supérieures, à partir du quatrième, jouent de moins en moins un rôle lorsque k devient grand, car leurs coefficients augmentent proportionnellement plus petit aussi. Par ailleurs, les mêmes calculs (basés sur la dérivée seconde de l o g ( fα = trois / 2 u- 3 exp( - 2 k ) k k k à son apogée) montre que l'écart-type de cette approximation normale est légèrement inférieur à 2l og(f( u ) ) , avec l'erreur proportionnelle àexp(-k/2).23exp( k / 6 ) exp( - k / 2 )
la source
J'aime beaucoup la réponse de @ whuber; il est susceptible d'être très efficace et a une belle analyse. Mais cela nécessite une compréhension approfondie de cette distribution particulière. Pour les situations où vous n'avez pas cette idée (donc pour différentes distributions), j'apprécie également l'approche suivante qui fonctionne pour toutes les distributions où le PDF est deux fois différenciable et que la dérivée seconde a un nombre fini de racines. Cela nécessite un peu de travail à configurer, mais ensuite vous avez un moteur qui fonctionne pour la plupart des distributions que vous pouvez lui lancer.
Fondamentalement, l'idée est d'utiliser une limite supérieure linéaire par morceaux au PDF que vous adaptez lorsque vous effectuez un échantillonnage de rejet. Dans le même temps, vous avez une baisse linéaire par morceauxà destination du PDF, ce qui vous évite d'avoir à évaluer le PDF trop fréquemment. Les limites supérieures et inférieures sont données par des accords et des tangentes au graphique PDF. La division initiale en intervalles est telle qu'à chaque intervalle, le PDF est soit tout concave, soit tout convexe; chaque fois que vous devez rejeter un point (x, y), vous subdivisez cet intervalle en x. (Vous pouvez également effectuer une subdivision supplémentaire en x si vous deviez calculer le PDF car la limite inférieure est vraiment mauvaise.) Cela rend les subdivisions particulièrement fréquentes lorsque les limites supérieures (et inférieures) sont mauvaises, vous obtenez donc une très bonne approximation de votre PDF essentiellement gratuitement. Les détails sont un peu difficile à obtenir à droite, mais j'ai essayé d'expliquer la plupart d'entre eux dans cette série de blogs messages - en particulierle dernier .
Ces messages ne discutent pas de ce qu'il faut faire si le PDF n'est pas limité, ni dans le domaine ni dans les valeurs; Je recommanderais la solution quelque peu évidente soit de faire une transformation qui les rend finis (ce qui serait difficile à automatiser) soit d'utiliser une coupure. Je choisirais la coupure en fonction du nombre total de points que vous prévoyez de générer, disons N , et je choisirais la coupure de sorte que la partie retirée ait moins de probabilité. (C'est assez facile si vous avez un formulaire fermé pour le CDF; sinon cela pourrait aussi être délicat.)1 / ( 10 N)
Cette méthode est implémentée dans Maple comme méthode par défaut pour les distributions continues définies par l'utilisateur. (Divulgation complète - Je travaille pour Maplesoft.)
J'ai fait un exemple, générant 10 ^ 4 points pour c = 2, d = 3, en spécifiant [1, 100] comme plage initiale pour les valeurs:
Il y a eu 23 rejets (en rouge), 51 points "en probation" qui se situaient à l'époque entre la borne inférieure et le PDF réel, et 9949 points qui ont été acceptés après avoir vérifié uniquement les inégalités linéaires. C'est 74 évaluations du PDF au total, soit environ une évaluation PDF pour 135 points. Le rapport devrait s'améliorer à mesure que vous générez plus de points, car l'approximation s'améliore de plus en plus (et inversement, si vous ne générez que peu de points, le rapport est pire).
la source
Vous pouvez le faire en exécutant numériquement la méthode d'inversion, qui dit que si vous branchez des variables aléatoires uniformes (0,1) dans le CDF inverse, vous obtenez un tirage de la distribution. J'ai inclus un code R ci-dessous qui fait cela, et d'après les quelques vérifications que j'ai faites, cela fonctionne bien, mais c'est un peu bâclé et je suis sûr que vous pouvez l'optimiser.
Si vous n'êtes pas familier avec R, lgamma () est le journal de la fonction gamma; integr () calcule une intégrale 1-D définie; uniroot () calcule la racine d'une fonction en utilisant la bissection 1-D.
la source