/* * JASA Java Auction Simulator API * Copyright (C) 2013 Steve Phelps * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. */ package net.sourceforge.jabm.util; import java.io.Serializable; import org.apache.commons.math3.stat.descriptive.SummaryStatistics; import org.apache.log4j.Logger; /** * <p> * A utility class for cumulative tracking of stats for a set of doubles. * Moments are incremented dynamically, rather than keeping the actual cases in * memory. * </p> * <p> * Example usage: * </p> * <p> * <code> * Distribution series1 = new SummaryStats("series1");<br> * series1.newData(4.5);<br> * series1.newData(5.6);<br> * series1.newData(9.0);<br> * System.out.println("Standard deviation of series1 = " + series1.getStdDev());<br> * series1.newData(5.56);<br> * series1.newData(12);<br> * System.out.println("And now the standard deviation = " + series1.getStdDev());<br> * </code> * </p> * * @author Steve Phelps * @version $Revision: 230 $ */ public class SummaryStats implements Serializable, Cloneable, Resetable, Distribution { protected SummaryStatistics stats; /** * The name of this data set. */ protected String varName; static Logger logger = Logger.getLogger(SummaryStats.class); public SummaryStats(String varName) { this.varName = varName; initialise(); } public SummaryStats() { this(""); } public void initialise() { stats = new SummaryStatistics(); } /** * Add a new datum to the set. */ public void newData(double i) { stats.addValue(i); } /** * Get the number of items in the set. */ public int getN() { return (int) stats.getN(); } /** * Get the mean of the data. */ public double getMean() { return stats.getMean(); } /** * Get the variance about the mean. */ public double getVariance() { return stats.getVariance(); } /** * Get the standard deviation from the mean. */ public double getStdDev() { return stats.getStandardDeviation(); } /** * Get the minimum datum. */ public double getMin() { return stats.getMin(); } /** * Get the maximum datum. */ public double getMax() { return stats.getMax(); } /** * Get the total of the data */ public double getTotal() { return stats.getSum(); } public Object clone() throws CloneNotSupportedException { return super.clone(); } public void reset() { initialise(); } public String getName() { return varName; } public String toString() { return "(" + getClass() + " varName:" + varName + " n:" + getN() + " min:" + getMin() + " max:" + getMax() + " mean:" + getMean() + " stdev:" + getStdDev() + ")"; } public void log() { logger.info(getName()); logger.info("\tn:\t" + getN()); logger.info("\tmin:\t" + getMin()); logger.info("\tmax:\t" + getMax()); logger.info("\tmean:\t" + getMean()); logger.info("\tstdev:\t" + getStdDev()); } }