2016-11-29 193 views
1

我对某些风险执行蒙特卡罗操作,系统正常工作,但标准偏差完全关闭。当我模拟这个值时,系统是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,mostLikely = 200,eV = 150,Prob = 75%)。如果我通过我的系统运行这个风险,那么标准偏差是26.2。我知道的值是正确的是94(尽管这需要/ 2才能正常工作)。我如何得到这个值?

任何帮助更准确的方程将不胜感激! :)

+0

你在这里建模什么样的分布?我原本以为你在描述一个三角形分布,但只需要最小值,最大值和模式来计算标准偏差。 – andand

+0

我正在使用三角形,然后应用概率。我在这里应用了这个概率作为一个测试,所以如果你认为它不应用在这里,请忽略这个概率。 –

+0

仍然不确定你在哪里想出了你所做的等式,但是我已经发布了一个我希望能够帮助的答案。如果计算三角形分布的标准偏差有不同的来源,请提供;否则,我不会立即看到您的代码是如何计算stdev所需的。 – andand

回答

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) 
+0

谢谢,这就是我一直在寻找的东西,我在电动汽车中取代了模式,因为这使我更接近于比较价值! –