From 401b594aa4d3d2c5d1987d91017e9aff845804ad Mon Sep 17 00:00:00 2001 From: Christoph Ruegg Date: Thu, 25 Dec 2014 21:13:19 +0100 Subject: [PATCH] Minor cleanup, contributors, tests --- CONTRIBUTORS.md | 1 + src/Numerics/Statistics/Correlation.cs | 28 +++++++++---------- .../StatisticsTests/CorrelationTests.cs | 16 +++++++++++ 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 06953a54..72a954c8 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -53,6 +53,7 @@ Feel free to add a link to your personal site/blog and/or twitter handle.* - Sunny Ahuwanya - Till Hoffmann - Tomas Petricek +- ViK - VicPara - bstrausser - mjmckp diff --git a/src/Numerics/Statistics/Correlation.cs b/src/Numerics/Statistics/Correlation.cs index 5a27f4e6..8faeda79 100644 --- a/src/Numerics/Statistics/Correlation.cs +++ b/src/Numerics/Statistics/Correlation.cs @@ -4,7 +4,7 @@ // http://github.com/mathnet/mathnet-numerics // http://mathnetnumerics.codeplex.com // -// Copyright (c) 2009-2013 Math.NET +// Copyright (c) 2009-2014 Math.NET // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation @@ -74,17 +74,17 @@ namespace MathNet.Numerics.Statistics double currentB = ieB.Current; double deltaA = currentA - meanA; - double scaleDeltaA = deltaA / ++n; + double scaleDeltaA = deltaA/++n; double deltaB = currentB - meanB; - double scaleDeltaB = deltaB / n; + double scaleDeltaB = deltaB/n; meanA += scaleDeltaA; meanB += scaleDeltaB; - varA += scaleDeltaA * deltaA * (n - 1); - varB += scaleDeltaB * deltaB * (n - 1); - r += (deltaA * deltaB * (n - 1)) / n; + varA += scaleDeltaA*deltaA*(n - 1); + varB += scaleDeltaB*deltaB*(n - 1); + r += (deltaA*deltaB*(n - 1))/n; } if (ieB.MoveNext()) @@ -93,7 +93,7 @@ namespace MathNet.Numerics.Statistics } } - return r / Math.Sqrt(varA * varB); + return r/Math.Sqrt(varA*varB); } /// @@ -138,18 +138,18 @@ namespace MathNet.Numerics.Statistics double temp = sumWeight + wi; double deltaX = xi - meanA; - double rX = deltaX * wi / temp; + double rX = deltaX*wi/temp; meanA += rX; - varA += sumWeight * deltaX * rX; + varA += sumWeight*deltaX*rX; double deltaY = yi - meanB; - double rY = deltaY * wi / temp; + double rY = deltaY*wi/temp; meanB += rY; - varB += sumWeight * deltaY * rY; + varB += sumWeight*deltaY*rY; sumWeight = temp; - covariance += deltaX * deltaY * (n - 1) * wi / n; + covariance += deltaX*deltaY*(n - 1)*wi/n; } if (ieB.MoveNext()) { @@ -160,7 +160,7 @@ namespace MathNet.Numerics.Statistics throw new ArgumentOutOfRangeException("weights", Resources.ArgumentArraysSameLength); } } - return covariance / Math.Sqrt(varA * varB); + return covariance/Math.Sqrt(varA*varB); } /// @@ -225,7 +225,7 @@ namespace MathNet.Numerics.Statistics return PearsonMatrix(vectors.Select(Rank).ToArray()); } - private static double[] Rank(IEnumerable series) + static double[] Rank(IEnumerable series) { if (series == null) { diff --git a/src/UnitTests/StatisticsTests/CorrelationTests.cs b/src/UnitTests/StatisticsTests/CorrelationTests.cs index 04829efe..582632d2 100644 --- a/src/UnitTests/StatisticsTests/CorrelationTests.cs +++ b/src/UnitTests/StatisticsTests/CorrelationTests.cs @@ -89,6 +89,22 @@ namespace MathNet.Numerics.UnitTests.StatisticsTests AssertHelpers.AlmostEqual(covariance, direct, 14); } + + /// + /// Constant-weighted Pearson correlation test. + /// + [Test] + public void ConstantWeightedPearsonCorrelationTest() + { + var dataA = _data["lottery"].Data.Take(200); + var dataB = _data["lew"].Data.Take(200); + var weights = Generate.Repeat(200, 2.0); + + var corr = Correlation.Pearson(dataA, dataB); + var corr2 = Correlation.WeightedPearson(dataA, dataB, weights); + AssertHelpers.AlmostEqual(corr, corr2, 14); + } + /// /// Pearson correlation test fail. ///