逆正态累积分布函数转换

时间:2016-07-26 15:13:29

标签: java c#

我们使用Extreme Optimization(http://www.extremeoptimization.com)的Extreme Numerics库作为我们的计算内核。

// portfolio risk is inverse normal cumulative distribution function
double risk = NormalDistribution.InverseDistributionFunction(
  _riskProbabilityLevel, 
  mean, 
  stdev);

问题是现在我们正在从C#转向Java而我并不是真的非常了解Java,但我们的任务是重写这个特定的功能。

我有值得测试的值:

RiskProbabilityLevel = 0.02
Mean                 = 0.06618
Standard Dev         = 0.057196166520267355

Risk                 = 0.051286461995869864

但是在查看math3.distribution.NormalDistribution库中的各种功能时,我无法找到可能相同的功能。

任何方向或帮助将不胜感激。 感谢。

1 个答案:

答案 0 :(得分:9)

我认为您可以使用this库。它被称为apache commons.math3。它非常受欢迎。从http://www.extremeoptimization.com提供的文档中我认为您可以使用以下代码:

import org.apache.commons.math3.distribution.NormalDistribution;

public class TestProbabilites {

    public static void main(String[] args) {
        double riskProbabilityLevel = 0.02D;
        double mean = 0.06618D;
        double standardDev = 0.057196166520267355D;
        double expectedRisk = 0.051286461995869864D;

        NormalDistribution distribution = new NormalDistribution(mean, standardDev);
        double outcomeRisk = distribution.inverseCumulativeProbability(riskProbabilityLevel);
    }
}

但您必须记住使用apache.commons.math3Maven或其他一些依赖项管理器添加添加到项目中的Gradle库。

希望这会有所帮助。