Class Mean
- All Implemented Interfaces:
DoubleConsumer, DoubleSupplier, IntSupplier, LongSupplier, DoubleStatistic, StatisticAccumulator<Mean>, StatisticResult
\[ \frac{1}{n} \sum_{i=1}^n x_i \]
where \( n \) is the number of samples.
- The result is
NaNif no values are added. - The result is
NaNif any of the values isNaN, or the values include infinite values of opposite sign. - The result is
+/-infinityif values include infinite values of same sign. - The result is finite if all input values are finite.
The accept(double) method uses the following recursive updating algorithm
that protects the mean from overflow:
- Initialize \( m_1 \) using the first value
- For each additional value, update using
\( m_{i+1} = m_i + (x - m_i) / (i + 1) \)
The of(double...) method uses an extended precision sum if the sum is finite.
Otherwise uses a corrected two-pass algorithm, starting with
the recursive updating algorithm mentioned above, and then correcting this by adding the
mean deviation of the data values from the one-pass mean (see Ling (1974)).
Supports up to 263 (exclusive) observations. This implementation does not check for overflow of the count.
This class is designed to work with (though does not require) streams.
Note that this implementation is not synchronized. If
multiple threads access an instance of this class concurrently, and at least
one of the threads invokes the accept or
combine method, it must be synchronized externally.
However, it is safe to use accept
and combine
as accumulator and combiner functions of
Collector on a parallel stream,
because the parallel implementation of Stream.collect()
provides the necessary partitioning, isolation, and merging of results for
safe and efficient parallel execution.
References:
- Ling, R.F. (1974) Comparison of Several Algorithms for Computing Sample Means and Variances. Journal of the American Statistical Association, 69, 859-866. doi: 10.2307/2286154
- Since:
- 1.1
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final FirstMomentFirst moment used to compute the mean. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprivateMean()Create an instance.(package private)Mean(FirstMoment m1) Creates an instance with a moment. -
Method Summary
Modifier and TypeMethodDescriptionvoidaccept(double value) Updates the state of the statistic to reflect the addition ofvalue.Combines the state of theotherstatistic into this one.static Meancreate()Creates an instance.doubleGets the mean of all input values.static Meanof(double... values) Returns an instance populated using the inputvalues.static MeanofRange(double[] values, int from, int to) Returns an instance populated using the specified range ofvalues.Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface DoubleConsumer
andThenMethods inherited from interface StatisticResult
getAsBigInteger, getAsInt, getAsLong
-
Field Details
-
firstMoment
First moment used to compute the mean.
-
-
Constructor Details
-
Mean
private Mean()Create an instance. -
Mean
-
-
Method Details
-
create
-
of
-
ofRange
Returns an instance populated using the specified range ofvalues.Note:
Meancomputed usingacceptmay be different from this mean.See
Meanfor details on the computing algorithm.- Parameters:
values- Values.from- Inclusive start of the range.to- Exclusive end of the range.- Returns:
Meaninstance.- Throws:
IndexOutOfBoundsException- if the sub-range is out of bounds- Since:
- 1.2
-
accept
public void accept(double value) Updates the state of the statistic to reflect the addition ofvalue.- Specified by:
acceptin interfaceDoubleConsumer- Parameters:
value- Value.
-
getAsDouble
public double getAsDouble()Gets the mean of all input values.When no values have been added, the result is
NaN.- Specified by:
getAsDoublein interfaceDoubleSupplier- Returns:
- mean of all values.
-
combine
Description copied from interface:StatisticAccumulatorCombines the state of theotherstatistic into this one.- Specified by:
combinein interfaceStatisticAccumulator<Mean>- Parameters:
other- Another statistic to be combined.- Returns:
thisinstance after combiningother.
-