Agora tenho a resposta para essa pergunta que fiz, mas isso me leva a outra pergunta.
Então, primeiro, a solução é a seguinte:
Para uma Cadeia de Markov estacionária com uma distribuição marginal , a função de densidade de probabilidade de em é dada por:Γ[α,p]Ptx
fPt[x]=xp−1exp[−x/α]αpΓ[p]x≥0
então o pdf condicional de em dado $ P_t = u é:Pt+1x
fPt+1|Pt[x|u]=1α(1−ρ)ρ(p−1)/2[xu](p−1)/2exp[−x+ρuα(1−ρ)]Ip−1[2ρxu√α(1−ρ)]
onde denota a função Bessel modificada. Isso fornece uma cadeia de Markov com uma distribuição marginal gama e uma estrutura de correlação AR onde é . ρ ( 1 ) ρIνρ(1)ρ
Detalhes adicionais são fornecidos em um excelente artigo de David Warren, publicado em 1986 no Journal of Hydrology, "Skewness de vazão em reservatórios lineares não sazonais com entradas distribuídas por gama" (Volume 85, pp127-137; http: // www.sciencedirect.com/science/article/pii/0022169486900806# ).
Isso é ótimo, pois responde à minha pergunta inicial; no entanto, os sistemas que quero representar com este PDF exigem a geração de séries sintéticas. Se os parâmetros de forma e escala da distribuição são grandes, isso é simples. No entanto, se eu quero que os parâmetros sejam pequenos, não consigo gerar uma série com as características apropriadas. Estou usando o MATLAB para fazer isso e o código é o seguinte:
% specify parameters for distribution
p = 0.05;
a = 0.5;
% generate first value
u = gamrnd(p,a);
$ keep a version of the margins pdf
x = 0.00001:0.00001:6;
f = (x.^(p-1)).*(exp(-x./a))./((a.^p).*gamma(p));
% specify the correlation structure
rho = 0.5;
% store the first value
input(1,1) = u;
% generate 999 other cvalues using the conditional distribution
for i = 2:1:999
i
z = (2./(a.*(1-rho))).*sqrt(rho.*x.*u);
PDF = (1./a).*(1./(1-rho)).*(rho.^(-(p-1)./2)).*((x./u).^((p-1)./2)).*...
exp(-(x+rho.*u)./(a.*(1-rho))).*besseli(p-1,z);
ycdf = cumsum(PDF,'omitnan')/sum(PDF,'omitnan');
rn = rand;
u = x(find(ycdf>rn,1));
input(i,1) = u;
end
Se eu usar números muito maiores para os parâmetros de distribuição gama, o marginal aparece no local, mas preciso usar valores pequenos. Alguma idéia de como eu posso fazer isso?