Statistic.from constructor

Statistic.from(
  1. Iterable<num> values, {
  2. String name = '',
})

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);
}