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 }