Il metodo è molto semplice, quindi lo descriverò in parole semplici. Innanzitutto, prendi la funzione di distribuzione cumulativa di una distribuzione da cui desideri campionare. La funzione prende come input un valore e ti dice qual è la probabilità di ottenere . Così x X ≤ xFXxX≤x
FX(x)=Pr(X≤x)=p
inverso di tale funzione, prendere come input e restituire . Si noti che s' sono uniformemente distribuiti - questo potrebbero essere utilizzati per il campionamento da qualsiasi se si sa . Il metodo è chiamato campionamento della trasformata inversa . L'idea è molto semplice: è facile valori campione uniformemente da , quindi se si vuole campione da qualche , basta prendere i valori e passare attraverso per ottenere 's p x pF−1XpxpF - 1 XFXF−1XF X u ∼ U ( 0 , 1 ) u F - 1 X xU(0,1)FXu∼U(0,1)uF−1Xx
F−1X(u)=x
o in R (per distribuzione normale)
U <- runif(1e6)
X <- qnorm(U)
Per visualizzarlo, guarda CDF qui sotto, in generale, pensiamo alle distribuzioni in termini di guardare l' asse per le probabilità dei valori dell'asse . Con questo metodo di campionamento facciamo il contrario e iniziamo con "probabilità" e li usiamo per scegliere i valori ad essi correlati. Con distribuzioni discrete tratti come una linea da a e valori assegnare in base a dove fa qualche punto giacciono su questa linea (ad esempio se o se per il campionamento da ).x U 0 1 u 0 0 ≤ u < 0,5 1 0,5 ≤ u ≤ 1 B e r n o u l l i ( 0,5 )yxU01u00≤u<0.510.5≤u≤1Bernoulli(0.5)
Sfortunatamente, questo non è sempre possibile poiché non tutte le funzioni hanno il loro contrario, ad esempio non è possibile utilizzare questo metodo con distribuzioni bivariate. Inoltre , non deve essere il metodo più efficiente in tutte le situazioni, in molti casi esistono algoritmi migliori.
Chiedi anche qual è la distribuzione di . Poiché è un inverso di , quindi e , quindi sì, i valori ottenuti usando tale metodo ha la stessa distribuzione di . Puoi verificarlo con una semplice simulazioneF−1X(u)F−1XFXFX(F−1X(u))=uF−1X(FX(x))=xX
U <- runif(1e6)
all.equal(pnorm(qnorm(U)), U)