Example usage for org.apache.commons.math.distribution PoissonDistributionImpl PoissonDistributionImpl

List of usage examples for org.apache.commons.math.distribution PoissonDistributionImpl PoissonDistributionImpl

Introduction

In this page you can find the example usage for org.apache.commons.math.distribution PoissonDistributionImpl PoissonDistributionImpl.

Prototype

public PoissonDistributionImpl(double p) 

Source Link

Document

Create a new Poisson distribution with the given the mean.

Usage

From source file:de.tud.kom.p2psim.impl.util.stat.distributions.PoissonDistribution.java

/**
 * returns a random value Poisson distributed with lamda = _lamda.
 * @param _lamda/*from w  ww.j  av a  2  s  . co m*/
 * @return  as double
 */
public static double returnValue(double _lamda) {
    try {
        PoissonDistributionImpl d = new PoissonDistributionImpl(_lamda);
        return d.inverseCumulativeProbability(Simulator.getRandom().nextDouble());
    } catch (MathException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return 0;
    }
}

From source file:de.tud.kom.p2psim.impl.util.stat.distributions.PoissonDistribution.java

@XMLConfigurableConstructor({ "lambda" })
public PoissonDistribution(double lambda) {
    this.lambda = lambda;
    this.poisson = new PoissonDistributionImpl(lambda);
}

From source file:juicebox.tools.utils.common.ArrayTools.java

/**
 * poisson.pdf(k) = exp(-mu) * mu**k / k!
 *
 * @param index/*  www .  j a v  a  2s.c o  m*/
 * @param width
 * @return
 */
public static double[] generatePoissonPMF(int index, int width) {
    double mu = Math.pow(2.0, (index + 1.0) / 3.0);
    double[] poissonPMF = new double[width];

    PoissonDistributionImpl poissonDistribution = new PoissonDistributionImpl(mu);

    // use dynamic programming to grow poisson PMF
    for (int k = 0; k < width; k++) {
        poissonPMF[k] = poissonDistribution.probability(k); // the total is for scaling
    }

    return poissonPMF;
}

From source file:dr.math.distributions.PoissonDistribution.java

public static double pdf(double x, double mean) {
    PoissonDistributionImpl dist = new PoissonDistributionImpl(mean);
    return dist.probability(x);
}

From source file:dr.math.distributions.PoissonDistribution.java

public static double logPdf(double x, double mean) {
    PoissonDistributionImpl dist = new PoissonDistributionImpl(mean);
    double pdf = dist.probability(x);
    if (pdf == 0 || Double.isNaN(pdf)) { // bad estimate
        return x * Math.log(mean) - Poisson.gammln(x + 1) - mean;
    }/* ww  w  .j  a  v  a 2  s.  co m*/
    return Math.log(pdf);

}

From source file:dr.math.distributions.PoissonDistribution.java

public static double cdf(double x, double mean) {
    try {/*  w w  w .  j ava2s .c o m*/
        PoissonDistributionImpl dist = new PoissonDistributionImpl(mean);
        return dist.cumulativeProbability(x);
    } catch (MathException e) {
        throw new RuntimeException(e);
    }
}

From source file:dr.math.distributions.PoissonDistribution.java

public static double quantile(double y, double mean) {
    try {//from   ww w.  j a  v a2s  .c om
        PoissonDistributionImpl dist = new PoissonDistributionImpl(mean);
        return dist.inverseCumulativeProbability(y);
    } catch (MathException e) {
        throw new RuntimeException(e);
    }
}

From source file:desmoj.core.dist.DiscreteDistPoisson.java

/**
 * Abstract method to map a double <code>p</code> from 0...1 to the 
 * distribution's domain by determining the value x that satisfies
 * <code>P(X &lt; x) = p</code>.
 * //from w w w. ja  va  2s.  c om
 * @param p double: A value between 0 and 1
 * 
 * @return Long : The value x that satisfies <code>P(X &lt; x) = p</code>
 */
public Long getInverseOfCumulativeProbabilityFunction(double p) {

    if (p == 1.0)
        return Long.MAX_VALUE; // should be infinity, can't get closer

    PoissonDistributionImpl poi = new PoissonDistributionImpl(this.getMean());

    Long x = 0l;
    double cummulative_prob = 0;

    do {
        cummulative_prob += poi.probability(x);
        if (cummulative_prob >= p)
            return x;
        x++;
    } while (x < 10000);

    return Long.MAX_VALUE; // wrong, just an approximation
}

From source file:bacter.model.ACGCoalescent.java

@Override
public double calculateLogP() {

    // Check whether conversion count exceeds bounds.
    if (acg.getTotalConvCount() < lowerCCBoundInput.get() || acg.getTotalConvCount() > upperCCBoundInput.get())
        return Double.NEGATIVE_INFINITY;

    logP = calculateClonalFrameLogP();/*from  ww  w .j  a  va 2  s  .com*/
    double poissonMean = rhoInput.get().getValue() * acg.getClonalFrameLength()
            * (acg.getTotalConvertibleSequenceLength()
                    + acg.getConvertibleLoci().size() * (deltaInput.get().getValue() - 1.0));

    // Probability of conversion count:
    if (poissonMean > 0.0) {
        logP += -poissonMean + acg.getTotalConvCount() * Math.log(poissonMean);
        //      - GammaFunction.lnGamma(acg.getConvCount()+1);
    } else {
        if (acg.getTotalConvCount() > 0)
            logP = Double.NEGATIVE_INFINITY;
    }

    for (Locus locus : acg.getConvertibleLoci())
        for (Conversion conv : acg.getConversions(locus))
            logP += calculateConversionLogP(conv);

    // This N! takes into account the permutation invariance of
    // the individual conversions, and cancels with the N! in the
    // denominator of the Poissonian above.
    // logP += GammaFunction.lnGamma(acg.getConvCount() + 1);

    if (lowerCCBoundInput.get() > 0 || upperCCBoundInput.get() < Integer.MAX_VALUE) {
        try {
            logP -= new PoissonDistributionImpl(poissonMean).cumulativeProbability(lowerCCBoundInput.get(),
                    upperCCBoundInput.get());
        } catch (MathException e) {
            throw new RuntimeException("Error computing modification to ARG "
                    + "prior density required by conversion number constraint.");
        }
    }

    return logP;
}

From source file:edu.utexas.cs.tactex.servercustomers.factoredcustomer.ProbabilityDistribution.java

ProbabilityDistribution(FactoredCustomerService service, Element xml) {
    if (null == randomSeedRepo)
        randomSeedRepo = (RandomSeedRepo) SpringApplicationContext.getBean("randomSeedRepo");

    type = Enum.valueOf(DistType.class, xml.getAttribute("distribution"));
    switch (type) {
    case POINTMASS:
    case DEGENERATE:
        param1 = Double.parseDouble(xml.getAttribute("value"));
        sampler = new DegenerateSampler(param1);
        break;/*from   w w  w. j av  a  2 s  .co m*/
    case UNIFORM:
        param1 = Double.parseDouble(xml.getAttribute("low"));
        param2 = Double.parseDouble(xml.getAttribute("high"));
        sampler = new UniformSampler(param1, param2);
        break;
    case INTERVAL:
        param1 = Double.parseDouble(xml.getAttribute("mean"));
        param2 = Double.parseDouble(xml.getAttribute("stdDev"));
        param3 = Double.parseDouble(xml.getAttribute("low"));
        param4 = Double.parseDouble(xml.getAttribute("high"));
        sampler = new IntervalSampler(param1, param2, param3, param4);
        break;
    case NORMAL:
    case GAUSSIAN:
        param1 = Double.parseDouble(xml.getAttribute("mean"));
        param2 = Double.parseDouble(xml.getAttribute("stdDev"));
        sampler = new ContinuousSampler(new NormalDistributionImpl(param1, param2));
        break;
    case STDNORMAL:
        param1 = 0;
        param2 = 1;
        sampler = new ContinuousSampler(new NormalDistributionImpl(param1, param2));
        break;
    case LOGNORMAL:
        param1 = Double.parseDouble(xml.getAttribute("expMean"));
        param2 = Double.parseDouble(xml.getAttribute("expStdDev"));
        sampler = new LogNormalSampler(param1, param2);
        break;
    case CAUCHY:
        param1 = Double.parseDouble(xml.getAttribute("median"));
        param2 = Double.parseDouble(xml.getAttribute("scale"));
        sampler = new ContinuousSampler(new CauchyDistributionImpl(param1, param2));
        break;
    case BETA:
        param1 = Double.parseDouble(xml.getAttribute("alpha"));
        param2 = Double.parseDouble(xml.getAttribute("beta"));
        sampler = new ContinuousSampler(new BetaDistributionImpl(param1, param2));
        break;
    case BINOMIAL:
        param1 = Double.parseDouble(xml.getAttribute("trials"));
        param2 = Double.parseDouble(xml.getAttribute("success"));
        sampler = new DiscreteSampler(new BinomialDistributionImpl((int) param1, param2));
        break;
    case POISSON:
        param1 = Double.parseDouble(xml.getAttribute("lambda"));
        sampler = new DiscreteSampler(new PoissonDistributionImpl(param1));
        break;
    case CHISQUARED:
        param1 = Double.parseDouble(xml.getAttribute("dof"));
        sampler = new ContinuousSampler(new ChiSquaredDistributionImpl(param1));
        break;
    case EXPONENTIAL:
        param1 = Double.parseDouble(xml.getAttribute("mean"));
        sampler = new ContinuousSampler(new ExponentialDistributionImpl(param1));
        break;
    case GAMMA:
        param1 = Double.parseDouble(xml.getAttribute("alpha"));
        param2 = Double.parseDouble(xml.getAttribute("beta"));
        sampler = new ContinuousSampler(new GammaDistributionImpl(param1, param2));
        break;
    case WEIBULL:
        param1 = Double.parseDouble(xml.getAttribute("alpha"));
        param2 = Double.parseDouble(xml.getAttribute("beta"));
        sampler = new ContinuousSampler(new WeibullDistributionImpl(param1, param2));
        break;
    case STUDENT:
        param1 = Double.parseDouble(xml.getAttribute("dof"));
        sampler = new ContinuousSampler(new TDistributionImpl(param1));
        break;
    case SNEDECOR:
        param1 = Double.parseDouble(xml.getAttribute("d1"));
        param2 = Double.parseDouble(xml.getAttribute("d2"));
        sampler = new ContinuousSampler(new FDistributionImpl(param1, param2));
        break;
    default:
        throw new Error("Invalid probability distribution type!");
    }
    sampler.reseedRandomGenerator(service.getRandomSeedRepo()
            .getRandomSeed("factoredcustomer.ProbabilityDistribution", SeedIdGenerator.getId(), "Sampler")
            .getValue());
}