Ich habe jetzt die Antwort auf diese Frage, die ich gestellt habe, aber sie führt mich zu einer weiteren Frage.
Die Lösung lautet also zunächst wie folgt:
Für eine stationäre Markov-Kette mit einer ist die Wahrscheinlichkeitsdichtefunktion von bei gegeben durch:Γ[α,p]Ptx
fPt[x]=xp−1exp[−x/α]αpΓ[p]x≥0
dann ist das bedingte PDF von bei bei $ 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−ρ)]
wobei die modifizierte Bessel-Funktion bezeichnet. Dies stellt eine Markov - Kette mit einer Gamma - Randverteilung, und eine AR - Korrelationsstruktur in dem ist .Iνρ(1)ρ
Weitere Einzelheiten hierzu finden sich in einem ausgezeichneten Artikel von David Warren, der 1986 im Journal of Hydrology veröffentlicht wurde, "Outflow Skewness in nicht saisonalen linearen Reservoirs mit gamma-verteilten Zuflüssen" (Band 85, S. 127-137; http: //) www.sciencedirect.com/science/article/pii/0022169486900806# ).
Das ist großartig, weil es meine anfängliche Frage beantwortet. Für die Systeme, die ich mit diesem PDF darstellen möchte, müssen jedoch synthetische Serien generiert werden. Wenn die Form- und Skalierungsparameter der Verteilung groß sind, ist dies unkompliziert. Wenn ich jedoch möchte, dass die Parameter klein sind, kann ich keine Serie mit den entsprechenden Merkmalen generieren. Ich benutze MATLAB, um dies zu tun und der Code ist wie folgt:
% 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
Wenn ich viel größere Zahlen für die Gammaverteilungsparameter verwende, kommt der Rand genau heraus, aber ich muss kleine Werte verwenden. Irgendwelche Gedanken darüber, wie ich das machen kann?