using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Science.Statistics.BasicStatistics { public class Correlation { public Correlation() { } private DataForScatterDiagram d; public DataForScatterDiagram Data { get { return d; } set { d = value; } } public Correlation(DataForScatterDiagram data) { int j, n = data.XData.Count; for (r = 0.0, j = 0; j < n; j++) r += data.XData[j]*data.YData[j]; r /= (double)n; r -= data.XStandardDeviationAndAverage.Average * data.YStandardDeviationAndAverage.Average; r /= data.XStandardDeviationAndAverage.StandardDeviation * data.YStandardDeviationAndAverage.StandardDeviation; } private double r; public double Value { get { return r; } set { r = value; } } public static Correlation Add(Correlation first, Correlation second) { Correlation third = new Correlation(); StandardDeviationAndAverage xsda = StandardDeviationAndAverage.Add( first.Data.XStandardDeviationAndAverage, second.Data.XStandardDeviationAndAverage); StandardDeviationAndAverage ysda = StandardDeviationAndAverage.Add( first.Data.YStandardDeviationAndAverage, second.Data.YStandardDeviationAndAverage); int n = first.Data.XStandardDeviationAndAverage.LengthOfData + second.Data.XStandardDeviationAndAverage.LengthOfData; double fs = first.Value * first.Data.XStandardDeviationAndAverage.StandardDeviation * first.Data.YStandardDeviationAndAverage.StandardDeviation; fs += first.Data.XStandardDeviationAndAverage.Average * first.Data.YStandardDeviationAndAverage.Average; fs *= first.Data.XStandardDeviationAndAverage.LengthOfData; double ss = second.Value * second.Data.XStandardDeviationAndAverage.StandardDeviation * second.Data.YStandardDeviationAndAverage.StandardDeviation; ss += second.Data.XStandardDeviationAndAverage.Average * second.Data.YStandardDeviationAndAverage.Average; ss *= second.Data.XStandardDeviationAndAverage.LengthOfData; third.Value = ((fs + ss) / (double)n - xsda.Average * ysda.Average ) / xsda.StandardDeviation / ysda.StandardDeviation; return third; } } }