La méthode est très simple, je vais donc la décrire en termes simples. Tout d'abord, prenez la fonction de distribution cumulative FX d'une distribution à partir de laquelle vous souhaitez échantillonner. La fonction prend en entrée une valeur x et vous indique quelle est la probabilité d'obtenir X≤x . Donc
FX(x)=Pr(X≤x)=p
inverse d'une telle fonction fonction, prendrait comme entrée et renverrait . Notez que s » sont uniformément distribués - ce qui pourrait être utilisé pour l' échantillonnage de tout si vous connaissez . La méthode est appelée l' échantillonnage par transformée inverse . L'idée est très simple: il est facile d'échantillonner uniformément des valeurs à partir de , donc si vous voulez échantillonner à partir de certains , prenez simplement les valeurs et passez par pour obtenir « s p x p F X F - 1 XF−1XpxpFXF−1XF X u ∼ U ( 0 , 1 ) u F - 1 X xU(0,1)FXu∼U(0,1)uF−1Xx
F−1X(u)=x
ou en R (pour une distribution normale)
U <- runif(1e6)
X <- qnorm(U)
Pour le visualiser, regardez CDF ci-dessous, généralement, nous pensons aux distributions en termes de recherche de l' axe pour les probabilités des valeurs de l' axe . Avec cette méthode d'échantillonnage, nous faisons le contraire et commençons par les «probabilités» et les utilisons pour choisir les valeurs qui leur sont liées. Avec des distributions discrètes, vous traitez comme une ligne de à et attribuez des valeurs en fonction de l'endroit où se situe un point sur cette ligne (par exemple, si ou si pour l'échantillonnage à partir de ).x U 0 1yxU010 0 ≤ u < 0,5 1 0,5 ≤ u ≤ 1 B e r n o u l l i ( 0,5 )u00≤u<0.510.5≤u≤1Bernoulli(0.5)
Malheureusement, cela n'est pas toujours possible car toutes les fonctions n'ont pas leur inverse, par exemple, vous ne pouvez pas utiliser cette méthode avec des distributions bivariées. Il ne doit pas non plus être la méthode la plus efficace dans toutes les situations, dans de nombreux cas, de meilleurs algorithmes existent.
Vous demandez également quelle est la distribution de . Puisque est un inverse de , alors et , donc oui, les valeurs obtenues en utilisant ce procédé possède la même distribution que . Vous pouvez le vérifier par une simple simulationF - 1 X F X F X ( F - 1 X ( u ) ) = u F - 1 X ( F X ( x ) ) = x XF−1X(u)F−1XFXFX(F−1X(u))=uF−1X(FX(x))=xX
U <- runif(1e6)
all.equal(pnorm(qnorm(U)), U)