promql/functions.go
func linearRegression(samples []Point, interceptTime int64) (slope, intercept float64) {
	var (
		n            float64
		sumX, sumY   float64
		sumXY, sumX2 float64
	)
	for _, sample := range samples {
		x := float64(sample.T-interceptTime) / 1e3
		n += 1.0
		sumY += sample.V
		sumX += x
		sumXY += x * sample.V
		sumX2 += x * x
	}
	covXY := sumXY - sumX*sumY/n
	varX := sumX2 - sumX*sumX/n

	slope = covXY / varX
	intercept = sumY/n - slope*sumX/n
	return slope, intercept
}
func linearRegression(samples []Point, interceptTime int64) (slope, intercept float64) {
	var (
		n            float64
		sumX, sumY   float64
		sumXY, sumX2 float64
	)
	for _, sample := range samples {
		x := float64(sample.T-interceptTime) / 1e3
		n += 1.0
		sumY += sample.V
		sumX += x
		sumXY += x * sample.V
		sumX2 += x * x
	}
	covXY := sumXY - sumX*sumY/n
	varX := sumX2 - sumX*sumX/n

	slope = covXY / varX
	intercept = sumY/n - slope*sumX/n
	return slope, intercept
}
func linearRegression ( samples [ ] Point , interceptTime int64 ) ( slope , intercept float64 ) { var ( n float64 sumX , sumY float64 sumXY , sumX2 float64 ) for _ , sample := range samples { x := float64 ( sample . T - interceptTime ) / 1e3 n += 1.0 sumY += sample . V sumX += x sumXY += x * sample . V sumX2 += x * x } covXY := sumXY - sumX * sumY / n varX := sumX2 - sumX * sumX / n slope = covXY / varX intercept = sumY / n - slope * sumX / n return slope , intercept }
// linearRegression performs a least-square linear regression analysis on the
// provided SamplePairs. It returns the slope, and the intercept value at the
// provided time.
linearRegression performs a least - square linear regression analysis on the provided SamplePairs . It returns the slope and the intercept value at the provided time .