fc734029c1
12 funciones puras con implementación real: Standardize, MinMaxScale, Clip, RollingWindow, ZipSlices, GroupBy, Histogram, Pearson, Autocorrelation, FFT (Cooley-Tukey), DetectOutliers, Impute 3 funciones impuras (stubs): LoadCSV, LoadParquet, FetchDataFrame Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
40 lines
748 B
Go
40 lines
748 B
Go
package datascience
|
|
|
|
import "math"
|
|
|
|
// Pearson calcula el coeficiente de correlación de Pearson entre dos slices.
|
|
// Si los slices tienen distinta longitud, usa la longitud mínima.
|
|
// Retorna 0 si alguna desviación estándar es 0.
|
|
func Pearson(xs, ys []float64) float64 {
|
|
n := len(xs)
|
|
if len(ys) < n {
|
|
n = len(ys)
|
|
}
|
|
if n == 0 {
|
|
return 0
|
|
}
|
|
|
|
var sumX, sumY float64
|
|
for i := 0; i < n; i++ {
|
|
sumX += xs[i]
|
|
sumY += ys[i]
|
|
}
|
|
meanX := sumX / float64(n)
|
|
meanY := sumY / float64(n)
|
|
|
|
var num, denomX, denomY float64
|
|
for i := 0; i < n; i++ {
|
|
dx := xs[i] - meanX
|
|
dy := ys[i] - meanY
|
|
num += dx * dy
|
|
denomX += dx * dx
|
|
denomY += dy * dy
|
|
}
|
|
|
|
denom := math.Sqrt(denomX * denomY)
|
|
if denom == 0 {
|
|
return 0
|
|
}
|
|
return num / denom
|
|
}
|