2
* Licensed to the Apache Software Foundation (ASF) under one or more
3
* contributor license agreements. See the NOTICE file distributed with
4
* this work for additional information regarding copyright ownership.
5
* The ASF licenses this file to You under the Apache License, Version 2.0
6
* (the "License"); you may not use this file except in compliance with
7
* the License. You may obtain a copy of the License at
9
* http://www.apache.org/licenses/LICENSE-2.0
11
* Unless required by applicable law or agreed to in writing, software
12
* distributed under the License is distributed on an "AS IS" BASIS,
13
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
* See the License for the specific language governing permissions and
15
* limitations under the License.
17
package org.apache.commons.math.stat.correlation;
19
import org.apache.commons.math.TestUtils;
20
import org.apache.commons.math.linear.BlockRealMatrix;
21
import org.apache.commons.math.linear.RealMatrix;
24
* Test cases for Spearman's rank correlation
27
* @version $Revision: 799857 $ $Date: 2009-08-01 09:07:12 -0400 (Sat, 01 Aug 2009) $
29
public class SpearmansRankCorrelationTest extends PearsonsCorrelationTest {
32
protected void setUp() throws Exception {
37
protected void tearDown() throws Exception {
42
* Test Longley dataset against R.
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
59
TestUtils.assertEquals("Spearman's correlation matrix", createRealMatrix(rData, 7, 7), correlationMatrix, 10E-15);
63
* Test R swiss fertility dataset.
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
76
TestUtils.assertEquals("Spearman's correlation matrix", createRealMatrix(rData, 5, 5), correlationMatrix, 10E-15);
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)));
93
public void testInsufficientData() {
94
double[] one = new double[] {1};
95
double[] two = new double[] {2};
97
new SpearmansCorrelation().correlation(one, two);
98
fail("Expecting IllegalArgumentException");
99
} catch (IllegalArgumentException ex) {
102
RealMatrix matrix = new BlockRealMatrix(new double[][] {{0},{1}});
104
new SpearmansCorrelation(matrix);
105
fail("Expecting IllegalArgumentException");
106
} catch (IllegalArgumentException ex) {
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);
126
public void testStdErrorConsistency() throws Exception {}
128
public void testCovarianceConsistency() throws Exception {}