public class Stats extends java.lang.Object implements java.io.Serializable, RevisionHandler
Upon initialization the variables take the following values:
count
= sum
= sumSq
= 0
mean
= stdDev
= min
= max
= Double.NaN
This is called the initial state.
For signaling that a Stats object has been provided with values that hint that something is either wrong with the data used or the algorithm used there is also the invalid state where the variables take the following values:
Once a Stats object goes into the invalid state it can't change its state
anymore.
A Stats object assumes that only values are subtracted (by using the
If the implementation detects a problem then the Stats object goes into the
invalid state.
The fields
For the fields
Where \ is the set difference.
For the field
count
= sum
= sumSq
= mean
=
stdDev
= min
= max
= Double.NaN
subtract(double)
or subtract(double, double)
methods)
that have previously been added (by using the add(double)
or
add(double, double)
methods) and the weights must be the same
too.
Otherwise the Stats object's fields' values are implementation defined.count
, sum
, sumSq
, min
and
max
are always updated whereas the field mean
and
stdDev
are only guaranteed to be updated after a call to
calculateDerived()
.min
and max
the following rules apply:
min(values_added \ values_subtracted) >=
min
>= min(values_added)
max(values_added \ values_subtracted) <= max
<= max(values_added)
stdDev
the following rules apply:
For the methods stdDev
=Double.NaN.stdDev
>= 0 and it should take on the value by best
effort of the implementation.add(double)
, add(double, double)
,
subtract(double)
and subtract(double, double)
the following
rules apply:
For subtract(double, double)
is used instead of
add(double, double)
with weight = -weight and vice versa.count
the following rules apply
count
goes below zero then all fields are set to
Double.NaN
except the count
field which gets tracked
normally.count
= 0 then the Stats object goes into the initial state.
count
> 0 for the first time, then the Stats object goes into
initial state and gets updated with the corresponding value and weight.
Modifier and Type | Field and Description |
---|---|
double |
count
The number of values seen
|
double |
max
The maximum value seen, or Double.NaN if no values seen
|
double |
mean
The mean of values, or Double.NaN if no values seen
|
double |
min
The minimum value seen, or Double.NaN if no values seen
|
double |
stdDev
The std deviation of values at the last calculateDerived() call
|
double |
sum
The sum of values seen
|
double |
sumSq
The sum of values squared seen
|
Constructor and Description |
---|
Stats() |
Modifier and Type | Method and Description |
---|---|
void |
add(double value)
Adds a value to the observed values
|
void |
add(double value,
double weight)
Adds a weighted value to the observed values
|
void |
calculateDerived()
Tells the object to calculate any statistics that don't have their
values automatically updated during add.
|
java.lang.String |
getRevision()
Returns the revision string.
|
static void |
main(java.lang.String[] args)
Tests the paired stats object from the command line.
|
void |
subtract(double value)
Removes a value to the observed values (no checking is done
that the value being removed was actually added).
|
void |
subtract(double value,
double weight)
Subtracts a weighted value from the observed values
|
java.lang.String |
toString()
Returns a string summarising the stats so far.
|
public double count
public double sum
public double sumSq
public double stdDev
public double mean
public double min
public double max
public void add(double value)
It's equivalent to add(value, 1)
value
- the observed valuepublic void add(double value, double weight)
value
- the observed valueweight
- the weight of the observed valuepublic void subtract(double value)
It's equivalent to subtract(value, 1)
value
- the observed valuepublic void subtract(double value, double weight)
value
- the observed valueweight
- the weight of the observed valuepublic void calculateDerived()
public java.lang.String toString()
toString
in class java.lang.Object
public java.lang.String getRevision()
getRevision
in interface RevisionHandler
public static void main(java.lang.String[] args)
args
- ignored.