// Generates the cumulative distribution function using the difference in the means // for the data. func CDFTest(vector govector.Vector, conf AnomalyzerConf) float64 { diffs := vector.Diff().Apply(math.Abs) reference, active, err := extractWindows(diffs, conf.referenceSize-1, conf.ActiveSize, conf.ActiveSize) if err != nil { return NA } // Find the empircal distribution function using the reference window. refEcdf := reference.Ecdf() // Difference between the active and reference means. activeDiff := active.Mean() - reference.Mean() // Apply the empirical distribution function to that difference. percentile := refEcdf(activeDiff) // Scale so max probability is in tails and prob at 0.5 is 0. return (2 * math.Abs(0.5-percentile)) }