/// <summary> /// Returns standard deviation aggregator with all values in a collection aggregated. /// </summary> public static StdDevAggregator Calculate(IEnumerable <double> values) { var aggregator = new StdDevAggregator(); foreach (var value in values) { aggregator.Add(value); } return(aggregator); }
public static double Correlation(double[] X, double[] Y) { if (X == null || Y == null || X.Length != Y.Length) { return(double.NaN); } var varianceCalcX = StdDevAggregator.Calculate(X); var varianceCalcY = StdDevAggregator.Calculate(Y); double corr = 0; double meanX = varianceCalcX.Mean; double meanY = varianceCalcY.Mean; double varX = varianceCalcX.SampleVariance; double varY = varianceCalcY.SampleVariance; for (int i = 0; i < X.Length; i++) { corr += (X[i] - meanX) * (Y[i] - meanY); } corr /= Math.Sqrt(varX * varY) * X.Length; return(corr); }