Gerando amostra aleatória a partir de Cd inverso sem forma fechada

7

Estou trabalhando em uma distribuição específica cujo cdf inverso não existe na forma fechada. O cdf da distribuição é dado por

F(x;d,m,p,α,β)=1 1-(1 1+xm)-dexp(-βxα)1 1-p(1 1+xm)-dexp(-βxα)

para e estritamente positivos .m,d,α,β0 0<p<1 1

Meu problema é que sou novo no Rpacote e preciso gerar amostra aleatória a partir da distribuição usando R.

Soma
fonte
3
Nota: esta fórmula para nem sempre fornece um cdf: você deve restringi-lo ao domínio para que ele seja definido e válido. Fx0 0
whuber
Desculpe, esqueci de colocar. É cdf com x≥0. Obrigado @Whuber.
Soma
Inverter F você vai ter que resolver y=exp(-βxα)/(1 1+xm)numericamente porque essa é uma equação transcendental. Talvez algum esquema inteligente de aceitação / rejeição esteja em ordem aqui?
StijnDeVuyst 15/10
Você verificou este tópico?
user603
Resolver a equação diretamente pode ser problemático e incerto para os quantis mais altos q. Em vez disso, resolva
registro(1 1-q)=registro(1 1-F(x;d,m,p,1 1,1 1))=registro(1 1-p-p+ez(zm+1 1)d)
para z0 0 e pegue x=(z/β)1 1/α. Um pequeno número de iterações Newton-Raphson resultará em alta precisão. (Isso é tão simples que você pode implementá-lo em uma planilha.)
whuber

Respostas:

3

Aqui estão duas maneiras de calcular aproximações numéricas ao inverso do cdf, supondo que você tenha feito escolhas para m, d, α, β e p. Ambos os métodos exigem que você possa calcular F (x) para um determinado x, então ...

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), resolva a equação 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

Avalie y = F (x) para um intervalo de x e, em seguida, ajuste uma curva a x em função 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

Você pode aumentar a precisão InvF2usando uma amostragem mais densa de x, particularmente para pequenos valores de x.

G5W
fonte