[Quantproject-developers] QuantProject/b1_ADT/Statistics BasicFunctions.cs, 1.6, 1.7
Brought to you by:
glauco_1
|
From: Marco M. <mi...@us...> - 2006-07-02 19:29:58
|
Update of /cvsroot/quantproject/QuantProject/b1_ADT/Statistics In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv3845/b1_ADT/Statistics Modified Files: BasicFunctions.cs Log Message: Pearson correlation coefficient is computed within a unique FOR loop (and it should be faster, so) Index: BasicFunctions.cs =================================================================== RCS file: /cvsroot/quantproject/QuantProject/b1_ADT/Statistics/BasicFunctions.cs,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** BasicFunctions.cs 3 Sep 2005 23:53:17 -0000 1.6 --- BasicFunctions.cs 2 Jul 2006 19:29:52 -0000 1.7 *************** *** 172,195 **** double[] secondDataVariable ) { BasicFunctions.checkLengthOfDataVariables(firstDataVariable, secondDataVariable); ! ! double stdDevOfFirst = BasicFunctions.StdDev(firstDataVariable); ! double stdDevOfSecond = BasicFunctions.StdDev(secondDataVariable); ! double coVariance = BasicFunctions.CoVariance(firstDataVariable, ! secondDataVariable); ! ! return (coVariance)/(stdDevOfFirst*stdDevOfSecond); } static public double PearsonCorrelationCoefficient( float[] firstDataVariable, float[] secondDataVariable ) { BasicFunctions.checkLengthOfDataVariables(firstDataVariable, secondDataVariable); ! double stdDevOfFirst = BasicFunctions.StdDev(firstDataVariable); ! double stdDevOfSecond = BasicFunctions.StdDev(secondDataVariable); ! double coVariance = BasicFunctions.CoVariance(firstDataVariable, ! secondDataVariable); ! ! return (coVariance)/(stdDevOfFirst*stdDevOfSecond); } --- 172,229 ---- double[] secondDataVariable ) { + // BasicFunctions.checkLengthOfDataVariables(firstDataVariable, secondDataVariable); + // + // double stdDevOfFirst = BasicFunctions.StdDev(firstDataVariable); + // double stdDevOfSecond = BasicFunctions.StdDev(secondDataVariable); + // double coVariance = BasicFunctions.CoVariance(firstDataVariable, + // secondDataVariable); + // + // return (coVariance)/(stdDevOfFirst*stdDevOfSecond); BasicFunctions.checkLengthOfDataVariables(firstDataVariable, secondDataVariable); ! int n = firstDataVariable.Length; ! double sumOfProduct = 0.0, sumOfFirst = 0.0, sumOfSecond = 0.0, ! sumOfSquaredFirst = 0.0, sumOfSquaredSecond = 0.0; ! for(int i = 0; i < n; i++) ! { ! sumOfFirst += firstDataVariable[i]; ! sumOfSecond += secondDataVariable[i]; ! sumOfProduct += firstDataVariable[i]*secondDataVariable[i]; ! sumOfSquaredFirst += firstDataVariable[i]*firstDataVariable[i]; ! sumOfSquaredSecond += secondDataVariable[i]*secondDataVariable[i]; ! } ! return (n*sumOfProduct - sumOfFirst*sumOfSecond)/ ! Math.Sqrt( (n*sumOfSquaredFirst - sumOfFirst*sumOfFirst)* ! (n*sumOfSquaredSecond - sumOfSecond*sumOfSecond) ); ! } static public double PearsonCorrelationCoefficient( float[] firstDataVariable, float[] secondDataVariable ) { + // OLD Computation way + // BasicFunctions.checkLengthOfDataVariables(firstDataVariable, secondDataVariable); + // + // double stdDevOfFirst = BasicFunctions.StdDev(firstDataVariable); + // double stdDevOfSecond = BasicFunctions.StdDev(secondDataVariable); + // double coVariance = BasicFunctions.CoVariance(firstDataVariable, + // secondDataVariable); + // + // return (coVariance)/(stdDevOfFirst*stdDevOfSecond); BasicFunctions.checkLengthOfDataVariables(firstDataVariable, secondDataVariable); + int n = firstDataVariable.Length; + double sumOfProduct = 0.0, sumOfFirst = 0.0, sumOfSecond = 0.0, + sumOfSquaredFirst = 0.0, sumOfSquaredSecond = 0.0; + for(int i = 0; i < n; i++) + { + sumOfFirst += firstDataVariable[i]; + sumOfSecond += secondDataVariable[i]; + sumOfProduct += firstDataVariable[i]*secondDataVariable[i]; + sumOfSquaredFirst += firstDataVariable[i]*firstDataVariable[i]; + sumOfSquaredSecond += secondDataVariable[i]*secondDataVariable[i]; + } + return (n*sumOfProduct - sumOfFirst*sumOfSecond)/ + Math.Sqrt( (n*sumOfSquaredFirst - sumOfFirst*sumOfFirst)* + (n*sumOfSquaredSecond - sumOfSecond*sumOfSecond) ); ! } |