Browse Source

Merge pull request #415 from StratThinker/correlation

Correlation
pull/426/head
Christoph Ruegg 10 years ago
committed by GitHub
parent
commit
001fa4c871
  1. 3
      src/Numerics/Statistics/Correlation.cs
  2. 30
      src/UnitTests/StatisticsTests/CorrelationTests.cs

3
src/Numerics/Statistics/Correlation.cs

@ -146,9 +146,8 @@ namespace MathNet.Numerics.Statistics
meanB += rY;
varB += sumWeight*deltaY*rY;
covariance += deltaX*deltaY*wi*(sumWeight/temp);
sumWeight = temp;
covariance += deltaX*deltaY*(n - 1)*wi/n;
}
if (ieB.MoveNext())
{

30
src/UnitTests/StatisticsTests/CorrelationTests.cs

@ -104,6 +104,36 @@ namespace MathNet.Numerics.UnitTests.StatisticsTests
AssertHelpers.AlmostEqual(corr, corr2, 14);
}
/// <summary>
/// Correlation between two identical data sets should always equal one,
/// regardless of the weights used.
/// </summary>
[Test]
public void WeightedPearsonCorrelationEqualsOneTest()
{
int n = 5;
double maxWeight = 1e5;
var dataA = Generate.LinearRange(1, n);
var dataB = Generate.LinearRange(1, n);
var weights1 = Generate.LinearRange(1, n);
var weights2 = Generate.LogSpaced(n, 1, 5);
var weights3 = Generate.LogSpaced(n, 5, 1);
var weights4 = Generate.Repeat(n, maxWeight);
var weights5 = Generate.Repeat(n, 1/maxWeight);
var corr1 = Correlation.WeightedPearson(dataA, dataB, weights1);
var corr2 = Correlation.WeightedPearson(dataA, dataB, weights2);
var corr3 = Correlation.WeightedPearson(dataA, dataB, weights3);
var corr4 = Correlation.WeightedPearson(dataA, dataB, weights4);
var corr5 = Correlation.WeightedPearson(dataA, dataB, weights5);
AssertHelpers.AlmostEqual(corr1, 1, 14);
AssertHelpers.AlmostEqual(corr2, 1, 14);
AssertHelpers.AlmostEqual(corr3, 1, 14);
AssertHelpers.AlmostEqual(corr4, 1, 14);
AssertHelpers.AlmostEqual(corr5, 1, 14);
}
/// <summary>
/// Pearson correlation test fail.
/// </summary>

Loading…
Cancel
Save