合成時系列を生成したい。時系列は、ガンマ周辺分布と AR(1)パラメーターを持つマルコフ連鎖である必要があります。AR(1)モデルのノイズ項としてガンマ分布を使用するだけでこれを実行できますか、それともより高度なアプローチを使用する必要がありますか?
合成時系列を生成したい。時系列は、ガンマ周辺分布と AR(1)パラメーターを持つマルコフ連鎖である必要があります。AR(1)モデルのノイズ項としてガンマ分布を使用するだけでこれを実行できますか、それともより高度なアプローチを使用する必要がありますか?
回答:
確かにそうだと思うかもしれませんが(最初は私もそうでした)、ただし、AR(1)プロセスには新しいパラメーターがあるでしょう。形状とスケールについては、ます。書き込み。S G T〜Γ (、S )〜G T = G T - E (G T)
次に、AR(1)はg_tで、はとしても記述できます および 思い出してください。AR(1)プロセスのプロパティによって、 および システムを解く2つのパラメーターのガンマ分布の最初の2つのモーメントの方程式を解くと、、および新しい形状パラメーターが得られます。、Y T = ρ Y T - 1 + G T Y 、T = E (G T)+ ρ Y T - 1 + 〜G T E (G T)= A S V R (G T)= A S 2 E (y t)= a s
ただし、が実際にことを示していないため、この引数は不完全です。基本的に、表現 をて、がこのような投稿を私が読んだこと(他の最近の回答も参照)は、これがガンマ変数ではないことを示唆しています。 Γ M A (∞ )Y T = A S
そうは言っても、少しのシミュレーションは、このアプローチがかなり良い近似をもたらすことを示唆しています。
n <- 50000
shape.u <- 2
scale.u <- 1
u <- rgamma(n,shape=shape.u,scale=scale.u)
rho <- 0.75
y <- arima.sim(n=n, list(ar=rho), innov = u)
hist(y, col="lightblue", freq = F, breaks = 40)
(Theoretical.mean <- shape.u*scale.u/(1-rho))
mean(y)
(Theoretical.Variance <- shape.u*scale.u^2/(1-rho^2))
var(y)
shape.y <- Theoretical.mean^2/Theoretical.Variance
scale.y <- Theoretical.Variance/Theoretical.mean
grid <- seq(0,15,0.05)
lines(grid,dgamma(grid,shape=shape.y,scale=scale.y))
plot(grid,dgamma(grid,shape=shape.y,scale=scale.y), lwd=2, col="red", type = "l")
、lines(density(y), type="l", col="lightblue", lwd=2)
実際には、n
からのカーネル密度推定density
が大丈夫であるはずの非常に大きなであっても、不一致があることを示唆しています。
これで、私が提起したこの質問への回答が得られましたが、それがさらなる質問につながります。
したがって、最初の解決策は次のとおりです。
静止マルコフ連鎖のため周辺分布の確率密度関数における次式で与えられます。
次に、$ P_t = uが指定されたでのの条件付き確率密度分布は次のとおりです。
ここで、は変更されたベッセル関数を示します。これにより、マルコフ連鎖にガンマ周辺分布、およびがであるAR相関構造が提供されます。
この詳細については、1986年にJournal of Hydrologyに掲載されたDavid Warren著の優れた論文「ガンマ分布の流入を伴う非季節性線形貯水池における流出のゆがみ」(Volume 85、pp127-137; http:// www.sciencedirect.com/science/article/pii/0022169486900806#)。
これは私の最初の質問に答えるので素晴らしいですが、このPDFで表現したいシステムでは、合成シリーズを生成する必要があります。分布の形状とスケールパラメータが大きい場合、これは簡単です。ただし、パラメーターを小さくしたい場合は、適切な特性を持つシリーズを生成できません。私はこれを行うためにMATLABを使用しており、コードは次のとおりです:
% 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
ガンマ分布パラメータにはるかに大きな数を使用すると、限界がその場で出てきますが、小さな値を使用する必要があります。どうすればこれを行うことができますか?
ガンママージンを含む一次マルコフプロセスを取得する方法はいくつかあります。このトピックに関する非常に優れた参考資料は、GK Grunwald、RJ Hyndman、およびLM Tedeskoによる論文です: AR(1)モデルの統合ビュー。
ご覧のとおり、古典的な「イノベーション形式」は、マルコフ遷移を指定する最も簡単な方法ではありません、がランダムと見なされない限り。適切に選択された分布を使用します。ベータ版とガンマ 版では、ガンママージンを取得できます。
ガンママージンのある有名な連続時間AR(1)プロセスは、 指数関数ステップを含むショットノイズプロセスであり、水文学やポアソンプロセスに関連して広く使用されています。これは離散時間サンプリングでも使用でき、革新のために混合タイプの分布を持つランダム係数AR(1)として表示されます。
コピュラに触発されたアイデアは、ガウスAR(1)プロセスを変換することです。たとえば、 ここで、はで、、その結果の周辺分布新しいプロセスにここで、でありますガンマ分布の変位値関数とは、累積標準正規密度関数です。
結果のプロセスはマルコフプロパティがありますが、次のシミュレーションに示すように、部分自己相関関数は1より大きいラグに対してカットオフしないため、AR(1)にはなりません。
phi <- .5
x <- arima.sim(model=list(ar=phi),n=1e+6,sd=sqrt(1-phi^2))
y <- qgamma(pnorm(x), shape=.1)
par(mfrow=c(2,1))
acf(y)
pacf(y)
代わりに、適切な係数を使用してをAR(p)にする場合、おそらくをほぼAR(1)にすることができます。つまり、のパックが十分に小さくなるように次数と選択します。すべてのラグが1より大きい場合。ただし、プロセスはMarkovプロパティがなくなります。y t p ϕ 1、… 、ϕ p y t y t