1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.commons.math.stat.descriptive;
17
18 import java.io.Serializable;
19 import org.apache.commons.math.stat.descriptive.moment.SecondMoment;
20 import org.apache.commons.math.stat.descriptive.moment.GeometricMean;
21 import org.apache.commons.math.stat.descriptive.moment.Mean;
22 import org.apache.commons.math.stat.descriptive.moment.Variance;
23 import org.apache.commons.math.stat.descriptive.rank.Max;
24 import org.apache.commons.math.stat.descriptive.rank.Min;
25 import org.apache.commons.math.stat.descriptive.summary.Sum;
26 import org.apache.commons.math.stat.descriptive.summary.SumOfLogs;
27 import org.apache.commons.math.stat.descriptive.summary.SumOfSquares;
28
29 /**
30 * Provides a default {@link SummaryStatistics} implementation.
31 *
32 * @version $Revision: 348519 $ $Date: 2005-11-23 12:12:18 -0700 (Wed, 23 Nov 2005) $
33 */
34 public class SummaryStatisticsImpl extends SummaryStatistics implements Serializable {
35
36 /** Serializable version identifier */
37 private static final long serialVersionUID = 8787174276883311692L;
38
39 /** count of values that have been added */
40 protected long n = 0;
41
42 /** SecondMoment is used to compute the mean and variance */
43 protected SecondMoment secondMoment = null;
44
45 /** sum of values that have been added */
46 protected Sum sum = null;
47
48 /** sum of the square of each value that has been added */
49 protected SumOfSquares sumsq = null;
50
51 /** min of values that have been added */
52 protected Min min = null;
53
54 /** max of values that have been added */
55 protected Max max = null;
56
57 /** sumLog of values that have been added */
58 protected SumOfLogs sumLog = null;
59
60 /** geoMean of values that have been added */
61 protected GeometricMean geoMean = null;
62
63 /** mean of values that have been added */
64 protected Mean mean = null;
65
66 /** variance of values that have been added */
67 protected Variance variance = null;
68
69 /**
70 * Construct a SummaryStatistics
71 */
72 public SummaryStatisticsImpl() {
73 sum = new Sum();
74 sumsq = new SumOfSquares();
75 min = new Min();
76 max = new Max();
77 sumLog = new SumOfLogs();
78 geoMean = new GeometricMean();
79 secondMoment = new SecondMoment();
80 }
81
82 /**
83 * Add a value to the data
84 *
85 * @param value the value to add
86 */
87 public void addValue(double value) {
88 sum.increment(value);
89 sumsq.increment(value);
90 min.increment(value);
91 max.increment(value);
92 sumLog.increment(value);
93 geoMean.increment(value);
94 secondMoment.increment(value);
95 n++;
96 }
97
98 /**
99 * Returns the number of available values
100 * @return The number of available values
101 */
102 public long getN() {
103 return n;
104 }
105
106 /**
107 * Returns the sum of the values that have been added to Univariate.
108 * @return The sum or Double.NaN if no values have been added
109 */
110 public double getSum() {
111 return sum.getResult();
112 }
113
114 /**
115 * Returns the sum of the squares of the values that have been added.
116 * <p>
117 * Double.NaN is returned if no values have been added.</p>
118 *
119 * @return The sum of squares
120 */
121 public double getSumsq() {
122 return sumsq.getResult();
123 }
124
125 /**
126 * Returns the mean of the values that have been added.
127 * <p>
128 * Double.NaN is returned if no values have been added.</p>
129 *
130 * @return the mean
131 */
132 public double getMean() {
133 return new Mean(secondMoment).getResult();
134 }
135
136 /**
137 * Returns the standard deviation of the values that have been added.
138 * <p>
139 * Double.NaN is returned if no values have been added.</p>
140 *
141 * @return the standard deviation
142 */
143 public double getStandardDeviation() {
144 double stdDev = Double.NaN;
145 if (getN() > 0) {
146 if (getN() > 1) {
147 stdDev = Math.sqrt(getVariance());
148 } else {
149 stdDev = 0.0;
150 }
151 }
152 return (stdDev);
153 }
154
155 /**
156 * Returns the variance of the values that have been added.
157 * <p>
158 * Double.NaN is returned if no values have been added.</p>
159 *
160 * @return the variance
161 */
162 public double getVariance() {
163 return new Variance(secondMoment).getResult();
164 }
165
166 /**
167 * Returns the maximum of the values that have been added.
168 * <p>
169 * Double.NaN is returned if no values have been added.</p>
170 *
171 * @return the maximum
172 */
173 public double getMax() {
174 return max.getResult();
175 }
176
177 /**
178 * Returns the minimum of the values that have been added.
179 * <p>
180 * Double.NaN is returned if no values have been added.</p>
181 *
182 * @return the minimum
183 */
184 public double getMin() {
185 return min.getResult();
186 }
187
188 /**
189 * Returns the geometric mean of the values that have been added.
190 * <p>
191 * Double.NaN is returned if no values have been added.</p>
192 *
193 * @return the geometric mean
194 */
195 public double getGeometricMean() {
196 return geoMean.getResult();
197 }
198
199 /**
200 * Generates a text report displaying
201 * summary statistics from values that
202 * have been added.
203 * @return String with line feeds displaying statistics
204 */
205 public String toString() {
206 StringBuffer outBuffer = new StringBuffer();
207 outBuffer.append("SummaryStatistics:\n");
208 outBuffer.append("n: " + getN() + "\n");
209 outBuffer.append("min: " + getMin() + "\n");
210 outBuffer.append("max: " + getMax() + "\n");
211 outBuffer.append("mean: " + getMean() + "\n");
212 outBuffer.append("geometric mean: " + getGeometricMean() + "\n");
213 outBuffer.append("variance: " + getVariance() + "\n");
214 outBuffer.append("sum of squares: " + getSumsq() + "\n");
215 outBuffer.append("standard deviation: " + getStandardDeviation() + "\n");
216 return outBuffer.toString();
217 }
218
219 /**
220 * Resets all statistics and storage
221 */
222 public void clear() {
223 this.n = 0;
224 min.clear();
225 max.clear();
226 sum.clear();
227 sumLog.clear();
228 sumsq.clear();
229 geoMean.clear();
230 secondMoment.clear();
231 }
232
233 }