correlated method

List<List<TimeSeriesPoint>> correlated({
  1. required DateTime start,
  2. required DateTime end,
  3. required Duration interval,
  4. required int seriesCount,
  5. double correlation = 0.8,
  6. double mean = 100,
  7. double stdDev = 10,
})

Generates multiple correlated time series.

Implementation

List<List<TimeSeriesPoint>> correlated({
  required DateTime start,
  required DateTime end,
  required Duration interval,
  required int seriesCount,
  double correlation = 0.8,
  double mean = 100,
  double stdDev = 10,
}) {
  // Generate base series
  final baseSeries = <double>[];
  var current = start;
  while (!current.isAfter(end)) {
    baseSeries.add(_random.normal(0, 1));
    current = current.add(interval);
  }

  // Generate correlated series
  final allSeries = <List<TimeSeriesPoint>>[];
  for (int s = 0; s < seriesCount; s++) {
    final points = <TimeSeriesPoint>[];
    current = start;
    int i = 0;

    while (!current.isAfter(end)) {
      final noise = _random.normal(0, 1);
      final value = mean +
          stdDev *
              (correlation * baseSeries[i] +
                  math.sqrt(1 - correlation * correlation) * noise);

      points.add(TimeSeriesPoint(timestamp: current, value: value));
      current = current.add(interval);
      i++;
    }

    allSeries.add(points);
  }

  return allSeries;
}