/* * Created on Feb 1, 2008 * * TODO * * To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.seqcode.math.probability; import cern.jet.random.Normal; import cern.jet.random.engine.DRand; public class NormalDistribution { private double mean, variance, stddev; private double coeff, logcoeff; private double denom; public static double cdf(double mean, double std, double x){ DRand engine = new DRand(); Normal normal = new Normal(mean, std, engine); return normal.cdf(x); } public NormalDistribution(double m, double v) { mean = m; variance = v; coeff = 1.0 / Math.sqrt(2.0 * Math.PI * variance); logcoeff = (Math.log(Math.PI) + Math.log(variance) + Math.log(2.0)) / -2.0; denom = 2.0 * variance; stddev = Math.sqrt(variance); } public double calcZScore(Double value) { double diff = value - mean; return Math.abs(diff / stddev); } public double calcProbability(Double value) { double diff = value - mean; double exponent = - (diff*diff) / denom; return coeff * Math.exp(exponent); } public double calcLogProbability(Double value) { double diff = value - mean; double exponent = - (diff*diff) / denom; return exponent + logcoeff; } public String toString() { return String.format("[Gaussian, mean:%.3f, sd:%.3f]", mean, stddev); } }