El método es muy simple, así que lo describiré en palabras simples. Primero, tome la función de distribución acumulativa de alguna distribución de la que desea muestrear. La función toma como entrada algún valor x y le dice cuál es la probabilidad de obtener X ≤ x . EntoncesFXxX≤x
FX(x)=Pr(X≤x)=p
inverso de dicha función función, tomaría como entrada y retorno . Tenga en cuenta que 's se distribuyen de manera uniforme - esto podría ser utilizado para el muestreo de cualquier si sabe . El método se llama muestreo de transformación inversa . La idea es muy simple: es fácil de valores de muestra uniformemente de , así que si quieres a la muestra de algunos , sólo toma los valores y pasar través para obtener 's p x p F X F - 1 X U ( 0 , 1 ) F X u ∼ U ( 0 , 1 ) u F - 1 X xF−1XpxpFXF−1XU(0,1)FXu∼U(0,1)uF−1Xx
F−1X(u)=x
o en R (para distribución normal)
U <- runif(1e6)
X <- qnorm(U)
Para visualizarlo, mire el CDF a continuación, generalmente, pensamos en distribuciones en términos de mirar el eje para las probabilidades de valores del eje . Con este método de muestreo hacemos lo contrario y comenzamos con "probabilidades" y las usamos para elegir los valores que están relacionados con ellas. Con distribuciones discretas, trata a como una línea de a y asigna valores en función de dónde se encuentra algún punto en esta línea (por ejemplo, si o si para el muestreo de ).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)
Desafortunadamente, esto no siempre es posible ya que no todas las funciones tienen su inverso, por ejemplo, no puede usar este método con distribuciones bivariadas. También no tiene que ser el método más eficaz en todas las situaciones, en muchos casos existen mejores algoritmos.
También pregunta cuál es la distribución de . Como es un inverso de , entonces y , entonces sí, valores obtenidos usando tal método tiene la misma distribución que . Puede verificar esto mediante una simple simulaciónF - 1 XF−1X(u)F−1XF X ( F - 1 X ( u ) ) = u F - 1 X ( F X ( x ) ) = x XFXFX(F−1X(u))=uF−1X(FX(x))=xX
U <- runif(1e6)
all.equal(pnorm(qnorm(U)), U)