Statistic.from constructor
Takes values
and creates the Statistic instance with its stats.
Implementation
factory Statistic.from(Iterable<num> values, {String name = ''}) {
final orderedValues = List<num>.from(values, growable: false)..sort();
final n = orderedValues.length;
if (n == 0) {
throw ArgumentError("Cannot make stats from empty list of values");
}
if (n == 1) {
throw ArgumentError("Cannot make stats from one value");
}
final min = orderedValues.first;
final max = orderedValues.last;
var total = 0.0;
for (var value in orderedValues) {
total += value;
}
final mean = total / n;
var deltaSquaredSum = 0.0;
for (var value in orderedValues) {
final delta = value - mean;
deltaSquaredSum += delta * delta;
}
final variance = deltaSquaredSum / (n - 1);
final stdDeviation = math.sqrt(variance);
num median;
if (n.isOdd) {
median = orderedValues[n ~/ 2];
} else {
final index = n ~/ 2 - 1;
median = (orderedValues[index] + orderedValues[index + 1]) / 2;
}
final interval = computeMedianConfidence(n);
final lower = interval.isInvalid
? double.negativeInfinity
: orderedValues[interval.a - 1];
final upper =
interval.isInvalid ? double.infinity : orderedValues[interval.b - 1];
return Statistic(orderedValues.length, mean, median, min, max, stdDeviation,
lower, upper,
name: name);
}