2016-11-29 8 views
1

いくつかのリスクについてモンテカルロ演算を行っていますが、システムは正しく動作しますが、標準偏差は完全にオフです。この値をシミュレートすると、システムは100%正確です。モンテカルロ標準偏差方程式

リスクの入力変数は、最良のケースコスト値、最悪のコスト値、最も高いコスト値、リスク発生確率、推定値(平均*確率)です。

私の現在の実装では、この(ジャワ/ Apexで):

public static Double calculateStandardDeviation(Decimal max, Decimal min, Decimal mostLikely, Decimal eV, Decimal prob){ 
     Double sum = 0, 
     probability = prob; 
     //uses standard SD calculation 
     sum += (min - eV) * (min - eV); 
     sum += (max - eV) * (max - eV); 
     sum += (mostLikely - eV) * (mostLikely - eV); 
     //if the probability is not 100%, apply it to the calculation 
     if(prob != 0){ 
      sum *= prob; 
     } 
     return Math.sqrt(sum); 
    } 

更なる例:

Iが値を有するリスクがある場合:(最大= 300、最小= 100、mostLikely = 200、eV = 150、Prob = 75%)。私のシステムを通じてこのリスクを実行すると、標準偏差は26.2です。私が知っている値は正しいです94(これは正しく機能するには/ 2にする必要がありますが)。この価値はどうやって得られるでしょうか?

より正確な方程式の助けがあれば幸いです。 :)

+0

あなたはここでどのような分布をしていますか?もともと、三角分布を記述していると思っていましたが、標準偏差を計算するには最小、最大、およびモードが必要です。 – andand

+0

私は三角形を使って、確率を適用しています。私はここでこの確率をテストとして適用していますので、ここでは適用しないと思うならばprobを無視してください。 –

+0

あなたがやった方程式を思いついたのはまだ分かりませんが、私が助けてくれることを希望する答えを投稿しました。三角分布の標準偏差を計算するためのソースが異なる場合は、それを入力してください。さもなければ、私はあなたのコードがstdevを計算するのに必要なものであるかどうか直ちにはわかりません。 – andand

答えて

1

minmax、及びmodeと三角分布を考慮すると、平均値は次式で与えられる。

mean = (min + max + mode)/3 

及び分散は [source]によって与えられる。

var = (min^2 + max^2 + mode^2 - min*max - min*mode - max*mode)/18 

したがって標準偏差 [source]

stdev = sqrt(var) 
     = sqrt((min^2 + max^2 + mode^2 - min*max - min*mode - max*mode)/18) 
+0

ありがとう、これは私が探していたものです。これは私が比較している値に近づくので、私はモードの代わりにEVに潜っています! –