J'ai maintenant la réponse à cette question que j'ai posée, mais cela m'amène à une autre question.
Donc, tout d'abord, la solution est la suivante:
Pour une chaîne de Markov stationnaire avec une distribution marginale , la fonction de densité de probabilité de à est donnée par:Γ [ α , p ]PtX
FPt[ x ] =Xp - 1exp[ - x / α ]αpΓ [ p ]x ≥ 0
alors le pdf conditionnel de à étant donné $ P_t = u est:Pt + 1X
FPt + 1|Pt[ x | u ] =1α ( 1 - ρ )ρ( p - 1 ) / 2[Xu]( p - 1 ) / 2exp[ -x + ρ uα ( 1 - ρ )]jep - 1[2ρ x u√α ( 1 - ρ )]
où désigne la fonction de Bessel modifiée. Cela fournit une chaîne de Markov avec une distribution marginale gamma et une structure de corrélation AR où est .jeνρ ( 1 )ρ
De plus amples détails à ce sujet sont donnés dans un excellent article de David Warren, publié en 1986 dans le Journal of Hydrology, "Outflow Skewness in non-saisonnier linear reservoirs with gamma-distribué flows" (Volume 85, pp127-137; http: // www.sciencedirect.com/science/article/pii/0022169486900806# ).
C'est génial, car cela répond à ma question initiale, cependant, les systèmes que je veux représenter avec ce PDF nécessitent la génération de séries synthétiques. Si les paramètres de forme et d'échelle de la distribution sont importants, cela est simple. Cependant, si je veux que les paramètres soient petits, je ne peux pas générer une série avec les caractéristiques appropriées. J'utilise MATLAB pour ce faire et le code est le suivant:
% 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
Si j'utilise des nombres beaucoup plus grands pour les paramètres de distribution gamma, alors le marginal ressort parfaitement, mais je dois utiliser de petites valeurs. Avez-vous des réflexions sur la façon dont je peux faire cela?