Refactored statistical aggregates to separate stored, storeless implementations. Changed internal sample size counters to longs.

git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/math/trunk@141064 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Phil Steitz 2004-01-25 21:30:41 +00:00
parent 985aad0b1a
commit 1b96f28e41
30 changed files with 710 additions and 657 deletions

View File

@ -59,7 +59,7 @@ import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import org.apache.commons.math.stat.DescriptiveStatistics;
import org.apache.commons.math.stat.SummaryStatistics;
/**
* Represents an <a href="http://random.mat.sbg.ac.at/~ste/dipl/node11.html">
@ -81,7 +81,7 @@ import org.apache.commons.math.stat.DescriptiveStatistics;
* build grouped frequnecy histograms representing the input data or to
* generate random values "like" those in the input file -- i.e., the values
* generated will follow the distribution of the values in the file.
* @version $Revision: 1.12 $ $Date: 2004/01/15 05:22:08 $
* @version $Revision: 1.13 $ $Date: 2004/01/25 21:30:41 $
*/
public interface EmpiricalDistribution {
@ -123,7 +123,7 @@ public interface EmpiricalDistribution {
* @return the sample statistics
* @throws IllegalStateException if the distribution has not been loaded
*/
DescriptiveStatistics getSampleStats() throws IllegalStateException;
SummaryStatistics getSampleStats() throws IllegalStateException;
/**
* Loads a saved distribution from a file.

View File

@ -65,7 +65,7 @@ import java.io.InputStreamReader;
import java.net.URL;
import org.apache.commons.math.stat.DescriptiveStatistics;
import org.apache.commons.math.stat.StorelessDescriptiveStatisticsImpl;
import org.apache.commons.math.stat.SummaryStatistics;
/**
* Implements <code>EmpiricalDistribution</code> interface. This implementation
@ -92,7 +92,7 @@ import org.apache.commons.math.stat.StorelessDescriptiveStatisticsImpl;
* entry per line.</li>
* </ol></p>
*
* @version $Revision: 1.13 $ $Date: 2004/01/15 05:22:08 $
* @version $Revision: 1.14 $ $Date: 2004/01/25 21:30:41 $
*/
public class EmpiricalDistributionImpl implements Serializable, EmpiricalDistribution {
@ -101,7 +101,7 @@ public class EmpiricalDistributionImpl implements Serializable, EmpiricalDistrib
private ArrayList binStats = null;
/** Sample statistics */
DescriptiveStatistics sampleStats = null;
SummaryStatistics sampleStats = null;
/** number of bins */
private int binCount = 1000;
@ -175,7 +175,7 @@ public class EmpiricalDistributionImpl implements Serializable, EmpiricalDistrib
private void computeStats(BufferedReader in) throws IOException {
String str = null;
double val = 0.0;
sampleStats = new StorelessDescriptiveStatisticsImpl();
sampleStats = SummaryStatistics.newInstance();
while ((str = in.readLine()) != null) {
val = new Double(str).doubleValue();
sampleStats.addValue(val);
@ -205,7 +205,7 @@ public class EmpiricalDistributionImpl implements Serializable, EmpiricalDistrib
binStats.clear();
}
for (int i = 0; i < binCount; i++) {
DescriptiveStatistics stats = new StorelessDescriptiveStatisticsImpl();
SummaryStatistics stats = SummaryStatistics.newInstance();
binStats.add(i,stats);
}
@ -224,7 +224,7 @@ public class EmpiricalDistributionImpl implements Serializable, EmpiricalDistrib
}
if (val <= binUpperBounds[i]) {
found = true;
DescriptiveStatistics stats = (DescriptiveStatistics)binStats.get(i);
SummaryStatistics stats = (SummaryStatistics)binStats.get(i);
stats.addValue(val);
}
i++;
@ -236,11 +236,11 @@ public class EmpiricalDistributionImpl implements Serializable, EmpiricalDistrib
// Assign upperBounds based on bin counts
upperBounds = new double[binCount];
upperBounds[0] =
((double)((DescriptiveStatistics)binStats.get(0)).getN())/
((double)((SummaryStatistics)binStats.get(0)).getN())/
(double)sampleStats.getN();
for (int i = 1; i < binCount-1; i++) {
upperBounds[i] = upperBounds[i-1] +
((double)((DescriptiveStatistics)binStats.get(i)).getN())/
((double)((SummaryStatistics)binStats.get(i)).getN())/
(double)sampleStats.getN();
}
upperBounds[binCount-1] = 1.0d;
@ -263,7 +263,7 @@ public class EmpiricalDistributionImpl implements Serializable, EmpiricalDistrib
// Use this to select the bin and generate a Gaussian within the bin
for (int i = 0; i < binCount; i++) {
if (x <= upperBounds[i]) {
DescriptiveStatistics stats = (DescriptiveStatistics)binStats.get(i);
SummaryStatistics stats = (SummaryStatistics)binStats.get(i);
if (stats.getN() > 0) {
if (stats.getStandardDeviation() > 0) { // more than one obs
return randomData.nextGaussian
@ -295,7 +295,7 @@ public class EmpiricalDistributionImpl implements Serializable, EmpiricalDistrib
throw new UnsupportedOperationException("Not Implemented yet :-(");
}
public DescriptiveStatistics getSampleStats() {
public SummaryStatistics getSampleStats() {
return sampleStats;
}

View File

@ -78,7 +78,7 @@ import java.net.MalformedURLException;
* standard deviation = <code>sigma</code></li>
* <li> CONSTANT_MODE -- returns <code>mu</code> every time.</li></ul>
*
* @version $Revision: 1.10 $ $Date: 2004/01/15 05:22:08 $
* @version $Revision: 1.11 $ $Date: 2004/01/25 21:30:41 $
*
*/
public class ValueServer implements Serializable {
@ -240,7 +240,6 @@ public class ValueServer implements Serializable {
* Sets the <code>valuesFileURL</code> using a string URL representation
* @param url String representation for new valuesFileURL.
* @throws MalformedURLException if url is not well formed
* @deprecated use {@link #setValuesFileURL(URL)} to be removed before 0.1 release
*/
public void setValuesFileURL(String url) throws MalformedURLException {
this.valuesFileURL = new URL(url);

View File

@ -55,40 +55,157 @@ package org.apache.commons.math.stat;
import java.util.Arrays;
import org.apache.commons.math.stat.univariate.moment.GeometricMean;
import org.apache.commons.math.stat.univariate.moment.Kurtosis;
import org.apache.commons.math.stat.univariate.moment.Mean;
import org.apache.commons.math.stat.univariate.moment.Skewness;
import org.apache.commons.math.stat.univariate.moment.Variance;
import org.apache.commons.math.stat.univariate.rank.Max;
import org.apache.commons.math.stat.univariate.rank.Min;
import org.apache.commons.math.stat.univariate.rank.Percentile;
import org.apache.commons.math.stat.univariate.summary.Sum;
import org.apache.commons.math.stat.univariate.summary.SumOfSquares;
import org.apache.commons.math.stat.univariate.UnivariateStatistic;
/**
* Extends {@link AbstractStorelessDescriptiveStatistics} to include univariate statistics
* that may require access to the full set of sample values.
* @version $Revision: 1.2 $ $Date: 2004/01/18 03:45:02 $
* Abstract superclass for DescriptiveStatistics implementations.
*
* @version $Revision: 1.3 $ $Date: 2004/01/25 21:30:41 $
*/
public abstract class AbstractDescriptiveStatistics
extends AbstractStorelessDescriptiveStatistics {
/** Percentile */
protected Percentile percentile = new Percentile(50);
extends DescriptiveStatistics {
/**
* Create an AbstractDescriptiveStatistics
*/
public AbstractDescriptiveStatistics() {
super();
}
/**
* Create an AbstractDescriptiveStatistics with a specific Window
* @param window WindowSIze for stat calculation
*/
public AbstractDescriptiveStatistics(int window) {
super(window);
public AbstractDescriptiveStatistics(int window) {
setWindowSize(window);
}
/**
* @see org.apache.commons.math.stat.DescriptiveStatistics#getPercentile(double)
* @see org.apache.commons.math.stat.DescriptiveStatistics#getSum()
*/
public double getSum() {
return apply(new Sum());
}
/**
* @see org.apache.commons.math.stat.DescriptiveStatistics#getSumsq()
*/
public double getSumsq() {
return apply(new SumOfSquares());
}
/**
* @see org.apache.commons.math.stat.DescriptiveStatistics#getMean()
*/
public double getMean() {
return apply(new Mean());
}
/**
* @see org.apache.commons.math.stat.DescriptiveStatistics#getStandardDeviation()
*/
public double getStandardDeviation() {
double stdDev = Double.NaN;
if (getN() > 0) {
if (getN() > 1) {
stdDev = Math.sqrt(getVariance());
} else {
stdDev = 0.0;
}
}
return (stdDev);
}
/**
* @see org.apache.commons.math.stat.DescriptiveStatistics#getVariance()
*/
public double getVariance() {
return apply(new Variance());
}
/**
* @see org.apache.commons.math.stat.DescriptiveStatistics#getSkewness()
*/
public double getSkewness() {
return apply(new Skewness());
}
/**
* @see org.apache.commons.math.stat.DescriptiveStatistics#getKurtosis()
*/
public double getKurtosis() {
return apply(new Kurtosis());
}
/**
* @see org.apache.commons.math.stat.DescriptiveStatistics#getKurtosisClass()
*/
public int getKurtosisClass() {
int kClass = MESOKURTIC;
double kurtosis = getKurtosis();
if (kurtosis > 0) {
kClass = LEPTOKURTIC;
} else if (kurtosis < 0) {
kClass = PLATYKURTIC;
}
return (kClass);
}
/**
* @see org.apache.commons.math.stat.DescriptiveStatistics#getMax()
*/
public double getMax() {
return apply(new Max());
}
/**
* @see org.apache.commons.math.stat.DescriptiveStatistics#getMin()
*/
public double getMin() {
return apply(new Min());
}
/**
* @see org.apache.commons.math.stat.DescriptiveStatistics#getGeometricMean()
*/
public double getGeometricMean() {
return apply(new GeometricMean());
}
/**
* @see org.apache.commons.math.stat.DescriptiveStatistics#getPercentile()
*/
public double getPercentile(double p) {
percentile.setPercentile(p);
return apply(percentile);
return apply(new Percentile(p));
}
/**
* Generates a text report displaying
* univariate statistics from values that
* have been added.
* @return String with line feeds displaying statistics
*/
public String toString() {
StringBuffer outBuffer = new StringBuffer();
outBuffer.append("UnivariateImpl:\n");
outBuffer.append("n: " + getN() + "\n");
outBuffer.append("min: " + getMin() + "\n");
outBuffer.append("max: " + getMax() + "\n");
outBuffer.append("mean: " + getMean() + "\n");
outBuffer.append("std dev: " + getStandardDeviation() + "\n");
outBuffer.append("skewness: " + getSkewness() + "\n");
outBuffer.append("kurtosis: " + getKurtosis() + "\n");
return outBuffer.toString();
}
/**
@ -101,7 +218,7 @@ public abstract class AbstractDescriptiveStatistics
}
/**
* @see org.apache.commons.math.stat.Univariate#addValue(double)
* @see org.apache.commons.math.stat.DescriptiveStatistics#addValue(double)
*/
public abstract void addValue(double value);
@ -110,12 +227,14 @@ public abstract class AbstractDescriptiveStatistics
*/
public abstract double[] getValues();
/**
* @see org.apache.commons.math.stat.DescriptiveStatistics#getElement(int)
*/
public abstract double getElement(int index);
/**
* @see org.apache.commons.math.stat.DescriptiveStatistics#apply(UnivariateStatistic)
*/
public abstract double apply(UnivariateStatistic stat);
}

View File

@ -57,12 +57,14 @@ import java.io.Serializable;
import org.apache.commons.discovery.tools.DiscoverClass;
import org.apache.commons.math.stat.univariate.UnivariateStatistic;
/**
* Abstract factory class for univariate statistical summaries.
*
* @version $Revision: 1.3 $ $Date: 2004/01/18 03:45:02 $
* @version $Revision: 1.4 $ $Date: 2004/01/25 21:30:41 $
*/
public abstract class DescriptiveStatistics implements Serializable{
public abstract class DescriptiveStatistics implements Serializable, StatisticalSummary {
/**
* Create an instance of a <code>DescriptiveStatistics</code>
@ -195,7 +197,7 @@ public abstract class DescriptiveStatistics implements Serializable{
* Returns the number of available values
* @return The number of available values
*/
public abstract int getN();
public abstract long getN();
/**
* Returns the sum of the values that have been added to Univariate.
@ -279,5 +281,12 @@ public abstract class DescriptiveStatistics implements Serializable{
* values
*/
public abstract double getPercentile(double p);
/**
* Apply the given statistic to the data associated with this set of statistics.
* @param stat the statistic to apply
* @return the computed value of the statistic.
*/
public abstract double apply(UnivariateStatistic stat);
}

View File

@ -1,7 +1,7 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* Copyright (c) 2003-2004 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -55,26 +55,44 @@ package org.apache.commons.math.stat;
import java.io.Serializable;
import org.apache.commons.math.stat.univariate.*;
import java.util.Arrays;
import org.apache.commons.math.stat.univariate.UnivariateStatistic;
import org.apache.commons.math.util.ContractableDoubleArray;
/**
* @version $Revision: 1.2 $ $Date: 2003/11/19 03:28:23 $
* @version $Revision: 1.3 $ $Date: 2004/01/25 21:30:41 $
*/
public class DescriptiveStatisticsImpl extends AbstractDescriptiveStatistics implements Serializable {
/** A contractable double array is used. memory is reclaimed when
* the storage of the array becomes too empty.
/** hold the window size **/
protected int windowSize = INFINITE_WINDOW;
/**
* Stored data values
*/
protected ContractableDoubleArray eDA;
/**
* Construct a DescriptiveStatisticsImpl
* Construct a DescriptiveStatisticsImpl with infinite window
*/
public DescriptiveStatisticsImpl() {
super();
eDA = new ContractableDoubleArray();
}
/**
* Construct a DescriptiveStatisticsImpl with finite window
*/
public DescriptiveStatisticsImpl(int window) {
super(window);
eDA = new ContractableDoubleArray();
}
public int getWindowSize() {
return windowSize;
}
/**
* @see org.apache.commons.math.stat.DescriptiveStatistics#getValues()
*/
@ -89,6 +107,15 @@ public class DescriptiveStatisticsImpl extends AbstractDescriptiveStatistics imp
eDA.getNumElements());
return copiedArray;
}
/**
* @see org.apache.commons.math.stat.DescriptiveStatistics#getSortedValues()
*/
public double[] getSortedValues() {
double[] sort = getValues();
Arrays.sort(sort);
return sort;
}
/**
* @see org.apache.commons.math.stat.DescriptiveStatistics#getElement(int)
@ -98,14 +125,14 @@ public class DescriptiveStatisticsImpl extends AbstractDescriptiveStatistics imp
}
/**
* @see org.apache.commons.math.stat.Univariate#getN()
* @see org.apache.commons.math.stat.DescriptiveStatistics#getN()
*/
public int getN() {
public long getN() {
return eDA.getNumElements();
}
/**
* @see org.apache.commons.math.stat.Univariate#addValue(double)
* @see org.apache.commons.math.stat.DescriptiveStatistics#addValue(double)
*/
public synchronized void addValue(double v) {
if (windowSize != INFINITE_WINDOW) {
@ -125,15 +152,14 @@ public class DescriptiveStatisticsImpl extends AbstractDescriptiveStatistics imp
}
/**
* @see org.apache.commons.math.stat.Univariate#clear()
* @see org.apache.commons.math.stat.DescriptiveStatistics#clear()
*/
public synchronized void clear() {
super.clear();
eDA.clear();
}
/**
* @see org.apache.commons.math.stat.Univariate#setWindowSize(int)
* @see org.apache.commons.math.stat.DescriptiveStatistics#setWindowSize(int)
*/
public synchronized void setWindowSize(int windowSize) {
this.windowSize = windowSize;

View File

@ -0,0 +1,100 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2004 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowledgement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgement may appear in the software itself,
* if and wherever such third-party acknowledgements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their name without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.commons.math.stat;
/**
* Reporting interface for basic univariate statistics.
*
* @version $Revision: 1.1 $ $Date: 2004/01/25 21:30:41 $
*/
public interface StatisticalSummary {
/**
* Returns the <a href="http://www.xycoon.com/arithmetic_mean.htm">
* arithmetic mean </a> of the available values
* @return The mean or Double.NaN if no values have been added.
*/
public abstract double getMean();
/**
* Returns the variance of the available values.
* @return The variance, Double.NaN if no values have been added
* or 0.0 for a single value set.
*/
public abstract double getVariance();
/**
* Returns the standard deviation of the available values.
* @return The standard deviation, Double.NaN if no values have been added
* or 0.0 for a single value set.
*/
public abstract double getStandardDeviation();
/**
* Returns the maximum of the available values
* @return The max or Double.NaN if no values have been added.
*/
public abstract double getMax();
/**
* Returns the minimum of the available values
* @return The min or Double.NaN if no values have been added.
*/
public abstract double getMin();
/**
* Returns the number of available values
* @return The number of available values
*/
public abstract long getN();
/**
* Returns the sum of the values that have been added to Univariate.
* @return The sum or Double.NaN if no values have been added
*/
public abstract double getSum();
}

View File

@ -1,208 +0,0 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowledgement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgement may appear in the software itself,
* if and wherever such third-party acknowledgements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their name without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.commons.math.stat;
import java.io.Serializable;
import org.apache.commons.math.stat.univariate.*;
import org.apache.commons.math.util.FixedDoubleArray;
/**
*
* Accumulates univariate statistics for values fed in
* through the addValue() method. Does not store raw data values.
* All data are represented internally as doubles.
* Integers, floats and longs can be added, but they will be converted
* to doubles by addValue().
*
* @version $Revision: 1.2 $ $Date: 2003/11/19 03:28:23 $
*/
public class StorelessDescriptiveStatisticsImpl extends AbstractStorelessDescriptiveStatistics implements Serializable {
/** fixed storage */
private FixedDoubleArray storage = null;
/** Creates new univariate with an infinite window */
public StorelessDescriptiveStatisticsImpl() {
super();
}
/**
* Creates a new univariate with a fixed window
* @param window Window Size
*/
public StorelessDescriptiveStatisticsImpl(int window) {
super(window);
storage = new FixedDoubleArray(window);
}
/**
* If windowSize is set to Infinite, moments
* are calculated using the following
* <a href="http://www.spss.com/tech/stat/Algorithms/11.5/descriptives.pdf">
* recursive strategy
* </a>.
* Otherwise, stat methods delegate to StatUtils.
* @see org.apache.commons.math.stat.Univariate#addValue(double)
*/
public void addValue(double value) {
if (storage != null) {
/* then all getters deligate to StatUtils
* and this clause simply adds/rolls a value in the storage array
*/
if (getWindowSize() == n) {
storage.addElementRolling(value);
} else {
n++;
storage.addElement(value);
}
} else {
/* If the windowSize is infinite don't store any values and there
* is no need to discard the influence of any single item.
*/
n++;
min.increment(value);
max.increment(value);
sum.increment(value);
sumsq.increment(value);
sumLog.increment(value);
geoMean.increment(value);
moment.increment(value);
//mean.increment(value);
//variance.increment(value);
//skewness.increment(value);
//kurtosis.increment(value);
}
}
/**
* Generates a text report displaying
* univariate statistics from values that
* have been added.
* @return String with line feeds displaying statistics
*/
public String toString() {
StringBuffer outBuffer = new StringBuffer();
outBuffer.append("UnivariateImpl:\n");
outBuffer.append("n: " + getN() + "\n");
outBuffer.append("min: " + getMin() + "\n");
outBuffer.append("max: " + getMax() + "\n");
outBuffer.append("mean: " + getMean() + "\n");
outBuffer.append("std dev: " + getStandardDeviation() + "\n");
outBuffer.append("skewness: " + getSkewness() + "\n");
outBuffer.append("kurtosis: " + getKurtosis() + "\n");
return outBuffer.toString();
}
/**
* @see org.apache.commons.math.stat.Univariate#clear()
*/
public void clear() {
super.clear();
if (getWindowSize() != INFINITE_WINDOW) {
storage = new FixedDoubleArray(getWindowSize());
}
}
/**
* Apply the given statistic to this univariate collection.
* @param stat the statistic to apply
* @return the computed value of the statistic.
*/
public double apply(UnivariateStatistic stat) {
if (storage != null) {
return stat.evaluate(
storage.getValues(),
storage.start(),
storage.getNumElements());
} else if (stat instanceof StorelessUnivariateStatistic) {
return ((StorelessUnivariateStatistic) stat).getResult();
}
return Double.NaN;
}
/* (non-Javadoc)
* @see org.apache.commons.math.stat.DescriptiveStatistics#getValues()
*/
public double[] getValues() {
throw new UnsupportedOperationException("Only Available with Finite Window");
}
/* (non-Javadoc)
* @see org.apache.commons.math.stat.DescriptiveStatistics#getSortedValues()
*/
public double[] getSortedValues() {
throw new UnsupportedOperationException("Only Available with Finite Window");
}
/* (non-Javadoc)
* @see org.apache.commons.math.stat.DescriptiveStatistics#getElement(int)
*/
public double getElement(int index) {
throw new UnsupportedOperationException("Only Available with Finite Window");
}
/* (non-Javadoc)
* @see org.apache.commons.math.stat.DescriptiveStatistics#getPercentile(double)
*/
public double getPercentile(double p) {
throw new UnsupportedOperationException("Only Available with Finite Window");
}
}

View File

@ -0,0 +1,170 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2004 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowledgement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgement may appear in the software itself,
* if and wherever such third-party acknowledgements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their name without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.commons.math.stat;
import java.io.Serializable;
import org.apache.commons.discovery.tools.DiscoverClass;
/**
* Abstract factory class for univariate statistical summaries.
*
* @version $Revision: 1.1 $ $Date: 2004/01/25 21:30:41 $
*/
public abstract class SummaryStatistics implements Serializable, StatisticalSummary{
/**
* Create an instance of a <code>SummaryStatistics</code>
* @return a new factory.
*/
public static SummaryStatistics newInstance(String cls) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
return newInstance(Class.forName(cls));
}
/**
* Create an instance of a <code>DescriptiveStatistics</code>
* @return a new factory.
*/
public static SummaryStatistics newInstance(Class cls) throws InstantiationException, IllegalAccessException {
return (SummaryStatistics)cls.newInstance();
}
/**
* Create an instance of a <code>DescriptiveStatistics</code>
* @return a new factory.
*/
public static SummaryStatistics newInstance() {
SummaryStatistics factory = null;
try {
DiscoverClass dc = new DiscoverClass();
factory = (SummaryStatistics) dc.newInstance(
SummaryStatistics.class,
"org.apache.commons.math.stat.SummaryStatisticsImpl");
} catch(Exception ex) {
// ignore as default implementation will be used.
}
return factory;
}
/**
* Adds the value to the data to be summarized
* @param v the value to be added
*/
public abstract void addValue(double v);
/**
* Returns the <a href="http://www.xycoon.com/arithmetic_mean.htm">
* arithmetic mean </a> of the available values
* @return The mean or Double.NaN if no values have been added.
*/
public abstract double getMean();
/**
* Returns the <a href="http://www.xycoon.com/geometric_mean.htm">
* geometric mean </a> of the available values
* @return The geometricMean, Double.NaN if no values have been added,
* or if the productof the available values is less than or equal to 0.
*/
public abstract double getGeometricMean();
/**
* Returns the variance of the available values.
* @return The variance, Double.NaN if no values have been added
* or 0.0 for a single value set.
*/
public abstract double getVariance();
/**
* Returns the standard deviation of the available values.
* @return The standard deviation, Double.NaN if no values have been added
* or 0.0 for a single value set.
*/
public abstract double getStandardDeviation();
/**
* Returns the maximum of the available values
* @return The max or Double.NaN if no values have been added.
*/
public abstract double getMax();
/**
* Returns the minimum of the available values
* @return The min or Double.NaN if no values have been added.
*/
public abstract double getMin();
/**
* Returns the number of available values
* @return The number of available values
*/
public abstract long getN();
/**
* Returns the sum of the values that have been added to Univariate.
* @return The sum or Double.NaN if no values have been added
*/
public abstract double getSum();
/**
* Returns the sum of the squares of the available values.
* @return The sum of the squares or Double.NaN if no
* values have been added.
*/
public abstract double getSumsq();
/**
* Resets all statistics
*/
public abstract void clear();
}

View File

@ -1,7 +1,7 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003-2004 The Apache Software Foundation. All rights
* Copyright (c) 2004 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -53,12 +53,10 @@
*/
package org.apache.commons.math.stat;
import org.apache.commons.math.stat.univariate.UnivariateStatistic;
import org.apache.commons.math.stat.univariate.moment.FourthMoment;
import org.apache.commons.math.stat.univariate.moment.SecondMoment;
import org.apache.commons.math.stat.univariate.moment.FirstMoment;
import org.apache.commons.math.stat.univariate.moment.GeometricMean;
import org.apache.commons.math.stat.univariate.moment.Kurtosis;
import org.apache.commons.math.stat.univariate.moment.Mean;
import org.apache.commons.math.stat.univariate.moment.Skewness;
import org.apache.commons.math.stat.univariate.moment.Variance;
import org.apache.commons.math.stat.univariate.rank.Max;
import org.apache.commons.math.stat.univariate.rank.Min;
@ -67,21 +65,20 @@ import org.apache.commons.math.stat.univariate.summary.SumOfLogs;
import org.apache.commons.math.stat.univariate.summary.SumOfSquares;
/**
* Provides a default {@link DescriptiveStatistics} implementation, including only statistics
* that can be computed in one pass through the data without storing the full set of sample
* data values.
* @version $Revision: 1.2 $ $Date: 2004/01/18 03:45:02 $
* Provides a default {@link SummaryStatistics} implementation.
*
* @version $Revision: 1.1 $ $Date: 2004/01/25 21:30:41 $
*/
public abstract class AbstractStorelessDescriptiveStatistics extends DescriptiveStatistics {
/** hold the window size **/
protected int windowSize = INFINITE_WINDOW;
public class SummaryStatisticsImpl extends SummaryStatistics {
/** count of values that have been added */
protected int n = 0;
protected long n = 0;
/** FourthMoment is used in calculating mean, variance,skew and kurtosis */
protected FourthMoment moment = null;
/** FirstMoment is used to compute the mean */
protected FirstMoment firstMoment = null;
/** SecondMoment is used to compute the variance */
protected SecondMoment secondMoment = null;
/** sum of values that have been added */
protected Sum sum = null;
@ -107,63 +104,41 @@ public abstract class AbstractStorelessDescriptiveStatistics extends Descriptive
/** variance of values that have been added */
protected Variance variance = null;
/** skewness of values that have been added */
protected Skewness skewness = null;
/** kurtosis of values that have been added */
protected Kurtosis kurtosis = null;
/**
* Construct an AbstractStorelessDescriptiveStatistics
* Construct a SummaryStatistics
*/
public AbstractStorelessDescriptiveStatistics() {
super();
public SummaryStatisticsImpl() {
sum = new Sum();
sumsq = new SumOfSquares();
min = new Min();
max = new Max();
sumLog = new SumOfLogs();
geoMean = new GeometricMean();
moment = new FourthMoment();
mean = new Mean(moment);
variance = new Variance(moment);
skewness = new Skewness(moment);
kurtosis = new Kurtosis(moment);
secondMoment = new SecondMoment();
firstMoment = new FirstMoment();
}
/**
* Construct an AbstractStorelessDescriptiveStatistics with a window
* @param window The Window Size
* Add a value to the data
*
* @param value the value to add
*/
public AbstractStorelessDescriptiveStatistics(int window) {
this();
setWindowSize(window);
public void addValue(double value) {
sum.increment(value);
sumsq.increment(value);
min.increment(value);
max.increment(value);
sumLog.increment(value);
geoMean.increment(value);
firstMoment.increment(value);
secondMoment.increment(value);
n++;
}
/**
* Apply the given statistic to this univariate collection.
* @param stat the statistic to apply
* @return the computed value of the statistic.
*/
public abstract double apply(UnivariateStatistic stat);
/**
* If windowSize is set to Infinite,
* statistics are calculated using the following
* <a href="http://www.spss.com/tech/stat/Algorithms/11.5/descriptives.pdf">
* recursive strategy
* </a>.
* @see org.apache.commons.math.stat.Univariate#addValue(double)
*/
public abstract void addValue(double value);
/**
* @see org.apache.commons.math.stat.Univariate#getN()
*/
public int getN() {
public long getN() {
return n;
}
@ -171,26 +146,37 @@ public abstract class AbstractStorelessDescriptiveStatistics extends Descriptive
* @see org.apache.commons.math.stat.Univariate#getSum()
*/
public double getSum() {
return apply(sum);
return sum.getResult();
}
/**
* @see org.apache.commons.math.stat.Univariate#getSumsq()
* Returns the sum of the squares of the values that have been added.
* <p>
* Double.NaN is returned if no values have been added.</p>
*
* @return The sum of squares
*/
public double getSumsq() {
return apply(sumsq);
return sumsq.getResult();
}
/**
* @see org.apache.commons.math.stat.Univariate#getMean()
* Returns the mean of the values that have been added.
* <p>
* Double.NaN is returned if no values have been added.</p>
*
* @return the mean
*/
public double getMean() {
return apply(mean);
return new Mean(firstMoment).getResult();
}
/**
* Returns the standard deviation for this collection of values
* @see org.apache.commons.math.stat.Univariate#getStandardDeviation()
* Returns the standard deviation of the values that have been added.
* <p>
* Double.NaN is returned if no values have been added.</p>
*
* @return the standard deviation
*/
public double getStandardDeviation() {
double stdDev = Double.NaN;
@ -205,104 +191,69 @@ public abstract class AbstractStorelessDescriptiveStatistics extends Descriptive
}
/**
* Returns the variance of the values that have been added via West's
* algorithm as described by
* <a href="http://doi.acm.org/10.1145/359146.359152">Chan, T. F. and
* J. G. Lewis 1979, <i>Communications of the ACM</i>,
* vol. 22 no. 9, pp. 526-531.</a>.
* Returns the variance of the values that have been added.
* <p>
* Double.NaN is returned if no values have been added.</p>
*
* @return The variance of a set of values.
* Double.NaN is returned for an empty
* set of values and 0.0 is returned for
* a &lt;= 1 value set.
* @return the variance
*/
public double getVariance() {
return apply(variance);
return new Variance(secondMoment).getResult();
}
/**
* Returns the skewness of the values that have been added as described by
* <a href="http://mathworld.wolfram.com/k-Statistic.html">
* Equation (6) for k-Statistics</a>.
* @return The skew of a set of values. Double.NaN is returned for
* an empty set of values and 0.0 is returned for a
* &lt;= 2 value set.
*/
public double getSkewness() {
return apply(skewness);
}
/**
* Returns the kurtosis of the values that have been added as described by
* <a href="http://mathworld.wolfram.com/k-Statistic.html">
* Equation (7) for k-Statistics</a>.
* Returns the maximum of the values that have been added.
* <p>
* Double.NaN is returned if no values have been added.</p>
*
* @return The kurtosis of a set of values. Double.NaN is returned for
* an empty set of values and 0.0 is returned for a &lt;= 3
* value set.
*/
public double getKurtosis() {
return apply(kurtosis);
}
/**
* @see org.apache.commons.math.stat.DescriptiveStatistics#getKurtosisClass()
*/
public int getKurtosisClass() {
int kClass = MESOKURTIC;
double kurtosis = getKurtosis();
if (kurtosis > 0) {
kClass = LEPTOKURTIC;
} else if (kurtosis < 0) {
kClass = PLATYKURTIC;
}
return (kClass);
}
/**
* @see org.apache.commons.math.stat.Univariate#getMax()
* @return the maximum
*/
public double getMax() {
return apply(max);
return max.getResult();
}
/**
* @see org.apache.commons.math.stat.Univariate#getMin()
* Returns the minimum of the values that have been added.
* <p>
* Double.NaN is returned if no values have been added.</p>
*
* @return the minimum
*/
public double getMin() {
return apply(min);
return min.getResult();
}
/**
* @see org.apache.commons.math.stat.Univariate#getGeometricMean()
*/
* Returns the geometric mean of the values that have been added.
* <p>
* Double.NaN is returned if no values have been added.</p>
*
* @return the geometric mean
*/
public double getGeometricMean() {
return apply(geoMean);
return geoMean.getResult();
}
/**
* Generates a text report displaying
* univariate statistics from values that
* summary statistics from values that
* have been added.
* @return String with line feeds displaying statistics
*/
public String toString() {
StringBuffer outBuffer = new StringBuffer();
outBuffer.append("UnivariateImpl:\n");
outBuffer.append("SummaryStatistics:\n");
outBuffer.append("n: " + n + "\n");
outBuffer.append("min: " + min + "\n");
outBuffer.append("max: " + max + "\n");
outBuffer.append("mean: " + getMean() + "\n");
outBuffer.append("std dev: " + getStandardDeviation() + "\n");
outBuffer.append("skewness: " + getSkewness() + "\n");
outBuffer.append("kurtosis: " + getKurtosis() + "\n");
return outBuffer.toString();
}
/**
* @see org.apache.commons.math.stat.Univariate#clear()
*/
/**
* Resets all statistics and storage
*/
public void clear() {
this.n = 0;
min.clear();
@ -311,27 +262,8 @@ public abstract class AbstractStorelessDescriptiveStatistics extends Descriptive
sumLog.clear();
sumsq.clear();
geoMean.clear();
moment.clear();
mean.clear();
variance.clear();
skewness.clear();
kurtosis.clear();
}
/**
* @see org.apache.commons.math.stat.Univariate#getWindowSize()
*/
public int getWindowSize() {
return windowSize;
}
/**
* @see org.apache.commons.math.stat.Univariate#setWindowSize(int)
*/
public void setWindowSize(int windowSize) {
clear();
this.windowSize = windowSize;
firstMoment.clear();
secondMoment.clear();
}
}

View File

@ -1,7 +1,7 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* Copyright (c) 2003-2004 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -58,7 +58,7 @@ import org.apache.commons.math.MathException;
/**
* A collection of commonly used test statistics and statistical tests.
*
* @version $Revision: 1.10 $ $Date: 2003/11/19 03:22:54 $
* @version $Revision: 1.11 $ $Date: 2004/01/25 21:30:41 $
*/
public interface TestStatistic {
@ -356,7 +356,7 @@ public interface TestStatistic {
* @return t statistic
* @throws IllegalArgumentException if the precondition is not met
*/
double t(double mu, DescriptiveStatistics sampleStats)
double t(double mu, StatisticalSummary sampleStats)
throws IllegalArgumentException, MathException;
/**
@ -377,7 +377,7 @@ public interface TestStatistic {
* @return t statistic
* @throws IllegalArgumentException if the precondition is not met
*/
double t(DescriptiveStatistics sampleStats1, DescriptiveStatistics sampleStats2)
double t(StatisticalSummary sampleStats1, StatisticalSummary sampleStats2)
throws IllegalArgumentException, MathException;
/**
@ -406,12 +406,12 @@ public interface TestStatistic {
* at least 5 observations.
* </li></ul>
*
* @param sampleStats1 DescriptiveStatistics describing data from the first sample
* @param sampleStats2 DescriptiveStatistics describing data from the second sample
* @param sampleStats1 StatisticalSummary describing data from the first sample
* @param sampleStats2 StatisticalSummary describing data from the second sample
* @return p-value for t-test
* @throws IllegalArgumentException if the precondition is not met
*/
double tTest(DescriptiveStatistics sampleStats1, DescriptiveStatistics sampleStats2)
double tTest(StatisticalSummary sampleStats1, StatisticalSummary sampleStats2)
throws IllegalArgumentException, MathException;
/**
@ -453,14 +453,14 @@ public interface TestStatistic {
* <li> <code> 0 < alpha < 0.5 </code>
* </li></ul>
*
* @param sampleStats1 DescriptiveStatistics describing sample data values
* @param sampleStats2 DescriptiveStatistics describing sample data values
* @param sampleStats1 StatisticalSummary describing sample data values
* @param sampleStats2 StatisticalSummary describing sample data values
* @param alpha significance level of the test
* @return true if the null hypothesis can be rejected with
* confidence 1 - alpha
* @throws IllegalArgumentException if the preconditions are not met
*/
boolean tTest(DescriptiveStatistics sampleStats1, DescriptiveStatistics sampleStats2,
boolean tTest(StatisticalSummary sampleStats1, StatisticalSummary sampleStats2,
double alpha)
throws IllegalArgumentException, MathException;
@ -495,12 +495,12 @@ public interface TestStatistic {
* </li></ul>
*
* @param mu constant value to compare sample mean against
* @param sampleStats DescriptiveStatistics describing sample data values
* @param sampleStats StatisticalSummary describing sample data values
* @param alpha significance level of the test
* @return p-value
* @throws IllegalArgumentException if the precondition is not met
*/
boolean tTest(double mu, DescriptiveStatistics sampleStats, double alpha)
boolean tTest(double mu, StatisticalSummary sampleStats, double alpha)
throws IllegalArgumentException, MathException;
/**
@ -526,11 +526,11 @@ public interface TestStatistic {
* </li></ul>
*
* @param mu constant value to compare sample mean against
* @param sampleStats DescriptiveStatistics describing sample data
* @param sampleStats StatisticalSummary describing sample data
* @return p-value
* @throws IllegalArgumentException if the precondition is not met
*/
double tTest(double mu, DescriptiveStatistics sampleStats)
double tTest(double mu, StatisticalSummary sampleStats)
throws IllegalArgumentException, MathException;
}

View File

@ -1,7 +1,7 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* Copyright (c) 2003-2004 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -64,7 +64,7 @@ import org.apache.commons.math.distribution.ChiSquaredDistribution;
/**
* Implements test statistics defined in the TestStatistic interface.
*
* @version $Revision: 1.10 $ $Date: 2003/11/19 03:22:54 $
* @version $Revision: 1.11 $ $Date: 2004/01/25 21:30:41 $
*/
public class TestStatisticImpl implements TestStatistic, Serializable {
@ -255,11 +255,11 @@ public class TestStatisticImpl implements TestStatistic, Serializable {
/**
* @param mu comparison constant
* @param sampleStats DescriptiveStatistics holding sample summary statitstics
* @param sampleStats StatisticalSummary holding sample summary statitstics
* @return t statistic
* @throws IllegalArgumentException if the precondition is not met
*/
public double t(double mu, DescriptiveStatistics sampleStats)
public double t(double mu, StatisticalSummary sampleStats)
throws IllegalArgumentException {
if ((sampleStats == null) || (sampleStats.getN() < 5)) {
throw new IllegalArgumentException("insufficient data for t statistic");
@ -272,14 +272,14 @@ public class TestStatisticImpl implements TestStatistic, Serializable {
}
/**
* @param sampleStats1 DescriptiveStatistics describing data from the first sample
* @param sampleStats2 DescriptiveStatistics describing data from the second sample
* @param sampleStats1 StatisticalSummary describing data from the first sample
* @param sampleStats2 StatisticalSummary describing data from the second sample
* @return t statistic
* @throws IllegalArgumentException if the precondition is not met
*/
public double t(
DescriptiveStatistics sampleStats1,
DescriptiveStatistics sampleStats2)
StatisticalSummary sampleStats1,
StatisticalSummary sampleStats2)
throws IllegalArgumentException {
if ((sampleStats1 == null)
|| (sampleStats2 == null
@ -296,14 +296,14 @@ public class TestStatisticImpl implements TestStatistic, Serializable {
}
/**
* @param sampleStats1 DescriptiveStatistics describing data from the first sample
* @param sampleStats2 DescriptiveStatistics describing data from the second sample
* @param sampleStats1 StatisticalSummary describing data from the first sample
* @param sampleStats2 StatisticalSummary describing data from the second sample
* @return p-value for t-test
* @throws IllegalArgumentException if the precondition is not met
*/
public double tTest(
DescriptiveStatistics sampleStats1,
DescriptiveStatistics sampleStats2)
StatisticalSummary sampleStats1,
StatisticalSummary sampleStats2)
throws IllegalArgumentException, MathException {
if ((sampleStats1 == null)
|| (sampleStats2 == null
@ -320,16 +320,16 @@ public class TestStatisticImpl implements TestStatistic, Serializable {
}
/**
* @param sampleStats1 DescriptiveStatistics describing sample data values
* @param sampleStats2 DescriptiveStatistics describing sample data values
* @param sampleStats1 StatisticalSummary describing sample data values
* @param sampleStats2 StatisticalSummary describing sample data values
* @param alpha significance level of the test
* @return true if the null hypothesis can be rejected with
* confidence 1 - alpha
* @throws IllegalArgumentException if the preconditions are not met
*/
public boolean tTest(
DescriptiveStatistics sampleStats1,
DescriptiveStatistics sampleStats2,
StatisticalSummary sampleStats1,
StatisticalSummary sampleStats2,
double alpha)
throws IllegalArgumentException, MathException {
if ((alpha <= 0) || (alpha > 0.5)) {
@ -341,14 +341,14 @@ public class TestStatisticImpl implements TestStatistic, Serializable {
/**
* @param mu constant value to compare sample mean against
* @param sampleStats DescriptiveStatistics describing sample data values
* @param sampleStats StatisticalSummary describing sample data values
* @param alpha significance level of the test
* @return p-value
* @throws IllegalArgumentException if the precondition is not met
*/
public boolean tTest(
double mu,
DescriptiveStatistics sampleStats,
StatisticalSummary sampleStats,
double alpha)
throws IllegalArgumentException, MathException {
if ((alpha <= 0) || (alpha > 0.5)) {
@ -360,11 +360,11 @@ public class TestStatisticImpl implements TestStatistic, Serializable {
/**
* @param mu constant value to compare sample mean against
* @param sampleStats DescriptiveStatistics describing sample data
* @param sampleStats StatisticalSummary describing sample data
* @return p-value
* @throws IllegalArgumentException if the precondition is not met
*/
public double tTest(double mu, DescriptiveStatistics sampleStats)
public double tTest(double mu, StatisticalSummary sampleStats)
throws IllegalArgumentException, MathException {
if ((sampleStats == null) || (sampleStats.getN() < 5)) {
throw new IllegalArgumentException("insufficient data for t statistic");

View File

@ -1,7 +1,7 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* Copyright (c) 2003-2004 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -64,14 +64,14 @@ import org.apache.commons.math.stat.univariate.AbstractStorelessUnivariateStatis
* <a href="http://www.spss.com/tech/stat/Algorithms/11.5/descriptives.pdf">
* recursive strategy
* </a>. Both incremental and evaluation strategies currently use this approach.
* @version $Revision: 1.11 $ $Date: 2003/11/19 03:28:24 $
* @version $Revision: 1.12 $ $Date: 2004/01/25 21:30:41 $
*/
public class FirstMoment extends AbstractStorelessUnivariateStatistic implements Serializable{
static final long serialVersionUID = -803343206421984070L;
static final long serialVersionUID = -803343206421984070L;
/** count of values that have been added */
protected int n = 0;
protected long n = 0;
/** first moment of values that have been added */
protected double m1 = Double.NaN;

View File

@ -1,7 +1,7 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* Copyright (c) 2003-2004 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -60,14 +60,14 @@ import org.apache.commons.math.stat.univariate.summary.SumOfLogs;
/**
* Returns the <a href="http://www.xycoon.com/geometric_mean.htm">
* geometric mean </a> of the available values
* @version $Revision: 1.14 $ $Date: 2003/11/19 03:28:24 $
* @version $Revision: 1.15 $ $Date: 2004/01/25 21:30:41 $
*/
public class GeometricMean extends SumOfLogs implements Serializable{
static final long serialVersionUID = -8178734905303459453L;
/** */
protected int n = 0;
protected long n = 0;
/** */
private double geoMean = Double.NaN;

View File

@ -1,7 +1,7 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* Copyright (c) 2003-2004 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -64,7 +64,7 @@ import org
.AbstractStorelessUnivariateStatistic;
/**
* @version $Revision: 1.14 $ $Date: 2003/11/19 03:28:24 $
* @version $Revision: 1.15 $ $Date: 2004/01/25 21:30:41 $
*/
public class Kurtosis extends AbstractStorelessUnivariateStatistic implements Serializable {
@ -80,7 +80,7 @@ public class Kurtosis extends AbstractStorelessUnivariateStatistic implements Se
private double kurtosis = Double.NaN;
/** */
private int n = 0;
private long n = 0;
/**
* Construct a Kurtosis

View File

@ -1,7 +1,7 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* Copyright (c) 2003-2004 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -58,7 +58,7 @@ import java.io.Serializable;
import org.apache.commons.math.stat.univariate.AbstractStorelessUnivariateStatistic;
/**
* @version $Revision: 1.14 $ $Date: 2003/11/19 03:28:24 $
* @version $Revision: 1.15 $ $Date: 2004/01/25 21:30:41 $
*/
public class Skewness extends AbstractStorelessUnivariateStatistic implements Serializable {
@ -74,7 +74,7 @@ public class Skewness extends AbstractStorelessUnivariateStatistic implements Se
protected double skewness = Double.NaN;
/** */
private int n = 0;
private long n = 0;
/**
* Constructs a Skewness

View File

@ -58,8 +58,12 @@ import java.io.Serializable;
import org.apache.commons.math.stat.univariate.AbstractStorelessUnivariateStatistic;
/**
*
* @version $Revision: 1.14 $ $Date: 2003/11/19 03:28:24 $
* Updating forumulas use West's algorithm as described in
* <a href="http://doi.acm.org/10.1145/359146.359152">Chan, T. F. and
* J. G. Lewis 1979, <i>Communications of the ACM</i>,
* vol. 22 no. 9, pp. 526-531.</a>.
*
* @version $Revision: 1.15 $ $Date: 2004/01/25 21:30:41 $
*/
public class Variance extends AbstractStorelessUnivariateStatistic implements Serializable {
@ -87,7 +91,7 @@ public class Variance extends AbstractStorelessUnivariateStatistic implements Se
* If the external SecondMoment is used, the this is updated from
* that moments counter
*/
protected int n = 0;
protected long n = 0;
/**
* Constructs a Variance.

View File

@ -1,7 +1,7 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* Copyright (c) 2003-2004 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -64,14 +64,14 @@ import org
.AbstractStorelessUnivariateStatistic;
/**
* @version $Revision: 1.12 $ $Date: 2003/11/19 03:28:24 $
* @version $Revision: 1.13 $ $Date: 2004/01/25 21:30:41 $
*/
public class Max extends AbstractStorelessUnivariateStatistic implements Serializable {
static final long serialVersionUID = -5593383832225844641L;
/** */
private int n = 0;
private long n = 0;
/** */
private double value = Double.NaN;

View File

@ -1,7 +1,7 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* Copyright (c) 2003-2004 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -64,14 +64,14 @@ import org
.AbstractStorelessUnivariateStatistic;
/**
* @version $Revision: 1.12 $ $Date: 2003/11/19 03:28:24 $
* @version $Revision: 1.13 $ $Date: 2004/01/25 21:30:41 $
*/
public class Min extends AbstractStorelessUnivariateStatistic implements Serializable {
static final long serialVersionUID = -2941995784909003131L;
/** */
private int n = 0;
private long n = 0;
/** */
private double value = Double.NaN;

View File

@ -60,13 +60,12 @@ import java.io.File;
import java.net.URL;
import java.net.URLDecoder;
import org.apache.commons.math.stat.DescriptiveStatistics;
import org.apache.commons.math.stat.StorelessDescriptiveStatisticsImpl;
import org.apache.commons.math.stat.SummaryStatistics;
/**
* Test cases for the EmpiricalDistribution class
*
* @version $Revision: 1.10 $ $Date: 2004/01/15 05:22:08 $
* @version $Revision: 1.11 $ $Date: 2004/01/25 21:30:41 $
*/
public final class EmpiricalDistributionTest extends TestCase {
@ -150,7 +149,7 @@ public final class EmpiricalDistributionTest extends TestCase {
private void tstGen(double tolerance)throws Exception {
empiricalDistribution.load(file);
DescriptiveStatistics stats = new StorelessDescriptiveStatisticsImpl();
SummaryStatistics stats = SummaryStatistics.newInstance();
for (int i = 1; i < 1000; i++) {
stats.addValue(empiricalDistribution.getNextValue());
}

View File

@ -61,14 +61,13 @@ import java.security.NoSuchAlgorithmException;
import java.util.HashSet;
import org.apache.commons.math.stat.Frequency;
import org.apache.commons.math.stat.StorelessDescriptiveStatisticsImpl;
import org.apache.commons.math.stat.SummaryStatistics;
import org.apache.commons.math.stat.TestStatisticImpl;
import org.apache.commons.math.stat.DescriptiveStatistics;
/**
* Test cases for the RandomData class.
*
* @version $Revision: 1.8 $ $Date: 2003/11/15 16:01:40 $
* @version $Revision: 1.9 $ $Date: 2004/01/25 21:30:41 $
*/
public final class RandomDataTest extends TestCase {
@ -405,7 +404,7 @@ public final class RandomDataTest extends TestCase {
} catch (IllegalArgumentException ex) {
;
}
DescriptiveStatistics u = new StorelessDescriptiveStatisticsImpl();
SummaryStatistics u = SummaryStatistics.newInstance();
for (int i = 0; i<largeSampleSize; i++) {
u.addValue(randomData.nextGaussian(0,1));
}

View File

@ -58,13 +58,12 @@ import junit.framework.TestCase;
import junit.framework.TestSuite;
import java.net.URL;
import org.apache.commons.math.stat.DescriptiveStatistics;
import org.apache.commons.math.stat.StorelessDescriptiveStatisticsImpl;
import org.apache.commons.math.stat.SummaryStatistics;
/**
* Test cases for the ValueServer class.
*
* @version $Revision: 1.11 $ $Date: 2004/01/15 07:31:44 $
* @version $Revision: 1.12 $ $Date: 2004/01/25 21:30:41 $
*/
public final class ValueServerTest extends TestCase {
@ -103,7 +102,7 @@ public final class ValueServerTest extends TestCase {
vs.computeDistribution();
assertTrue("empirical distribution property",
vs.getEmpiricalDistribution() != null);
DescriptiveStatistics stats = new StorelessDescriptiveStatisticsImpl();
SummaryStatistics stats = SummaryStatistics.newInstance();
for (int i = 1; i < 1000; i++) {
next = vs.getNext();
stats.addValue(next);
@ -114,7 +113,7 @@ public final class ValueServerTest extends TestCase {
tolerance);
vs.computeDistribution(500);
stats = new StorelessDescriptiveStatisticsImpl();
stats = SummaryStatistics.newInstance();
for (int i = 1; i < 1000; i++) {
next = vs.getNext();
stats.addValue(next);

View File

@ -61,14 +61,13 @@ import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.commons.logging.*;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
/**
* Test cases for the {@link DescriptiveStatistics} class.
* @version $Revision: 1.12 $ $Date: 2003/11/15 16:01:40 $
* @version $Revision: 1.13 $ $Date: 2004/01/25 21:30:41 $
*/
public class CertifiedDataTest extends TestCase {
protected DescriptiveStatistics u = null;
public class CertifiedDataTest extends TestCase {
protected double mean = Double.NaN;
@ -103,9 +102,9 @@ public class CertifiedDataTest extends TestCase {
* Test StorelessDescriptiveStatistics
*/
public void testUnivariateImpl() {
SummaryStatistics u = null;
try {
u = DescriptiveStatistics.newInstance(StorelessDescriptiveStatisticsImpl.class);
u = SummaryStatistics.newInstance(SummaryStatisticsImpl.class);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
@ -114,19 +113,19 @@ public class CertifiedDataTest extends TestCase {
e.printStackTrace();
}
loadStats("data/Lew.txt");
loadStats("data/Lew.txt", u);
assertEquals("Lew: std", std, u.getStandardDeviation(), .000000000001);
assertEquals("Lew: mean", mean, u.getMean(), .000000000001);
loadStats("data/Lottery.txt");
loadStats("data/Lottery.txt", u);
assertEquals("Lottery: std", std, u.getStandardDeviation(), .000000000001);
assertEquals("Lottery: mean", mean, u.getMean(), .000000000001);
loadStats("data/PiDigits.txt");
loadStats("data/PiDigits.txt", u);
assertEquals("PiDigits: std", std, u.getStandardDeviation(), .0000000000001);
assertEquals("PiDigits: mean", mean, u.getMean(), .0000000000001);
loadStats("data/Mavro.txt");
loadStats("data/Mavro.txt", u);
assertEquals("Mavro: std", std, u.getStandardDeviation(), .00000000000001);
assertEquals("Mavro: mean", mean, u.getMean(), .00000000000001);
@ -134,7 +133,7 @@ public class CertifiedDataTest extends TestCase {
//assertEquals("Michelso: std", std, u.getStandardDeviation(), .00000000000001);
//assertEquals("Michelso: mean", mean, u.getMean(), .00000000000001);
loadStats("data/NumAcc1.txt");
loadStats("data/NumAcc1.txt", u);
assertEquals("NumAcc1: std", std, u.getStandardDeviation(), .00000000000001);
assertEquals("NumAcc1: mean", mean, u.getMean(), .00000000000001);
@ -148,21 +147,21 @@ public class CertifiedDataTest extends TestCase {
*/
public void testStoredUnivariateImpl() {
u = DescriptiveStatistics.newInstance();
DescriptiveStatistics u = DescriptiveStatistics.newInstance();
loadStats("data/Lew.txt");
loadStats("data/Lew.txt", u);
assertEquals("Lew: std", std, u.getStandardDeviation(), .000000000001);
assertEquals("Lew: mean", mean, u.getMean(), .000000000001);
loadStats("data/Lottery.txt");
loadStats("data/Lottery.txt", u);
assertEquals("Lottery: std", std, u.getStandardDeviation(), .000000000001);
assertEquals("Lottery: mean", mean, u.getMean(), .000000000001);
loadStats("data/PiDigits.txt");
loadStats("data/PiDigits.txt", u);
assertEquals("PiDigits: std", std, u.getStandardDeviation(), .0000000000001);
assertEquals("PiDigits: mean", mean, u.getMean(), .0000000000001);
loadStats("data/Mavro.txt");
loadStats("data/Mavro.txt", u);
assertEquals("Mavro: std", std, u.getStandardDeviation(), .00000000000001);
assertEquals("Mavro: mean", mean, u.getMean(), .00000000000001);
@ -170,7 +169,7 @@ public class CertifiedDataTest extends TestCase {
//assertEquals("Michelso: std", std, u.getStandardDeviation(), .00000000000001);
//assertEquals("Michelso: mean", mean, u.getMean(), .00000000000001);
loadStats("data/NumAcc1.txt");
loadStats("data/NumAcc1.txt", u);
assertEquals("NumAcc1: std", std, u.getStandardDeviation(), .00000000000001);
assertEquals("NumAcc1: mean", mean, u.getMean(), .00000000000001);
@ -182,12 +181,19 @@ public class CertifiedDataTest extends TestCase {
/**
* loads a DescriptiveStatistics off of a test file
* @param file
* @param statistical summary
*/
private void loadStats(String resource) {
private void loadStats(String resource, Object u) {
DescriptiveStatistics d = null;
SummaryStatistics s = null;
if (u instanceof DescriptiveStatistics) {
d = (DescriptiveStatistics) u;
} else {
s = (SummaryStatistics) u;
}
try {
u.clear();
u.getClass().getDeclaredMethod("clear", null).invoke(u, null);
mean = Double.NaN;
std = Double.NaN;
@ -215,8 +221,11 @@ public class CertifiedDataTest extends TestCase {
line = in.readLine();
while (line != null) {
u.addValue(Double.parseDouble(line.trim()));
if (d != null) {
d.addValue(Double.parseDouble(line.trim()));
} else {
s.addValue(Double.parseDouble(line.trim()));
}
line = in.readLine();
}
@ -226,6 +235,8 @@ public class CertifiedDataTest extends TestCase {
log.error(fnfe.getMessage(), fnfe);
} catch (IOException ioe) {
log.error(ioe.getMessage(), ioe);
} catch (Exception ioe) {
log.error(ioe.getMessage(), ioe);
}
}
}

View File

@ -1,7 +1,7 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* Copyright (c) 2003-2004 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -61,7 +61,7 @@ import org.apache.commons.math.util.DefaultTransformer;
import org.apache.commons.math.util.NumberTransformer;
/**
* @version $Revision: 1.1 $ $Date: 2003/11/15 16:01:41 $
* @version $Revision: 1.2 $ $Date: 2004/01/25 21:30:41 $
*/
public class ListUnivariateImpl extends AbstractDescriptiveStatistics {
@ -73,6 +73,9 @@ public class ListUnivariateImpl extends AbstractDescriptiveStatistics {
/** Number Transformer maps Objects to Number for us. */
protected NumberTransformer transformer;
/** hold the window size **/
protected int windowSize = DescriptiveStatistics.INFINITE_WINDOW;
/**
* Construct a ListUnivariate with a specific List.
@ -149,7 +152,7 @@ public class ListUnivariateImpl extends AbstractDescriptiveStatistics {
/**
* @see org.apache.commons.math.stat.DescriptiveStatistics#getN()
*/
public int getN() {
public long getN() {
int n = 0;
if (windowSize != DescriptiveStatistics.INFINITE_WINDOW) {
@ -183,7 +186,6 @@ public class ListUnivariateImpl extends AbstractDescriptiveStatistics {
* @see org.apache.commons.math.stat.DescriptiveStatistics#clear()
*/
public void clear() {
super.clear();
list.clear();
}
@ -216,5 +218,22 @@ public class ListUnivariateImpl extends AbstractDescriptiveStatistics {
public void setTransformer(NumberTransformer transformer) {
this.transformer = transformer;
}
/**
* @see org.apache.commons.math.stat.Univariate#setWindowSize(int)
*/
public synchronized void setWindowSize(int windowSize) {
this.windowSize = windowSize;
//Discard elements from the front of the list if the windowSize is less than
// the size of the list.
int extra = list.size() - windowSize;
for (int i = 0; i < extra; i++) {
list.remove(0);
}
}
public int getWindowSize() {
return windowSize;
}
}

View File

@ -1,7 +1,7 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* Copyright (c) 2003-2004 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -63,7 +63,7 @@ import junit.framework.TestSuite;
/**
* Test cases for the {@link Univariate} class.
*
* @version $Revision: 1.10 $ $Date: 2003/11/15 16:01:41 $
* @version $Revision: 1.11 $ $Date: 2004/01/25 21:30:41 $
*/
public final class ListUnivariateImplTest extends TestCase {

View File

@ -1,7 +1,7 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* Copyright (c) 2003-2004 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -63,7 +63,7 @@ import org.apache.commons.math.random.RandomDataImpl;
/**
* Test cases for the {@link Univariate} class.
*
* @version $Revision: 1.10 $ $Date: 2003/11/15 16:01:41 $
* @version $Revision: 1.11 $ $Date: 2004/01/25 21:30:41 $
*/
public final class StoreUnivariateImplTest extends TestCase {

View File

@ -1,7 +1,7 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* Copyright (c) 2003-2004 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -61,7 +61,7 @@ import junit.framework.TestSuite;
/**
* Test cases for the TestStatistic class.
*
* @version $Revision: 1.9 $ $Date: 2003/11/19 03:22:54 $
* @version $Revision: 1.10 $ $Date: 2004/01/25 21:30:41 $
*/
public final class TestStatisticTest extends TestCase {
@ -186,11 +186,11 @@ public final class TestStatisticTest extends TestCase {
92.0,
95.0 };
double mu = 100.0;
DescriptiveStatistics sampleStats = null;
SummaryStatistics sampleStats = null;
try {
sampleStats =
DescriptiveStatistics.newInstance(
StorelessDescriptiveStatisticsImpl.class);
SummaryStatistics.newInstance(
SummaryStatisticsImpl.class);
} catch (InstantiationException e5) {
// TODO Auto-generated catch block
e5.printStackTrace();
@ -221,18 +221,8 @@ public final class TestStatisticTest extends TestCase {
;
}
DescriptiveStatistics nullStats = null;
try {
nullStats =
DescriptiveStatistics.newInstance(
StorelessDescriptiveStatisticsImpl.class);
} catch (InstantiationException e6) {
// TODO Auto-generated catch block
e6.printStackTrace();
} catch (IllegalAccessException e6) {
// TODO Auto-generated catch block
e6.printStackTrace();
}
SummaryStatistics nullStats = SummaryStatistics.newInstance();
try {
testStatistic.t(mu, nullStats);
fail("arguments too short, IllegalArgumentException expected");
@ -249,18 +239,8 @@ public final class TestStatisticTest extends TestCase {
;
}
DescriptiveStatistics emptyStats = null;
try {
emptyStats =
DescriptiveStatistics.newInstance(
StorelessDescriptiveStatisticsImpl.class);
} catch (InstantiationException e4) {
// TODO Auto-generated catch block
e4.printStackTrace();
} catch (IllegalAccessException e4) {
// TODO Auto-generated catch block
e4.printStackTrace();
}
SummaryStatistics emptyStats =SummaryStatistics.newInstance();
try {
testStatistic.t(mu, emptyStats);
fail("arguments too short, IllegalArgumentException expected");
@ -285,18 +265,8 @@ public final class TestStatisticTest extends TestCase {
e.printStackTrace();
}
DescriptiveStatistics tooShortStats = null;
try {
tooShortStats =
DescriptiveStatistics.newInstance(
StorelessDescriptiveStatisticsImpl.class);
} catch (InstantiationException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
} catch (IllegalAccessException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
}
SummaryStatistics tooShortStats = SummaryStatistics.newInstance();
tooShortStats.addValue(0d);
tooShortStats.addValue(2d);
try {
@ -339,18 +309,8 @@ public final class TestStatisticTest extends TestCase {
3d,
3d };
DescriptiveStatistics oneSidedPStats = null;
try {
oneSidedPStats =
DescriptiveStatistics.newInstance(
StorelessDescriptiveStatisticsImpl.class);
} catch (InstantiationException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
} catch (IllegalAccessException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
SummaryStatistics oneSidedPStats = SummaryStatistics.newInstance();;
for (int i = 0; i < oneSidedP.length; i++) {
oneSidedPStats.addValue(oneSidedP[i]);
}
@ -418,34 +378,14 @@ public final class TestStatisticTest extends TestCase {
double[] sample2 =
{ -1d, 12d, -1d, -3d, 3d, -5d, 5d, 2d, -11d, -1d, -3d };
DescriptiveStatistics sampleStats1 = null;
try {
sampleStats1 =
DescriptiveStatistics.newInstance(
StorelessDescriptiveStatisticsImpl.class);
} catch (InstantiationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
SummaryStatistics sampleStats1 = SummaryStatistics.newInstance();
for (int i = 0; i < sample1.length; i++) {
sampleStats1.addValue(sample1[i]);
}
DescriptiveStatistics sampleStats2 = null;
try {
sampleStats2 =
DescriptiveStatistics.newInstance(
StorelessDescriptiveStatisticsImpl.class);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SummaryStatistics sampleStats2 = SummaryStatistics.newInstance();
for (int i = 0; i < sample2.length; i++) {
sampleStats2.addValue(sample2[i]);
}

View File

@ -1,7 +1,7 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* Copyright (c) 2003-2004 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -57,7 +57,7 @@ import org.apache.commons.math.TestUtils;
/**
* Test cases for the {@link UnivariateStatistic} class.
* @version $Revision: 1.9 $ $Date: 2003/11/19 13:35:10 $
* @version $Revision: 1.10 $ $Date: 2004/01/25 21:30:41 $
*/
public abstract class StorelessUnivariateStatisticAbstractTest
extends UnivariateStatisticAbstractTest {

View File

@ -1,7 +1,7 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* Copyright (c) 2003-2004 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -53,8 +53,7 @@
*/
package org.apache.commons.math.stat.univariate;
import org.apache.commons.math.stat.DescriptiveStatistics;
import org.apache.commons.math.stat.StorelessDescriptiveStatisticsImpl;
import org.apache.commons.math.stat.SummaryStatistics;
import junit.framework.Test;
import junit.framework.TestCase;
@ -63,7 +62,7 @@ import junit.framework.TestSuite;
/**
* Test cases for the {@link DescriptiveStatistics} class.
*
* @version $Revision: 1.1 $ $Date: 2003/11/15 16:01:41 $
* @version $Revision: 1.2 $ $Date: 2004/01/25 21:30:41 $
*/
public final class UnivariateImplTest extends TestCase {
@ -96,7 +95,7 @@ public final class UnivariateImplTest extends TestCase {
/** test stats */
public void testStats() {
StorelessDescriptiveStatisticsImpl u = new StorelessDescriptiveStatisticsImpl();
SummaryStatistics u = SummaryStatistics.newInstance();
assertEquals("total count",0,u.getN(),tolerance);
u.addValue(one);
u.addValue(twoF);
@ -115,19 +114,14 @@ public final class UnivariateImplTest extends TestCase {
}
public void testN0andN1Conditions() throws Exception {
StorelessDescriptiveStatisticsImpl u = new StorelessDescriptiveStatisticsImpl();
SummaryStatistics u = SummaryStatistics.newInstance();
assertTrue("Mean of n = 0 set should be NaN",
Double.isNaN( u.getMean() ) );
assertTrue("Standard Deviation of n = 0 set should be NaN",
Double.isNaN( u.getStandardDeviation() ) );
assertTrue("Variance of n = 0 set should be NaN",
Double.isNaN(u.getVariance() ) );
assertTrue("skew of n = 0 set should be NaN",
Double.isNaN(u.getSkewness() ) );
assertTrue("kurtosis of n = 0 set should be NaN",
Double.isNaN(u.getKurtosis() ) );
/* n=1 */
u.addValue(one);
assertTrue("mean should be one (n = 1)",
@ -138,10 +132,6 @@ public final class UnivariateImplTest extends TestCase {
u.getStandardDeviation() == 0.0);
assertTrue("variance should be zero (n = 1)",
u.getVariance() == 0.0);
assertTrue("skew should be zero (n = 1)",
u.getSkewness() == 0.0);
assertTrue("kurtosis should be zero (n = 1)",
u.getKurtosis() == 0.0);
/* n=2 */
u.addValue(twoF);
@ -149,27 +139,11 @@ public final class UnivariateImplTest extends TestCase {
u.getStandardDeviation() != 0.0);
assertTrue("variance should not be zero (n = 2)",
u.getVariance() != 0.0);
assertTrue("skew should not be zero (n = 2)",
u.getSkewness() == 0.0);
assertTrue("kurtosis should be zero (n = 2)",
u.getKurtosis() == 0.0);
/* n=3 */
u.addValue(twoL);
assertTrue("skew should not be zero (n = 3)",
u.getSkewness() != 0.0);
assertTrue("kurtosis should be zero (n = 3)",
u.getKurtosis() == 0.0);
/* n=4 */
u.addValue(three);
assertTrue("kurtosis should not be zero (n = 4)",
u.getKurtosis() != 0.0);
}
public void testProductAndGeometricMean() throws Exception {
StorelessDescriptiveStatisticsImpl u = new StorelessDescriptiveStatisticsImpl(10);
SummaryStatistics u = SummaryStatistics.newInstance();
u.addValue( 1.0 );
u.addValue( 2.0 );
@ -178,33 +152,10 @@ public final class UnivariateImplTest extends TestCase {
assertEquals( "Geometric mean not expected", 2.213364,
u.getGeometricMean(), 0.00001 );
// Now test rolling - StorelessDescriptiveStatistics should discount the contribution
// of a discarded element
for( int i = 0; i < 10; i++ ) {
u.addValue( i + 2 );
}
// Values should be (2,3,4,5,6,7,8,9,10,11)
assertEquals( "Geometric mean not expected", 5.755931,
u.getGeometricMean(), 0.00001 );
}
public void testRollingMinMax() {
StorelessDescriptiveStatisticsImpl u = new StorelessDescriptiveStatisticsImpl(3);
u.addValue( 1.0 );
u.addValue( 5.0 );
u.addValue( 3.0 );
u.addValue( 4.0 ); // discarding min
assertEquals( "min not expected", 3.0,
u.getMin(), Double.MIN_VALUE);
u.addValue(1.0); // discarding max
assertEquals( "max not expected", 4.0,
u.getMax(), Double.MIN_VALUE);
}
public void testNaNContracts() {
StorelessDescriptiveStatisticsImpl u = new StorelessDescriptiveStatisticsImpl();
SummaryStatistics u = SummaryStatistics.newInstance();
double nan = Double.NaN;
assertTrue("mean not NaN",Double.isNaN(u.getMean()));
assertTrue("min not NaN",Double.isNaN(u.getMin()));
@ -231,20 +182,4 @@ public final class UnivariateImplTest extends TestCase {
//FiXME: test all other NaN contract specs
}
public void testSkewAndKurtosis() {
DescriptiveStatistics u = new StorelessDescriptiveStatisticsImpl();
double[] testArray =
{ 12.5, 12, 11.8, 14.2, 14.9, 14.5, 21, 8.2, 10.3, 11.3, 14.1,
9.9, 12.2, 12, 12.1, 11, 19.8, 11, 10, 8.8, 9, 12.3 };
for( int i = 0; i < testArray.length; i++) {
u.addValue( testArray[i]);
}
assertEquals("mean", 12.40455, u.getMean(), 0.0001);
assertEquals("variance", 10.00236, u.getVariance(), 0.0001);
assertEquals("skewness", 1.437424, u.getSkewness(), 0.0001);
assertEquals("kurtosis", 2.37719, u.getKurtosis(), 0.0001);
}
}

View File

@ -1,7 +1,7 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* Copyright (c) 2003-2004 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -57,7 +57,7 @@ import junit.framework.TestCase;
/**
* Test cases for the {@link UnivariateStatistic} class.
* @version $Revision: 1.8 $ $Date: 2003/11/14 22:22:23 $
* @version $Revision: 1.9 $ $Date: 2004/01/25 21:30:41 $
*/
public abstract class UnivariateStatisticAbstractTest extends TestCase {