7 votos

Generando muestra aleatoria a partir de Cdf inverso sin forma cerrada.

Estoy trabajando en una distribución particular cuyo cdf inverso no existe en forma cerrada. El cdf de la distribución está dado por

$$F(x; d, m, p, \alpha, \beta) = \frac{1-(1+x^m)^{-d} \exp(-\beta x^\alpha)}{1-p(1+x^m)^{-d} \exp(-\beta x^\alpha)}$$

for strictly positive $ m, d, \ alpha, \ beta$ and $ 0 \ lt p \ lt 1 $.

Mi problema es que soy nuevo en el paquete R y necesito generar una muestra aleatoria de la distribución usando R .

4voto

Alex Chin Puntos 131

Aquí hay dos maneras de calcular aproximaciones numéricas a la inversa de la cdf, suponiendo que se han tomado decisiones para m,d,α,β y p. Ambos métodos requieren que usted puede calcular F(x) para una x dada, así que ...

m = 1
d = 2
a = 1
b = 2
p = 0.5
F = function(x) (1 - ((1+x^m)^-d) * exp(-b*x^a))  / 
    (1 - (p*(1+x^m)^-d) * exp(-b*x^a)) 

Método 1

Para calcular InvF(a), resolver la ecuación F(x) = a

InvF1 = function(a) uniroot(function(x) F(x) - a, c(0,10))$root
InvF1(0.5)
[1] 0.1038906
F(InvF1(0.5))
[1] 0.4999983

Método 2

Evaluar y = F(x) para un rango de x y, a continuación, ajuste de una curva a x como función de y.

x = c(seq(0,3, 0.001), seq(3.1,10,0.1))
y = F(x)
InvF2 = approxfun(y, x)

InvF2(0.5)
[1] 0.1038916
F(InvF2(0.5))
[1] 0.5000011

Usted puede aumentar la precisión de InvF2 mediante el uso de una densa muestreo de x, especialmente para valores pequeños de x.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X