Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||||||
SummaryStatisticsImpl |
|
| 1.1538461538461537;1.154 |
1 | /* |
|
2 | * Copyright 2004 The Apache Software Foundation. |
|
3 | * |
|
4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
|
5 | * you may not use this file except in compliance with the License. |
|
6 | * You may obtain a copy of the License at |
|
7 | * |
|
8 | * http://www.apache.org/licenses/LICENSE-2.0 |
|
9 | * |
|
10 | * Unless required by applicable law or agreed to in writing, software |
|
11 | * distributed under the License is distributed on an "AS IS" BASIS, |
|
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
13 | * See the License for the specific language governing permissions and |
|
14 | * limitations under the License. |
|
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$ $Date: 2005-02-26 05:11:52 -0800 (Sat, 26 Feb 2005) $ |
|
33 | */ |
|
34 | public class SummaryStatisticsImpl extends SummaryStatistics implements Serializable { |
|
35 | ||
36 | /** Serializable version identifier */ |
|
37 | static final long serialVersionUID = 8787174276883311692L; |
|
38 | ||
39 | /** count of values that have been added */ |
|
40 | 10168 | protected long n = 0; |
41 | ||
42 | /** SecondMoment is used to compute the mean and variance */ |
|
43 | 10168 | protected SecondMoment secondMoment = null; |
44 | ||
45 | /** sum of values that have been added */ |
|
46 | 10168 | protected Sum sum = null; |
47 | ||
48 | /** sum of the square of each value that has been added */ |
|
49 | 10168 | protected SumOfSquares sumsq = null; |
50 | ||
51 | /** min of values that have been added */ |
|
52 | 10168 | protected Min min = null; |
53 | ||
54 | /** max of values that have been added */ |
|
55 | 10168 | protected Max max = null; |
56 | ||
57 | /** sumLog of values that have been added */ |
|
58 | 10168 | protected SumOfLogs sumLog = null; |
59 | ||
60 | /** geoMean of values that have been added */ |
|
61 | 10168 | protected GeometricMean geoMean = null; |
62 | ||
63 | /** mean of values that have been added */ |
|
64 | 10168 | protected Mean mean = null; |
65 | ||
66 | /** variance of values that have been added */ |
|
67 | 10168 | protected Variance variance = null; |
68 | ||
69 | /** |
|
70 | * Construct a SummaryStatistics |
|
71 | */ |
|
72 | 10168 | public SummaryStatisticsImpl() { |
73 | 10168 | sum = new Sum(); |
74 | 10168 | sumsq = new SumOfSquares(); |
75 | 10168 | min = new Min(); |
76 | 10168 | max = new Max(); |
77 | 10168 | sumLog = new SumOfLogs(); |
78 | 10168 | geoMean = new GeometricMean(); |
79 | 10168 | secondMoment = new SecondMoment(); |
80 | 10168 | } |
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 | 131406 | sum.increment(value); |
89 | 131406 | sumsq.increment(value); |
90 | 131406 | min.increment(value); |
91 | 131406 | max.increment(value); |
92 | 131406 | sumLog.increment(value); |
93 | 131406 | geoMean.increment(value); |
94 | 131406 | secondMoment.increment(value); |
95 | 131406 | n++; |
96 | 131406 | } |
97 | ||
98 | /** |
|
99 | * Returns the number of available values |
|
100 | * @return The number of available values |
|
101 | */ |
|
102 | public long getN() { |
|
103 | 97714 | 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 | 488 | 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 | 462 | 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 | 16612 | 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 | 30522 | double stdDev = Double.NaN; |
145 | 30522 | if (getN() > 0) { |
146 | 30514 | if (getN() > 1) { |
147 | 29004 | stdDev = Math.sqrt(getVariance()); |
148 | } else { |
|
149 | 1510 | stdDev = 0.0; |
150 | } |
|
151 | } |
|
152 | 30522 | 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 | 29598 | 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 | 512 | 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 | 514 | 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 | 506 | 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 | 0 | StringBuffer outBuffer = new StringBuffer(); |
207 | 0 | outBuffer.append("SummaryStatistics:\n"); |
208 | 0 | outBuffer.append("n: " + getN() + "\n"); |
209 | 0 | outBuffer.append("min: " + getMin() + "\n"); |
210 | 0 | outBuffer.append("max: " + getMax() + "\n"); |
211 | 0 | outBuffer.append("mean: " + getMean() + "\n"); |
212 | 0 | outBuffer.append("geometric mean: " + getGeometricMean() + "\n"); |
213 | 0 | outBuffer.append("variance: " + getVariance() + "\n"); |
214 | 0 | outBuffer.append("sum of squares: " + getSumsq() + "\n"); |
215 | 0 | outBuffer.append("standard deviation: " + getStandardDeviation() + "\n"); |
216 | 0 | return outBuffer.toString(); |
217 | } |
|
218 | ||
219 | /** |
|
220 | * Resets all statistics and storage |
|
221 | */ |
|
222 | public void clear() { |
|
223 | 16 | this.n = 0; |
224 | 16 | min.clear(); |
225 | 16 | max.clear(); |
226 | 16 | sum.clear(); |
227 | 16 | sumLog.clear(); |
228 | 16 | sumsq.clear(); |
229 | 16 | geoMean.clear(); |
230 | 16 | secondMoment.clear(); |
231 | 16 | } |
232 | ||
233 | } |