1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.math.stat.correlation;
18
19 import org.apache.commons.math.TestUtils;
20 import org.apache.commons.math.linear.BlockRealMatrix;
21 import org.apache.commons.math.linear.RealMatrix;
22
23
24
25
26
27
28
29 public class SpearmansRankCorrelationTest extends PearsonsCorrelationTest {
30
31 @Override
32 protected void setUp() throws Exception {
33 super.setUp();
34 }
35
36 @Override
37 protected void tearDown() throws Exception {
38 super.tearDown();
39 }
40
41
42
43
44 @Override
45 public void testLongly() throws Exception {
46 RealMatrix matrix = createRealMatrix(longleyData, 16, 7);
47 SpearmansCorrelation corrInstance = new SpearmansCorrelation(matrix);
48 RealMatrix correlationMatrix = corrInstance.getCorrelationMatrix();
49 double[] rData = new double[] {
50 1, 0.982352941176471, 0.985294117647059, 0.564705882352941, 0.2264705882352941, 0.976470588235294,
51 0.976470588235294, 0.982352941176471, 1, 0.997058823529412, 0.664705882352941, 0.2205882352941176,
52 0.997058823529412, 0.997058823529412, 0.985294117647059, 0.997058823529412, 1, 0.638235294117647,
53 0.2235294117647059, 0.9941176470588236, 0.9941176470588236, 0.564705882352941, 0.664705882352941,
54 0.638235294117647, 1, -0.3411764705882353, 0.685294117647059, 0.685294117647059, 0.2264705882352941,
55 0.2205882352941176, 0.2235294117647059, -0.3411764705882353, 1, 0.2264705882352941, 0.2264705882352941,
56 0.976470588235294, 0.997058823529412, 0.9941176470588236, 0.685294117647059, 0.2264705882352941, 1, 1,
57 0.976470588235294, 0.997058823529412, 0.9941176470588236, 0.685294117647059, 0.2264705882352941, 1, 1
58 };
59 TestUtils.assertEquals("Spearman's correlation matrix", createRealMatrix(rData, 7, 7), correlationMatrix, 10E-15);
60 }
61
62
63
64
65 public void testSwiss() throws Exception {
66 RealMatrix matrix = createRealMatrix(swissData, 47, 5);
67 SpearmansCorrelation corrInstance = new SpearmansCorrelation(matrix);
68 RealMatrix correlationMatrix = corrInstance.getCorrelationMatrix();
69 double[] rData = new double[] {
70 1, 0.2426642769364176, -0.660902996352354, -0.443257690360988, 0.4136455623012432,
71 0.2426642769364176, 1, -0.598859938748963, -0.650463814145816, 0.2886878090882852,
72 -0.660902996352354, -0.598859938748963, 1, 0.674603831406147, -0.4750575257171745,
73 -0.443257690360988, -0.650463814145816, 0.674603831406147, 1, -0.1444163088302244,
74 0.4136455623012432, 0.2886878090882852, -0.4750575257171745, -0.1444163088302244, 1
75 };
76 TestUtils.assertEquals("Spearman's correlation matrix", createRealMatrix(rData, 5, 5), correlationMatrix, 10E-15);
77 }
78
79
80
81
82 @Override
83 public void testConstant() {
84 double[] noVariance = new double[] {1, 1, 1, 1};
85 double[] values = new double[] {1, 2, 3, 4};
86 assertTrue(Double.isNaN(new SpearmansCorrelation().correlation(noVariance, values)));
87 }
88
89
90
91
92 @Override
93 public void testInsufficientData() {
94 double[] one = new double[] {1};
95 double[] two = new double[] {2};
96 try {
97 new SpearmansCorrelation().correlation(one, two);
98 fail("Expecting IllegalArgumentException");
99 } catch (IllegalArgumentException ex) {
100
101 }
102 RealMatrix matrix = new BlockRealMatrix(new double[][] {{0},{1}});
103 try {
104 new SpearmansCorrelation(matrix);
105 fail("Expecting IllegalArgumentException");
106 } catch (IllegalArgumentException ex) {
107
108 }
109 }
110
111 @Override
112 public void testConsistency() {
113 RealMatrix matrix = createRealMatrix(longleyData, 16, 7);
114 SpearmansCorrelation corrInstance = new SpearmansCorrelation(matrix);
115 double[][] data = matrix.getData();
116 double[] x = matrix.getColumn(0);
117 double[] y = matrix.getColumn(1);
118 assertEquals(new SpearmansCorrelation().correlation(x, y),
119 corrInstance.getCorrelationMatrix().getEntry(0, 1), Double.MIN_VALUE);
120 TestUtils.assertEquals("Correlation matrix", corrInstance.getCorrelationMatrix(),
121 new SpearmansCorrelation().computeCorrelationMatrix(data), Double.MIN_VALUE);
122 }
123
124
125 @Override
126 public void testStdErrorConsistency() throws Exception {}
127 @Override
128 public void testCovarianceConsistency() throws Exception {}
129
130 }