2つの正規分布の合計を計算する方法
-
05-07-2019 - |
質問
ガウス分布を表す値型があります:
struct Gauss {
double mean;
double variance;
}
これらの一連の値に対して積分を実行したい:
Gauss eulerIntegrate(double dt, Gauss iv, Gauss[] values) {
Gauss r = iv;
foreach (Gauss v in values) {
r += v*dt;
}
return r;
}
私の質問は、これらの正規分布に追加を実装する方法です。
スカラー( dt
)による乗算は十分に単純に思えました。しかし、それは簡単ではありませんでした!ヘルプをありがとう FOOSHNICK p>
public static Gauss operator * (Gauss g, double d) {
return new Gauss(g.mean * d, g.variance * d * d);
}
しかし、追加は私を免れます。私は単に手段を追加できると思います。それは私に問題を引き起こしている分散です。これらの定義のどちらかが「論理的」だと思われます。私に。
public static Gauss operator + (Gauss a, Gauss b) {
double mean = a.mean + b.mean;
// Is it this? (Yes, it is!)
return new Gauss(mean, a.variance + b.variance);
// Or this? (nope)
//return new Gauss(mean, Math.Max(a.variance, b.variance));
// Or how about this? (nope)
//return new Gauss(mean, (a.variance + b.variance)/2);
}
誰でも統計的に正しい、または少なくとも「合理的な」定義を手伝うことができますか- +
演算子のバージョン?
代わりに区間演算を使用するようにコードを切り替えることができると思いますが、probとstatsの世界に留まりたいと思っていました。
解決
2つの正規分布の合計は、それ自体が正規分布です。
N(平均1、分散1)+ N(平均2、分散2)〜N(平均1 +平均2、分散1 +分散2)
これはすべてウィキペディアページにあります。
これらは実際には標準偏差ではなく分散であることに注意してください。
// X + Y
public static Gauss operator + (Gauss a, Gauss b) {
//NOTE: this is valid if X,Y are independent normal random variables
return new Gauss(a.mean + b.mean, a.variance + b.variance);
}
// X*b
public static Gauss operator * (Gauss a, double b) {
return new Gauss(a.mean*b, a.variance*b*b);
}
他のヒント
より正確には:
ランダム変数Zが2つの非相関ガウス確率変数XおよびYの線形結合として定義されている場合、Zはそれ自体がガウス確率変数です。例:
Z = aX + bYの場合、 平均(Z)= a *平均(X)+ b *平均(Y)、および分散(Z)= a 2 *分散(X)+ b 2 *分散(Y)。
ランダム変数が相関の場合、それを考慮する必要があります。 Variance(X)は、期待値E([X-mean(X)] 2 )によって定義されます。 Z = aX + bYでこれを実行すると、次のようになります。
variance(Z)= a 2 *分散(X)+ b 2 *分散(Y)+ 2ab *共分散(X、Y)
ガウス分布を持たない2つの相関のないランダム変数を合計する場合、合計の分布は 2つの成分分布の畳み込み。
2つの相関する非ガウス確率変数を合計する場合、適切な積分を自分で処理する必要があります。
まあ、スカラーによる乗算は間違っています-分散にdの2乗を掛けるべきです。定数を追加する場合、平均に追加するだけで、分散は変わりません。 2つの分布を追加する場合は、平均を追加し、分散を追加します。
誰でも統計的に正しい、または少なくとも「合理的な」定義を手伝うことができますか-+演算子のバージョン?
間違いなく、2つのディストリビューションを追加することは異なることを意味するので、各パートのmtbfが正常に分散され、システムに冗長性がなかった場合、タイトルからの最初の反応は信頼性と保守性で働いたので、システムのmtbfの分布になります。 2つの正規分布の効果の(論理)合計ではなく、2つの正規分布した独立変量の合計の分布について話している。非常に多くの場合、演算子のオーバーロードには驚くべきセマンティクスがあります。コードに特定の対象ユーザーがいない限り、関数として残し、「normalSumDistribution」と呼びます。
はあ、ガウス分布を一緒に追加できないと思っていましたが、できます!
http://mathworld.wolfram.com/NormalSumDistribution.html
実際には、平均は個々の分布の合計であり、分散は個々の分布の合計です。
あなたが「統合」と呼んでいるものが好きかどうかわかりません。一連の値にわたって。その言葉は微積分の意味ですか?数値積分を試みていますか?他にももっと良い方法があります。あなたのものは私には正しく見えません。ましてや最適なものは言うまでもありません。
ガウス分布は、すばらしく滑らかな関数です。良い求積法またはRunge-Kuttaがはるかに良いアイデアだと思います。
どのタイプの追加を行っているかに依存すると思っていたでしょう。 2つの分布の合計に等しいプロパティ(平均、標準偏差など)を持つ正規分布を取得する場合は、他の回答で指定されたプロパティの追加で問題ありません。これは、多数の正規確率分布が加算される場合、結果の確率分布が別の正規確率分布であるPERTのようなもので使用される仮定です。
追加される2つのディストリビューションが類似していない場合に問題が発生します。例えば、平均が2で標準偏差が1の確率分布と、標準偏差が2の確率分布が10の確率分布を追加すると、これらの2つの分布を合計すると、2つのピークを持つ確率分布が得られます。そして10ishに1つ。したがって、結果は通常の分布ではありません。分布の追加に関する仮定は、元の分布が非常に類似している場合、またはピークと谷が均等になるように多くの元の分布がある場合にのみ有効です。