correlated method
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;
}