forked from golang/hotime
34 lines
742 B
Go
34 lines
742 B
Go
|
package stats
|
||
|
|
||
|
import "math"
|
||
|
|
||
|
// Correlation describes the degree of relationship between two sets of data
|
||
|
func Correlation(data1, data2 Float64Data) (float64, error) {
|
||
|
|
||
|
l1 := data1.Len()
|
||
|
l2 := data2.Len()
|
||
|
|
||
|
if l1 == 0 || l2 == 0 {
|
||
|
return math.NaN(), EmptyInput
|
||
|
}
|
||
|
|
||
|
if l1 != l2 {
|
||
|
return math.NaN(), SizeErr
|
||
|
}
|
||
|
|
||
|
sdev1, _ := StandardDeviationPopulation(data1)
|
||
|
sdev2, _ := StandardDeviationPopulation(data2)
|
||
|
|
||
|
if sdev1 == 0 || sdev2 == 0 {
|
||
|
return 0, nil
|
||
|
}
|
||
|
|
||
|
covp, _ := CovariancePopulation(data1, data2)
|
||
|
return covp / (sdev1 * sdev2), nil
|
||
|
}
|
||
|
|
||
|
// Pearson calculates the Pearson product-moment correlation coefficient between two variables.
|
||
|
func Pearson(data1, data2 Float64Data) (float64, error) {
|
||
|
return Correlation(data1, data2)
|
||
|
}
|