蒙特卡罗标准偏差方程

时间:2016-11-29 15:30:20

标签: java math montecarlo standard-deviation

我正在对某些风险执行蒙特卡罗操作,系统正常工作但标准偏差完全关闭。当我模拟这个值时,系统是100%准确的。

我所拥有的风险的输入变量是最佳案例成本值,最坏情况成本值,最可能成本价值,风险发生概率和估计值(平均值*概率)。

我目前的实现是这个(在Java / 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);
    }

进一步的例子:

如果我的风险值为:(最大值= 300,最小值= 100,最大值= 200,eV = 150,Prob = 75%)。如果我通过我的系统运行此风险,则标准偏差为26.2。我知道的值是正确的是94(虽然这需要/ 2才能正常工作)。我怎样才能得到这个值?

非常感谢任何关于更精确等式的帮助! :)

1 个答案:

答案 0 :(得分:1)

给定minmaxmode的三角分布,均值由下式给出:

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 )