001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.commons.math.stat.descriptive;
018    
019    import java.io.Serializable;
020    
021    import org.apache.commons.math.util.FastMath;
022    import org.apache.commons.math.util.MathUtils;
023    
024    /**
025     *  Value object representing the results of a univariate statistical summary.
026     *
027     * @version $Revision: 1054186 $ $Date: 2011-01-01 03:28:46 +0100 (sam. 01 janv. 2011) $
028     */
029    public class StatisticalSummaryValues implements Serializable,
030        StatisticalSummary {
031    
032        /** Serialization id */
033        private static final long serialVersionUID = -5108854841843722536L;
034    
035        /** The sample mean */
036        private final double mean;
037    
038        /** The sample variance */
039        private final double variance;
040    
041        /** The number of observations in the sample */
042        private final long n;
043    
044        /** The maximum value */
045        private final double max;
046    
047        /** The minimum value */
048        private final double min;
049    
050        /** The sum of the sample values */
051        private final double sum;
052    
053        /**
054          * Constructor
055          *
056          * @param mean  the sample mean
057          * @param variance  the sample variance
058          * @param n  the number of observations in the sample
059          * @param max  the maximum value
060          * @param min  the minimum value
061          * @param sum  the sum of the values
062         */
063        public StatisticalSummaryValues(double mean, double variance, long n,
064            double max, double min, double sum) {
065            super();
066            this.mean = mean;
067            this.variance = variance;
068            this.n = n;
069            this.max = max;
070            this.min = min;
071            this.sum = sum;
072        }
073    
074        /**
075         * @return Returns the max.
076         */
077        public double getMax() {
078            return max;
079        }
080    
081        /**
082         * @return Returns the mean.
083         */
084        public double getMean() {
085            return mean;
086        }
087    
088        /**
089         * @return Returns the min.
090         */
091        public double getMin() {
092            return min;
093        }
094    
095        /**
096         * @return Returns the number of values.
097         */
098        public long getN() {
099            return n;
100        }
101    
102        /**
103         * @return Returns the sum.
104         */
105        public double getSum() {
106            return sum;
107        }
108    
109        /**
110         * @return Returns the standard deviation
111         */
112        public double getStandardDeviation() {
113            return FastMath.sqrt(variance);
114        }
115    
116        /**
117         * @return Returns the variance.
118         */
119        public double getVariance() {
120            return variance;
121        }
122    
123        /**
124         * Returns true iff <code>object</code> is a
125         * <code>StatisticalSummaryValues</code> instance and all statistics have
126         *  the same values as this.
127         *
128         * @param object the object to test equality against.
129         * @return true if object equals this
130         */
131        @Override
132        public boolean equals(Object object) {
133            if (object == this ) {
134                return true;
135            }
136            if (object instanceof StatisticalSummaryValues == false) {
137                return false;
138            }
139            StatisticalSummaryValues stat = (StatisticalSummaryValues) object;
140            return MathUtils.equalsIncludingNaN(stat.getMax(),      getMax())  &&
141                   MathUtils.equalsIncludingNaN(stat.getMean(),     getMean()) &&
142                   MathUtils.equalsIncludingNaN(stat.getMin(),      getMin())  &&
143                   MathUtils.equalsIncludingNaN(stat.getN(),        getN())    &&
144                   MathUtils.equalsIncludingNaN(stat.getSum(),      getSum())  &&
145                   MathUtils.equalsIncludingNaN(stat.getVariance(), getVariance());
146        }
147    
148        /**
149         * Returns hash code based on values of statistics
150         *
151         * @return hash code
152         */
153        @Override
154        public int hashCode() {
155            int result = 31 + MathUtils.hash(getMax());
156            result = result * 31 + MathUtils.hash(getMean());
157            result = result * 31 + MathUtils.hash(getMin());
158            result = result * 31 + MathUtils.hash(getN());
159            result = result * 31 + MathUtils.hash(getSum());
160            result = result * 31 + MathUtils.hash(getVariance());
161            return result;
162        }
163    
164        /**
165         * Generates a text report displaying values of statistics.
166         * Each statistic is displayed on a separate line.
167         *
168         * @return String with line feeds displaying statistics
169         */
170        @Override
171        public String toString() {
172            StringBuilder outBuffer = new StringBuilder();
173            String endl = "\n";
174            outBuffer.append("StatisticalSummaryValues:").append(endl);
175            outBuffer.append("n: ").append(getN()).append(endl);
176            outBuffer.append("min: ").append(getMin()).append(endl);
177            outBuffer.append("max: ").append(getMax()).append(endl);
178            outBuffer.append("mean: ").append(getMean()).append(endl);
179            outBuffer.append("std dev: ").append(getStandardDeviation())
180                .append(endl);
181            outBuffer.append("variance: ").append(getVariance()).append(endl);
182            outBuffer.append("sum: ").append(getSum()).append(endl);
183            return outBuffer.toString();
184        }
185    
186    }