* Bug #13050 fixed - The result of mvvacov function was not symmetric.
[scilab.git] / scilab / modules / statistics / tests / unit_tests / cov.tst
1 // Copyright (C) 2012-2013 - Michael Baudin
2 // Copyright (C) 2010 - INRIA - Michael Baudin
3 //
4 // This file must be used under the terms of the GNU Lesser General Public License license :
5 // http://www.gnu.org/copyleft/lesser.html
6
7 // Run with test_run('statistics', 'cov', ['no_check_error_output']);
8
9 // <-- JVM NOT MANDATORY -->
10 // <-- ENGLISH IMPOSED -->
11
12 // Check error
13 assert_checkfalse(execstr("cov()"   ,"errcatch") == 0);
14 refMsg = msprintf(_("%s: Wrong number of input argument(s): %d, %d or %d expected.\n"),"cov", 1, 2, 3);
15 assert_checkerror("cov()", refMsg);
16
17 assert_checkfalse(execstr("cov(""r"")"   ,"errcatch") == 0);
18 refMsg = msprintf(_("%s: Wrong type for input argument #%d: a real matrix expected.\n"),"cov", 1);
19 assert_checkerror("cov(""r"")", refMsg);
20
21 assert_checkfalse(execstr("cov([1;2], ""r"")"   ,"errcatch") == 0);
22 refMsg = msprintf(_("%s: Wrong type for input argument #%d: an integer or a real matrix expected.\n"),"cov", 2);
23 assert_checkerror("cov([1;2], ""r"")", refMsg);
24
25 assert_checkfalse(execstr("cov(""r"", [1;2])"   ,"errcatch") == 0);
26 refMsg = msprintf(_("%s: Wrong type for input argument #%d: a real matrix expected.\n"),"cov", 1);
27 assert_checkerror("cov(""r"", [1;2])", refMsg);
28
29 assert_checkfalse(execstr("cov(""r"", [1;2], 1)"   ,"errcatch") == 0);
30 refMsg = msprintf(_("%s: Wrong type for input argument #%d: a real matrix expected.\n"),"cov", 1);
31 assert_checkerror("cov(""r"", [1;2], 1)", refMsg);
32
33 assert_checkfalse(execstr("cov([1;2], ""r"", 1)"   ,"errcatch") == 0);
34 refMsg = msprintf(_("%s: Wrong type for input argument #%d: a real matrix expected.\n"),"cov", 2);
35 assert_checkerror("cov([1;2], ""r"", 1)", refMsg);
36
37 assert_checkfalse(execstr("cov([1;2], [3;4], ""r"")"   ,"errcatch") == 0);
38 refMsg = msprintf(_("%s: Wrong type for input argument #%d: an integer expected.\n"),"cov", 3);
39 assert_checkerror("cov([1;2], [3;4], ""r"")", refMsg);
40
41 x = [1;2];
42 y = [3;4];
43 computed = cov (x,y);
44 expected = [0.5,0.5;0.5,0.5];
45 assert_checkequal ( computed , expected );
46 //
47 // The same, with nrmlztn=0
48 x = [1;2];
49 y = [3;4];
50 computed = cov (x,y,0);
51 expected = [0.5,0.5;0.5,0.5];
52 assert_checkequal ( computed , expected );
53 //
54 x = [230;181;165;150;97;192;181;189;172;170];
55 y = [125;99;97;115;120;100;80;90;95;125];
56 expected = [1152.4556,-88.911111;-88.911111,244.26667];
57 computed = cov (x,y);
58 assert_checkalmostequal ( computed , expected , 1.e-7 );
59 //
60 // The same, with nrmlztn=0
61 x = [230;181;165;150;97;192;181;189;172;170];
62 y = [125;99;97;115;120;100;80;90;95;125];
63 expected = [1152.4556,-88.911111;-88.911111,244.26667];
64 computed = cov (x,y,0);
65 assert_checkalmostequal ( computed , expected , 1.e-7 );
66 //
67 x = [1;2;3;4;5];
68 computed = cov (x);
69 expected = 2.5;
70 assert_checkequal ( computed , expected );
71 //
72 // The same, with nrmlztn=0
73 x = [1;2;3;4;5];
74 computed = cov (x,0);
75 expected = 2.5;
76 assert_checkequal ( computed , expected );
77 //
78 A = [-1 1 2 ; -2 3 1 ; 4 0 3];
79 Cexpected = [
80    10.3333   -4.1667    3.0000
81    -4.1667    2.3333   -1.5000
82     3.0000   -1.5000    1.0000
83 ];
84 C = cov (A);
85 assert_checkalmostequal ( Cexpected , C , [] , 1.e-4, "element");
86 //
87 // The same, with nrmlztn=0
88 A = [-1 1 2 ; -2 3 1 ; 4 0 3];
89 Cexpected = [
90    10.3333   -4.1667    3.0000
91    -4.1667    2.3333   -1.5000
92     3.0000   -1.5000    1.0000
93 ];
94 C = cov(A,0);
95 assert_checkalmostequal ( Cexpected , C , [] , 1.e-4, "element");
96 //
97 // Reference
98 // 6.5.4.1. Mean Vector and Covariance Matrix
99 // http://www.itl.nist.gov/div898/handbook/pmc/section5/pmc541.htm
100 A = [
101 4.0 2.0 0.60
102 4.2 2.1 0.59
103 3.9 2.0 0.58
104 4.3 2.1 0.62
105 4.1 2.2 0.63
106 ];
107 S = [
108 0.025 0.0075 0.00175
109 0.0075 0.007 0.00135
110 0.00175 0.00135 0.00043
111 ];
112 C = cov (A);
113 assert_checkalmostequal ( S , C , 10*%eps , [] , "element");
114 //
115 // The same, with nrmlztn=0
116 A = [
117 4.0 2.0 0.60
118 4.2 2.1 0.59
119 3.9 2.0 0.58
120 4.3 2.1 0.62
121 4.1 2.2 0.63
122 ];
123 S = [
124 0.025 0.0075 0.00175
125 0.0075 0.007 0.00135
126 0.00175 0.00135 0.00043
127 ];
128 C = cov (A,0);
129 assert_checkalmostequal ( S , C , 10*%eps , [] , "element");
130 //
131 x = [1;2];
132 computed = cov (x,1);
133 expected = 0.25;
134 assert_checkequal ( computed , expected );
135 //
136 x = [1;2];
137 computed = cov (x,0);
138 expected = 0.5;
139 assert_checkequal ( computed , expected );
140 //
141 x = [1;2];
142 y = [3;4];
143 computed = cov (x,y,1);
144 expected = [0.25,0.25;0.25,0.25];
145 assert_checkequal ( computed , expected );
146 //
147 // Matlab compatibility
148 x=[-1 1 2 ; -2 3 1 ; 4 0 3];
149 computed = cov (x);
150 expected = [
151    10.3333   -4.1667    3.0000
152    -4.1667    2.3333   -1.5000
153     3.0000   -1.5000    1.0000
154 ];
155 assert_checkalmostequal ( computed , expected ,[],1.e-4);