You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
742 B
33 lines
742 B
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) |
|
}
|
|
|