@sjcrh/proteinpaint-rust 2.12.0 → 2.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/Cargo.toml CHANGED
@@ -24,6 +24,10 @@ libmath = "^0.2.1"
24
24
  json = "^0.12.4"
25
25
  serde = {version = "^1.0.147", features = ["derive"]}
26
26
  serde_json="^1.0.88"
27
+ num = "^0.4.1"
28
+ #r_stats = { git = "https://github.com/derekdreery/r_stats.git"}
29
+ #r_stats = { git = "https://github.com/robinpaul85/r_stats.git"}
30
+
27
31
 
28
32
  [profile.release]
29
33
  lto = "fat"
@@ -58,3 +62,7 @@ path="src/sv.rs"
58
62
  [[bin]]
59
63
  name="cluster"
60
64
  path="src/cluster.rs"
65
+
66
+ #[[bin]]
67
+ #name="wilcoxon"
68
+ #path="src/wilcoxon.rs"
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.12.0",
2
+ "version": "2.25.0",
3
3
  "name": "@sjcrh/proteinpaint-rust",
4
4
  "description": "Rust-based utilities for proteinpaint",
5
5
  "main": "index.js",
@@ -0,0 +1,642 @@
1
+ #[cfg(test)]
2
+ mod tests {
3
+
4
+ #[test]
5
+ fn test_wilcoxon_rank_sum() {
6
+ use crate::wilcoxon_rank_sum_test;
7
+ assert_eq!(
8
+ wilcoxon_rank_sum_test(
9
+ vec![
10
+ 3.7, 2.5, 5.9, 13.1, 1.0, 10.6, 3.2, 3.0, 6.5, 15.5, 2.6, 16.5, 2.6, 4.0, 8.6,
11
+ 8.3, 1.9, 7.9, 7.9, 6.1, 17.6, 3.1, 3.0, 1.5, 8.1, 18.2, -1.8, 3.6, 6.0, 1.9,
12
+ 8.9, 3.2, 0.3, -1.0, 11.2, 6.2, 16.2, 7.5, 9.0, 9.4, 18.9, 0.1, 11.5, 10.1,
13
+ 12.5, 14.6, 1.5, 17.3, 15.4, 7.6, 2.4, 13.5, 3.8, 17.0
14
+ ],
15
+ vec![11.5, 5.1, 21.1, 4.4, -0.04],
16
+ 50,
17
+ 't',
18
+ true
19
+ ),
20
+ 0.8917448488576822
21
+ );
22
+
23
+ assert_eq!(
24
+ wilcoxon_rank_sum_test(
25
+ vec![
26
+ 22.3950723737944,
27
+ 33.8227081589866,
28
+ 45.1407992918976,
29
+ 28.3479649920482,
30
+ 18.2336819062475,
31
+ 4.32351183332503,
32
+ 11.9014307267498,
33
+ 48.0554144773632,
34
+ 14.9064014137257,
35
+ 11.2484716628678,
36
+ 42.857265946921,
37
+ 6.14226084970869,
38
+ 13.765204195166,
39
+ 23.7536687662359,
40
+ 35.0198161723092,
41
+ 30.1217778825667,
42
+ 1.55535256816074,
43
+ 38.5163993313909,
44
+ 34.6145691110287,
45
+ 8.42882150504738
46
+ ],
47
+ vec![
48
+ 35.3232058370486,
49
+ 38.4726115851663,
50
+ 63.7901770556346,
51
+ 63.6540996702388,
52
+ 54.1668611462228,
53
+ 86.2734804977663,
54
+ 87.4467799020931,
55
+ 71.2533111660741,
56
+ 90.7283631013706,
57
+ 36.3230113568716,
58
+ 33.9395571127534,
59
+ 92.234949907288,
60
+ 77.9833765677176,
61
+ 43.5002030362375,
62
+ 79.9727810896002,
63
+ 37.503333974164,
64
+ 39.9319424736314,
65
+ 33.0334767652676,
66
+ 47.5299863377586,
67
+ 80.9905858896673
68
+ ],
69
+ 50,
70
+ 't',
71
+ true
72
+ ),
73
+ 1.1260929189061898e-6
74
+ );
75
+
76
+ assert_eq!(
77
+ wilcoxon_rank_sum_test(
78
+ vec![0.73, 0.74, 0.8, 0.83, 0.88, 0.90, 1.04, 1.15],
79
+ vec![1.21, 1.38, 1.45, 1.46, 1.64, 1.89, 1.91],
80
+ 50,
81
+ 't',
82
+ true
83
+ ),
84
+ 0.0003108003108003108
85
+ );
86
+
87
+ assert_eq!(
88
+ wilcoxon_rank_sum_test(
89
+ vec![
90
+ 1890.0, 26.0, 21.0, 16.0, 29.0, 1680.0, 25.0, 19.0, 29.0, 35.0, 36.0, 15.0,
91
+ 0.0, 15.0, 4.7, 36.0, 0.0, 0.0, 0.0, 0.0, 14.0, 22.0, 11.0, 0.0, 23.0, 0.0,
92
+ 0.0, 43.0, 31.0, 26.0, 31.0, 21.0, 37.0, 0.0, 33.0, 0.0, 33.0, 28.0, 25.0, 0.0,
93
+ 7.7, 0.0, 4.4, 0.0, 0.0, 25.0, 1.7, 0.0, 0.0, 13.0, 0.0, 8.9, 10.0, 0.0, 22.0,
94
+ 15.0, 0.0, 17.0, 0.0, 1410.0, 22.0, 23.0, 17.0, 3690.0, 1440.0, 3220.0, 25.0,
95
+ 29.0, 1.8, 0.0, 31.0, 31.0, 9.6, 0.0, 48.0, 40.0, 41.0, 33.0, 45.0, 1960.0,
96
+ 31.0, 28.0, 23.0, 36.0, 19.0, 0.0, 0.0, 0.0, 5.4, 0.0, 11.0, 13.0, 2060.0, 0.0,
97
+ 0.0, 0.0, 3360.0, 210.0, 4350.0, 1850.0, 270.0, 160.0, 1770.0, 4190.0, 230.0,
98
+ 360.0, 3450.0, 34.0, 55.0, 2090.0, 1570.0, 21.0, 1610.0, 1760.0, 1260.0,
99
+ 4020.0, 0.0, 28.0, 280.0, 1790.0, 1760.0, 1600.0, 4180.0, 3600.0, 1450.0,
100
+ 1110.0, 25.0, 0.0, 0.0, 11.0, 37.0, 2370.0, 18.0, 20.0, 19.0, 26.0, 51.0, 40.0,
101
+ 1130.0, 25.0, 39.0, 0.0, 27.0, 30.0, 37.0, 27.0, 16.0, 17.0, 0.0, 31.0, 41.0,
102
+ 36.0, 40.0, 1330.0, 39.0, 37.0, 28.0, 0.0, 34.0, 15.0, 17.0, 1320.0, 1200.0,
103
+ 13.0, 14.0, 1200.0, 11.0, 4.8, 17.0, 8.6, 6.8, 0.0, 0.0, 0.0, 8.9, 2.9, 3.8,
104
+ 0.0, 4.6, 3.2, 6.1, 4.4, 9.6, 12.0, 0.0, 0.0, 5.2, 8.4, 0.0, 14.0, 10.0, 12.0,
105
+ 40.0, 36.0, 23.0, 8.6, 28.0, 0.0, 0.0, 0.0, 44.0, 1510.0, 16.0, 28.0, 1780.0,
106
+ 28.0, 9.2, 6.0, 1060.0, 0.0, 17.0, 4.7, 0.0, 1060.0, 13.0, 0.0, 130.0, 22.0,
107
+ 1270.0, 0.5, 6.1, 0.0, 0.0, 0.0, 12.0, 23.0, 10.0, 0.0, 9.0, 0.0, 0.0, 1560.0,
108
+ 17.0, 0.0, 20.0, 8.1, 34.0, 0.0, 20.0, 0.0, 15.0, 1060.0, 0.0, 14.0, 0.0,
109
+ 1200.0, 19.0, 14.0, 17.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.9, 11.0, 980.0, 11.0, 0.0,
110
+ 27.0, 17.0, 0.0, 23.0, 0.0, 0.0, 0.0, 0.0, 2.9, 840.0, 0.0, 0.0, 8.7, 3.6,
111
+ 12.0, 0.0, 0.0, 6.2, 1040.0, 230.0, 62.0, 120.0, 4.7, 0.0, 0.0, 700.0, 0.8,
112
+ 1.5, 0.0, 2150.0, 0.0, 34.0, 19.0, 30.0, 1800.0, 31.0, 1900.0, 16.0, 15.0,
113
+ 41.0, 45.0, 12.0, 3390.0, 32.0, 25.0, 17.0, 16.0, 33.0, 30.0, 48.0, 49.0, 41.0,
114
+ 5.9, 25.0, 31.0, 32.0, 64.0, 51.0, 37.0, 27.0, 31.0, 41.0, 18.0, 38.0, 33.0,
115
+ 28.0, 14.0, 1590.0, 14.0, 47.0, 31.0, 41.0, 44.0, 21.0, 44.0, 46.0, 25.0, 41.0,
116
+ 30.0, 14.0, 40.0, 40.0, 45.0, 26.0, 43.0, 1640.0, 36.0, 47.0, 4.2, 23.0, 41.0,
117
+ 33.0, 37.0, 14.0, 29.0, 1300.0, 27.0, 49.0, 22.0, 41.0, 40.0, 48.0, 45.0, 17.0,
118
+ 40.0, 20.0, 39.0, 40.0, 15.0, 16.0, 37.0, 33.0, 14.0, 32.0, 46.0, 13.0, 29.0,
119
+ 37.0, 31.0, 37.0, 28.0, 21.0, 25.0, 49.0, 38.0, 44.0, 18.0, 18.0, 65.0, 34.0,
120
+ 32.0, 38.0, 28.0, 50.0, 43.0, 24.0, 31.0, 48.0, 1240.0, 1070.0, 0.0, 0.0, 12.0,
121
+ 4.8, 3.3, 16.0, 0.7, 3.3, 0.0, 1100.0, 20.0, 15.0, 12.0, 17.0, 12.0, 0.0, 0.0,
122
+ 41.0, 0.0, 0.0, 12.0, 0.0, 0.0, 1200.0, 3.5, 18.0, 0.0, 3.6, 10.0, 11.0, 0.0,
123
+ 20.0, 0.0, 31.0, 880.0, 5.0, 0.0, 5.8, 6.6, 0.0, 8.6, 8.2, 12.0, 0.0, 7.1, 0.0,
124
+ 6.7, 6.9, 0.0, 25.0, 32.0, 0.0, 17.0, 23.0, 14.0, 0.0, 0.0, 250.0, 160.0, 0.0,
125
+ 3850.0, 74.0, 0.5, 5.9, 4.1, 0.0, 4.4, 4.2, 2.9, 0.0, 0.0, 4.4, 15.0, 5.7, 0.0,
126
+ 0.0, 1090.0, 8.9, 42.0, 0.0, 6.7, 10.0, 0.0, 10.0, 2.9, 0.0, 0.0, 0.0, 4.8,
127
+ 0.0, 0.0, 7.2, 10.0, 11.0, 13.0, 6.3, 0.0, 0.0, 0.0, 0.0, 3.9, 0.0, 3.9, 0.0,
128
+ 0.0, 7.3, 7.9, 0.0, 7.6, 51.0, 3530.0, 0.0, 3260.0, 0.0, 0.0, 1860.0, 8.2,
129
+ 3200.0, 0.0, 0.0, 1160.0, 0.0, 0.0, 0.0, 87.0, 0.0, 1300.0, 92.0, 380.0, 0.0,
130
+ 1540.0, 0.0, 0.0, 1290.0, 0.0, 1290.0, 0.0, 92.0, 93.0, 0.0, 0.0, 2090.0,
131
+ 2140.0, 3670.0, 1480.0, 0.0, 0.0, 2.0, 13.0, 480.0, 3400.0, 0.0, 0.0, 3540.0,
132
+ 2010.0, 24.0, 2110.0, 35.0, 0.0, 1940.0, 0.0, 4650.0, 0.0, 2140.0, 190.0,
133
+ 690.0, 0.0, 0.0, 2530.0, 3830.0, 0.0, 0.0, 2590.0, 0.0, 79.0, 0.0, 35.0, 0.0,
134
+ 0.0, 53.0, 2480.0, 0.0, 3970.0, 30.0, 2110.0, 5.1, 2110.0, 0.0, 36.0, 4.8, 0.0,
135
+ 0.0, 18.0, 0.0, 2040.0, 0.0, 0.0, 0.0, 7.9, 2260.0, 3550.0, 13.0, 0.0, 12.0,
136
+ 0.0, 0.0, 6.0, 0.0, 0.0, 1100.0, 5.9, 2110.0, 0.0, 19.0, 0.0, 0.0, 0.0, 1570.0,
137
+ 11.0, 4.5, 4710.0, 90.0, 8.4, 0.0, 50.0, 8.5, 0.0, 5.6, 2110.0, 0.0, 0.0,
138
+ 2120.0, 0.0, 19.0, 0.0, 0.0, 2140.0, 0.0, 2020.0, 0.0, 2060.0, 0.0, 0.0, 50.0,
139
+ 250.0, 3590.0, 4700.0, 140.0, 31.0, 0.0, 0.0, 270.0, 1410.0, 4050.0, 3680.0,
140
+ 0.0, 0.0, 1500.0, 0.0, 130.0, 150.0, 2240.0, 1310.0, 0.0, 0.0, 0.0, 11.0, 0.0,
141
+ 3780.0, 200.0, 35.0, 0.0, 100.0, 0.0, 290.0, 8.3, 0.0, 0.0, 0.0, 2040.0, 120.0,
142
+ 2110.0, 200.0, 3560.0, 5.3, 0.0, 68.0, 0.0, 0.0, 3770.0, 0.0, 0.0, 1850.0, 0.0,
143
+ 4.5, 110.0, 66.0, 20.0, 8.7, 31.0, 23.0, 0.0, 0.0, 2160.0, 0.0, 2200.0, 0.0,
144
+ 0.0, 0.0, 0.0, 110.0, 0.0, 13.0, 0.0, 2590.0, 0.0, 63.0, 550.0, 2.1, 0.0, 0.0,
145
+ 11.0, 17.0, 0.0, 0.0, 10.0, 0.0, 1540.0, 0.0, 0.0, 2080.0, 120.0, 12.0, 4.8,
146
+ 1290.0, 1700.0, 3890.0, 0.0, 0.0, 2130.0, 0.0, 0.0, 180.0, 0.0, 2410.0, 0.0,
147
+ 0.0, 2800.0, 350.0, 0.0, 3630.0, 0.0, 270.0, 0.0, 0.0, 0.0, 0.0, 1800.0,
148
+ 2110.0, 2170.0, 10.0, 0.0, 0.0, 3910.0, 0.0, 0.0, 12.0, 0.0, 0.0, 230.0, 0.0,
149
+ 0.0, 360.0, 2170.0, 110.0, 22.0, 0.0, 0.0, 0.0, 1630.0, 95.0, 0.0, 2140.0,
150
+ 3950.0, 62.0, 2140.0, 150.0, 220.0, 270.0, 1760.0, 0.0, 4270.0, 2180.0, 1620.0,
151
+ 3660.0, 0.0, 2800.0, 56.0, 1570.0, 1880.0, 29.0, 0.0, 130.0, 0.0, 240.0,
152
+ 3890.0, 1350.0, 6.4, 1200.0, 0.0, 0.0, 14.0, 0.0, 0.0, 620.0, 0.0, 2170.0,
153
+ 1820.0, 3650.0, 0.0, 280.0, 2170.0, 50.0, 28.0, 30.0, 0.0, 3680.0, 0.0, 3190.0,
154
+ 0.0, 0.0, 1600.0, 2140.0, 0.0, 0.0, 0.0, 0.0, 4120.0, 54.0, 2290.0, 1350.0,
155
+ 4430.0, 89.0, 2610.0, 3660.0, 1890.0, 0.0, 2120.0, 150.0, 2030.0, 92.0, 1200.0,
156
+ 1310.0, 0.0, 0.0, 0.0, 0.0, 290.0, 110.0, 0.0, 0.0, 18.0, 31.0, 0.0, 2790.0,
157
+ 21.0, 0.0, 200.0, 23.0, 3940.0, 250.0, 3940.0, 0.0, 150.0, 260.0, 35.0, 230.0,
158
+ 1190.0, 2370.0, 130.0, 200.0, 3360.0, 3740.0, 0.0, 0.0, 0.0, 3250.0, 23.0,
159
+ 1200.0, 0.0, 230.0, 3530.0, 7.0, 0.0, 0.0, 120.0, 0.0, 0.0, 5.2, 0.0, 0.0,
160
+ 38.0, 0.0, 120.0, 0.0, 0.9, 0.0, 220.0, 290.0, 3650.0, 4.3, 3120.0, 1990.0,
161
+ 3540.0, 0.0, 0.0, 0.0, 60.0, 0.0, 0.0, 280.0, 0.0, 0.0, 87.0, 0.0, 0.0, 270.0,
162
+ 3350.0, 0.0, 2020.0, 1720.0, 0.0, 3960.0, 0.0, 870.0, 3470.0, 3990.0, 3470.0,
163
+ 3630.0, 0.0, 0.0, 980.0, 2090.0, 81.0, 3840.0, 2520.0, 2320.0, 30.0, 92.0, 0.0,
164
+ 25.0, 40.0, 2400.0, 77.0, 0.0, 0.0, 130.0, 0.0, 200.0, 3580.0, 0.0, 1980.0,
165
+ 200.0, 780.0, 0.0, 690.0, 0.0, 33.0, 3220.0, 7.7, 0.0, 0.0, 2000.0, 0.0, 0.0,
166
+ 95.0, 0.0, 100.0, 42.0, 56.0, 3960.0, 0.0, 610.0, 0.0, 0.0, 60.0, 3.0, 160.0,
167
+ 0.0, 390.0, 380.0, 2130.0, 740.0, 47.0, 850.0, 100.0, 150.0, 7.1, 870.0, 38.0,
168
+ 12.0, 180.0, 180.0, 0.0, 0.0, 5.5, 2630.0, 0.0, 2680.0, 76.0, 3880.0, 10.0,
169
+ 0.0, 270.0, 0.0, 8.9, 2260.0, 0.0, 0.0, 0.0, 66.0, 0.0, 2690.0, 2690.0, 0.0,
170
+ 2260.0, 1050.0, 0.0, 8.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9, 0.0,
171
+ 30.0, 0.0, 2310.0, 0.0, 18.0, 0.0, 1590.0, 0.0, 8.7, 2480.0, 2640.0, 0.0,
172
+ 2530.0, 1170.0, 0.0, 2750.0, 0.0, 0.0, 5.2, 1680.0, 2590.0, 0.0, 14.0, 0.0,
173
+ 22.0, 0.0, 0.0, 1400.0, 0.0, 0.0, 22.0, 0.0, 0.0, 2700.0, 6.4, 1400.0, 17.0,
174
+ 1400.0, 1100.0, 46.0, 0.0, 0.0, 21.0, 0.0, 37.0, 0.0, 0.0, 3650.0, 0.0, 2170.0,
175
+ 0.0, 1590.0, 12.0, 0.0, 0.0, 2720.0, 1400.0, 8.5, 12.0, 1690.0, 2070.0, 0.0,
176
+ 0.0, 4510.0, 1400.0, 2320.0, 0.0, 0.0, 0.0, 16.0, 2390.0, 0.0, 2780.0, 0.0,
177
+ 0.0, 25.0, 10.0, 0.0, 0.0, 860.0, 0.0, 31.0, 830.0, 0.0, 3880.0, 2120.0, 15.0,
178
+ 0.0, 3470.0, 0.0, 0.0, 1400.0, 2040.0, 2560.0, 8.5, 1200.0, 1200.0, 0.0, 0.0,
179
+ 0.0, 1060.0, 0.0, 20.0, 0.0, 22.0, 0.0, 3930.0, 0.0, 280.0, 28.0, 3730.0, 0.0,
180
+ 0.0, 1400.0, 1730.0, 0.0, 0.0, 490.0, 0.0, 2070.0, 0.0, 2750.0, 0.0, 0.0, 0.0,
181
+ 0.0, 0.0, 2130.0, 0.8, 0.0, 0.0, 0.0, 0.0, 0.0, 29.0, 0.0, 3750.0, 2810.0, 0.0,
182
+ 2230.0, 2970.0, 0.0, 0.0, 2.2, 16.0, 0.0, 66.0, 0.0, 11.0, 2010.0, 2700.0,
183
+ 1410.0, 0.0, 2590.0, 0.7, 2160.0, 1860.0, 770.0, 2500.0, 2260.0, 0.0, 2300.0,
184
+ 0.0, 0.0, 0.0, 1170.0, 0.0, 2080.0, 8.7, 24.0, 2720.0, 0.0, 0.0, 4.1, 0.0, 0.0,
185
+ 18.0, 0.0, 0.0, 11.0, 9.2, 0.0, 0.0, 2380.0, 0.0, 1280.0, 2330.0, 220.0,
186
+ 2790.0, 81.0, 0.0, 70.0, 0.0, 2500.0, 0.0, 0.0, 0.0, 0.0, 22.0, 150.0, 19.0,
187
+ 0.0, 21.0, 3770.0, 4.5, 1530.0, 0.0, 0.0, 19.0, 0.0, 0.0, 4050.0, 0.0, 10.0,
188
+ 0.0, 0.0, 0.0, 0.0, 15.0, 0.0, 16.0, 0.0, 1460.0, 0.0, 2480.0, 0.0, 0.0,
189
+ 1170.0, 0.0, 97.0, 2700.0, 0.0, 0.0, 2480.0, 0.0, 1070.0, 0.0, 0.0, 35.0, 0.0,
190
+ 2130.0, 46.0, 0.0, 1980.0, 0.0, 2260.0, 0.0, 480.0, 2110.0, 22.0, 0.0, 2400.0,
191
+ 0.0, 0.0, 0.0, 2150.0, 2920.0, 0.0, 16.0, 0.0, 0.0, 2620.0, 0.0, 0.0, 0.0, 0.0,
192
+ 0.0, 9.5, 48.0, 0.0, 0.0, 0.0, 0.0, 2590.0, 48.0, 0.0, 0.0, 0.0, 0.0, 0.0,
193
+ 75.0, 0.0, 0.0, 24.0, 2220.0, 1200.0, 0.0, 0.0, 20.0, 0.0, 0.0, 15.0, 0.0, 0.0,
194
+ 8.2, 2480.0, 0.0, 15.0, 0.0, 65.0, 13.0, 0.0, 0.0, 0.0, 0.0, 2330.0, 0.0, 6.5,
195
+ 9.7, 14.0, 2280.0, 4.8, 0.0, 24.0, 7.5, 2300.0, 0.0, 0.0, 0.0, 300.0, 2660.0,
196
+ 2100.0, 0.0, 0.0, 0.0, 2670.0, 0.0, 0.0, 1140.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
197
+ 0.0, 280.0, 0.0, 6.6, 12.0, 1750.0, 0.0, 1.2, 0.0, 0.0, 5.2, 0.0, 0.0, 0.0,
198
+ 2100.0, 0.0, 2680.0, 7.1, 0.0, 0.0, 0.0, 0.0, 19.0, 0.0, 2060.0, 0.8, 2330.0,
199
+ 2670.0, 2330.0, 0.0, 7.0, 0.0, 470.0, 5.5, 0.5, 1290.0, 0.0, 19.0, 6.1, 0.0,
200
+ 3880.0, 13.0, 6.9, 0.0, 1330.0, 0.0, 13.0, 2630.0, 0.0, 23.0, 0.0, 9.8, 0.0,
201
+ 0.0, 0.0, 4.9, 1710.0, 14.0, 2700.0, 0.0, 11.0, 2150.0, 14.0, 0.0, 0.0, 0.0,
202
+ 2770.0, 0.0, 0.0, 9.0, 12.0, 2290.0, 510.0, 69.0, 0.0, 0.0, 4.9, 0.0, 240.0,
203
+ 0.0, 23.0, 0.0, 9.1, 17.0, 0.0, 2320.0, 0.0, 0.0, 0.0, 6.1, 1610.0, 2750.0,
204
+ 2630.0, 0.0, 0.0, 0.0, 0.0, 1950.0, 19.0, 72.0, 0.0, 0.0, 0.0, 0.0, 0.0, 19.0,
205
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2340.0, 2650.0, 5.7,
206
+ 3230.0, 2110.0, 230.0, 1270.0, 2450.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2030.0, 0.0,
207
+ 12.0, 0.0, 2890.0, 0.0, 40.0, 0.0, 14.0, 0.0, 0.0, 5.7, 2610.0, 0.0, 0.0, 0.0,
208
+ 1180.0, 0.0, 6.8, 7.0, 2600.0, 2340.0, 660.0, 0.0, 1290.0, 0.1, 3740.0, 1640.0,
209
+ 0.0, 0.0, 1290.0, 0.0, 0.0, 0.0, 0.0, 0.0, 12.0, 3830.0, 0.0, 0.0, 0.0, 2250.0,
210
+ 0.0, 2270.0, 120.0, 12.0, 0.0, 27.0, 18.0, 2390.0, 0.0, 0.0, 830.0, 7.5,
211
+ 1200.0, 0.0, 0.0, 2510.0, 1400.0, 310.0, 2680.0, 0.0, 2150.0, 0.0, 0.0, 5.5,
212
+ 2290.0, 4.0, 0.0, 0.0, 10.0, 2250.0, 0.0, 130.0, 300.0, 13.0, 2250.0, 3710.0,
213
+ 1950.0, 9.6, 0.0, 0.0, 5.3, 980.0, 0.0, 2190.0, 0.0, 0.0, 0.0, 0.0, 6.3, 0.0,
214
+ 0.0, 2040.0, 2800.0, 0.0, 19.0, 1400.0, 1200.0, 5.3, 19.0, 2080.0, 16.0, 12.0,
215
+ 0.0, 0.0, 5.2, 2080.0, 7.9, 0.0, 0.0, 150.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1400.0,
216
+ 1400.0, 1200.0, 0.0, 1950.0, 3020.0, 0.0, 96.0, 0.0, 0.0, 1400.0, 3480.0, 6.6,
217
+ 0.0, 0.0, 2.3, 2030.0, 1200.0, 2160.0, 2370.0, 53.0, 0.0, 2420.0, 0.0, 2030.0,
218
+ 5.5, 2380.0, 0.0, 0.0, 0.0, 0.0, 340.0, 1980.0, 1410.0, 0.0, 0.0, 34.0, 22.0,
219
+ 2020.0, 1580.0, 0.0, 6.6, 0.0, 0.0, 2660.0, 39.0, 0.0, 0.0, 16.0, 1400.0,
220
+ 1860.0, 19.0, 1400.0, 0.0, 0.0, 0.0, 0.0, 2850.0, 50.0, 2070.0, 0.0, 0.0, 11.0,
221
+ 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 0.0, 1200.0, 4270.0, 0.0, 280.0, 0.0, 300.0,
222
+ 230.0, 240.0, 28.0, 0.0, 260.0, 47.0, 0.0, 220.0, 49.0, 31.0, 43.0, 4270.0,
223
+ 94.0, 25.0, 46.0, 3290.0, 3110.0, 46.0, 42.0, 30.0, 18.0, 45.0, 28.0, 40.0,
224
+ 44.0, 26.0, 0.0, 1790.0, 16.0, 1890.0, 110.0, 4240.0, 43.0, 1970.0, 1650.0,
225
+ 1400.0, 1810.0, 1810.0, 4650.0, 1820.0, 1580.0, 1730.0, 1930.0, 4790.0, 1840.0,
226
+ 180.0, 35.0, 840.0, 1610.0, 290.0, 4160.0, 1730.0, 1590.0, 38.0, 1100.0,
227
+ 1790.0, 30.0, 1660.0, 0.0, 34.0, 0.0, 63.0, 41.0, 140.0, 34.0, 35.0, 35.0, 0.0,
228
+ 44.0, 3410.0, 3670.0, 0.0, 160.0, 46.0, 0.0, 0.0, 2310.0, 0.0, 0.0, 0.0, 0.0,
229
+ 0.0, 0.0, 0.0, 0.0, 230.0, 0.0, 0.0, 0.0, 190.0, 0.0, 0.0, 0.0, 2830.0, 210.0,
230
+ 13.0, 38.0, 41.0, 0.0, 0.0, 0.0, 23.0, 0.0, 0.0, 24.0, 0.0, 3160.0, 36.0, 0.0,
231
+ 0.0, 8.5, 0.0, 7.2, 1390.0, 310.0, 0.0, 2090.0, 3860.0, 0.0, 0.0, 18.0, 0.0,
232
+ 0.0, 0.0, 5.7, 5.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.8, 180.0, 2240.0, 8.7, 0.0,
233
+ 23.0, 7.2, 2620.0, 5.0, 0.0, 100.0, 74.0, 0.0, 0.0, 0.0, 16.0, 4350.0, 0.0,
234
+ 2100.0, 0.0, 970.0, 0.0, 6.7, 10.0, 0.0, 9.1, 0.0, 0.0, 0.0, 0.0, 0.0, 16.0,
235
+ 0.0, 81.0, 0.0, 220.0, 0.0, 15.0, 0.0, 0.0, 0.0, 0.0, 14.0, 0.0, 0.0, 0.0,
236
+ 10.0, 11.0, 0.0, 2600.0, 1730.0, 94.0, 0.0, 650.0, 0.0, 0.0, 7.0, 0.0, 180.0,
237
+ 0.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 2510.0, 85.0, 15.0, 0.0, 0.0, 0.0, 0.0,
238
+ 0.0, 440.0, 0.0, 0.0, 2530.0, 0.0, 0.0, 0.0, 0.0, 0.0, 13.0, 2.1, 1.7, 0.0,
239
+ 0.0, 0.0, 0.0, 83.0, 7.0, 0.1, 390.0, 0.0, 0.0, 0.0, 160.0, 5.3, 3040.0, 0.0,
240
+ 4.4, 25.0, 180.0, 2420.0, 2.0, 670.0, 15.0, 0.0, 0.0, 0.0, 0.0, 1.5, 1670.0,
241
+ 2170.0, 240.0, 1590.0, 0.0, 0.0, 96.0, 0.0, 0.0, 62.0, 8.8, 0.0, 1600.0,
242
+ 1230.0, 3.2, 0.0, 100.0, 13.0, 0.0, 1.7, 140.0, 0.0, 0.0, 0.0, 0.0, 7.4, 5.2,
243
+ 71.0, 0.0, 11.0, 51.0, 0.0, 0.0, 0.0, 0.0, 1.8, 6.0, 21.0, 250.0, 0.0, 1.9,
244
+ 1750.0, 11.0, 0.0, 8.1, 0.0, 21.0, 18.0, 4.2, 13.0, 1.8, 680.0, 0.0, 1930.0,
245
+ 1680.0, 5.5, 2180.0, 2820.0, 0.0, 130.0, 0.0, 17.0, 19.0, 0.0, 5.8, 0.0, 0.0,
246
+ 0.0, 0.0, 0.0, 18.0, 11.0, 1090.0, 150.0, 2200.0, 0.0, 15.0, 2080.0, 0.0, 9.9,
247
+ 11.0, 1200.0, 0.0, 3020.0, 22.0, 0.0, 37.0, 0.0, 0.0, 0.0, 0.0, 7.0, 0.0, 0.0,
248
+ 55.0, 0.0, 2170.0, 41.0, 16.0, 18.0, 0.0, 6.9, 1400.0, 8.3, 0.0, 0.0, 63.0,
249
+ 0.0, 0.0, 4520.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2900.0, 120.0, 0.0, 0.0, 1400.0,
250
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 8.3, 0.0, 0.2, 350.0,
251
+ 0.0, 1400.0, 0.0, 3400.0, 0.0, 17.0, 1200.0, 0.0, 0.0, 1200.0, 1200.0, 0.0,
252
+ 44.0, 0.0, 930.0, 0.0, 1210.0, 1200.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1400.0,
253
+ 2060.0, 0.0, 0.0, 1200.0, 1400.0, 1400.0, 2660.0, 1200.0, 0.0, 2650.0, 170.0,
254
+ 0.0, 0.0, 0.0, 0.0, 260.0, 0.0, 5.5, 0.0, 0.0, 1400.0, 1400.0, 0.0, 0.0, 0.0,
255
+ 260.0, 0.0, 2200.0, 0.0, 180.0, 0.9, 0.0, 0.0, 6.5, 0.0, 6.8, 2880.0, 0.6,
256
+ 2660.0, 12.0, 2680.0, 0.0, 0.0, 2230.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2310.0, 47.0,
257
+ 1240.0, 1890.0, 0.0, 15.0, 0.0, 0.0, 0.0, 0.0, 2710.0, 0.0, 0.0, 0.0, 0.0, 0.0,
258
+ 0.0, 0.0, 590.0, 320.0, 4.6, 0.0, 0.8, 4.1, 0.0, 0.0, 1200.0, 23.0, 0.0, 0.0,
259
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 17.0, 0.0, 0.0, 7.1, 0.0, 1.2, 0.0, 0.8,
260
+ 17.0, 0.0, 0.0, 0.0, 0.0, 5.0, 3830.0, 0.0, 0.0, 46.0, 3.5, 0.0, 17.0, 1200.0,
261
+ 32.0, 0.0, 14.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1400.0,
262
+ 0.0, 2490.0, 2550.0, 13.0, 18.0, 0.0, 0.0, 0.0, 1400.0, 67.0, 0.0, 140.0, 0.0,
263
+ 0.0, 0.0, 12.0, 0.0, 1730.0, 0.0, 17.0, 0.0, 1200.0, 0.0, 7.0, 1140.0, 4.4,
264
+ 4.9, 1.0, 10.0, 0.0, 0.0, 11.0, 3.1, 0.0, 0.0, 1790.0, 17.0, 0.0, 12.0, 0.0,
265
+ 7.0, 0.0, 0.0, 0.0, 4920.0, 27.0, 0.0, 2780.0, 0.0, 2770.0, 1200.0, 0.0, 0.0,
266
+ 2700.0, 0.0, 9.3, 2260.0, 2680.0, 0.0, 0.0, 0.0, 14.0, 0.0, 11.0, 2700.0, 0.0,
267
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1410.0, 0.0, 0.0, 0.0, 0.0, 53.0, 0.0,
268
+ 4180.0, 7.2, 3.9, 0.0, 2740.0, 0.0, 0.0, 0.0, 2530.0, 0.0, 0.0, 0.0, 0.0, 10.0,
269
+ 0.0, 0.0, 0.0, 0.0, 0.0, 1200.0, 0.0, 9.9, 10.0, 31.0, 0.0, 0.0, 6.6, 12.0,
270
+ 5.0, 1770.0, 2930.0, 1440.0, 2340.0, 3180.0, 2640.0, 1330.0, 2590.0, 0.0, 0.0,
271
+ 0.0, 0.0, 1250.0, 0.0, 0.0, 0.0, 160.0, 0.0, 0.0, 0.0, 4.8, 0.1, 1.1, 0.0,
272
+ 140.0, 60.0, 2140.0, 0.0, 1660.0, 0.0, 0.0, 0.0, 950.0, 0.0, 0.0, 0.0, 0.0,
273
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 27.0, 0.0, 0.0, 3160.0, 11.0, 0.0,
274
+ 0.0, 0.0, 1940.0, 1880.0, 2790.0, 0.0, 2530.0, 9.5, 1820.0, 7.5, 2510.0,
275
+ 2650.0, 2.1, 0.0, 7.8, 0.0, 0.0, 2730.0, 0.0, 0.0, 1650.0, 9.3, 800.0, 310.0,
276
+ 0.0, 1640.0, 0.0, 0.0, 0.0, 2700.0, 0.0, 7.6, 0.0, 5000.0, 0.0, 0.0, 0.0, 9.6,
277
+ 750.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2570.0, 0.0, 0.0,
278
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.2, 0.0, 0.0,
279
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
280
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
281
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
282
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
283
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
284
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
285
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
286
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
287
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
288
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
289
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
290
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
291
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
292
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
293
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
294
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
295
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
296
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
297
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
298
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
299
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
300
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
301
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
302
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
303
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
304
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
305
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
306
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
307
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
308
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
309
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
310
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
311
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
312
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
313
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
314
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
315
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
316
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
317
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
318
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
319
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
320
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
321
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
322
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
323
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
324
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
325
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
326
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
327
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
328
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
329
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
330
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
331
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
332
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
333
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
334
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
335
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
336
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
337
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
338
+ 0.0, 0.0, 0.0
339
+ ],
340
+ vec![
341
+ 40.0, 38.0, 22.0, 0.0, 4530.0, 3820.0, 15.0, 4520.0, 300.0, 1390.0, 10.0, 0.0,
342
+ 1100.0, 7.8, 37.0, 15.0, 6.6, 0.0, 61.0, 64.0, 8.9, 0.0, 9.4, 0.0, 12.0, 8.1,
343
+ 0.0, 1700.0, 0.0, 23.0, 22.0, 49.0, 12.0, 0.0, 1130.0, 1200.0, 11.0, 5.6, 15.0,
344
+ 15.0, 100.0, 3920.0, 6.6, 13.0, 0.0, 21.0, 0.0, 0.0, 28.0, 0.0, 86.0, 27.0,
345
+ 2150.0, 0.0, 0.0, 0.0, 5.9, 0.0, 0.0, 2150.0, 2110.0, 0.0, 0.0, 0.0, 70.0,
346
+ 3800.0, 0.0, 0.0, 0.0, 0.0, 710.0, 3390.0, 0.0, 2580.0, 18.0, 0.0, 2120.0, 0.0,
347
+ 0.0, 2090.0, 0.0, 1120.0, 5.8, 1150.0, 3.9, 2050.0, 0.0, 0.0, 0.0, 1310.0,
348
+ 3380.0, 4390.0, 230.0, 4110.0, 0.0, 4190.0, 2100.0, 6.0, 110.0, 3480.0, 240.0,
349
+ 0.0, 190.0, 3440.0, 2700.0, 0.0, 0.0, 200.0, 0.0, 2.2, 0.0, 0.0, 140.0, 3430.0,
350
+ 32.0, 1250.0, 0.0, 24.0, 300.0, 370.0, 27.0, 0.0, 0.0, 0.0, 0.0, 2400.0, 280.0,
351
+ 0.0, 1020.0, 41.0, 6.6, 2110.0, 2110.0, 190.0, 0.0, 0.0, 0.0, 65.0, 12.0, 3.5,
352
+ 0.0, 13.0, 670.0, 0.0, 85.0, 8.0, 1310.0, 0.0, 0.0, 24.0, 11.0, 0.0, 10.0,
353
+ 1980.0, 0.0, 1400.0, 51.0, 0.0, 0.0, 7.0, 2620.0, 0.0, 5.7, 2720.0, 0.0, 18.0,
354
+ 0.0, 47.0, 0.0, 32.0, 0.0, 85.0, 0.0, 0.0, 34.0, 4320.0, 0.0, 0.0, 110.0, 4.2,
355
+ 0.0, 19.0, 9.3, 0.0, 2700.0, 0.0, 130.0, 0.0, 0.0, 3810.0, 2730.0, 6.0, 0.0,
356
+ 6.5, 0.0, 2570.0, 0.0, 0.0, 6.7, 0.0, 1370.0, 1730.0, 1200.0, 2280.0, 66.0,
357
+ 0.0, 76.0, 0.0, 0.0, 2760.0, 0.0, 0.0, 750.0, 0.0, 0.0, 83.0, 2600.0, 0.0,
358
+ 68.0, 0.0, 8.1, 0.0, 3110.0, 1340.0, 2460.0, 2860.0, 0.0, 16.0, 0.0, 5.7,
359
+ 2300.0, 2020.0, 0.0, 1800.0, 6.7, 6.7, 800.0, 1400.0, 0.0, 99.0, 0.0, 0.0,
360
+ 330.0, 0.0, 3130.0, 58.0, 1780.0, 200.0, 0.0, 120.0, 210.0, 100.0, 36.0, 55.0,
361
+ 0.0, 160.0, 0.0, 32.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
362
+ 0.0, 0.0, 0.0, 5.3, 0.0, 0.0, 140.0, 10.0, 62.0, 0.0, 18.0, 0.0, 2490.0, 0.0,
363
+ 0.0, 38.0, 0.0, 66.0, 0.0, 13.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 46.0, 0.0,
364
+ 0.0, 38.0, 50.0, 0.0, 67.0, 3.0, 0.0, 0.0, 0.8, 2.1, 0.0, 0.0, 52.0, 1.6, 14.0,
365
+ 0.0, 23.0, 0.0, 13.0, 0.0, 0.0, 34.0, 11.0, 59.0, 97.0, 12.0, 0.0, 0.0, 65.0,
366
+ 0.0, 0.0, 1650.0, 1440.0, 0.0, 1780.0, 0.0, 0.0, 0.0, 2210.0, 0.0, 0.0, 0.0,
367
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1200.0, 14.0, 0.0, 1230.0, 0.0, 0.0, 2290.0, 0.0,
368
+ 0.0, 4.0, 0.0, 0.0, 140.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2880.0, 2250.0, 0.0, 0.0,
369
+ 18.0, 0.0, 0.0, 0.1, 0.0, 1660.0, 460.0, 0.0, 0.0, 0.0, 180.0, 2.3, 0.0, 8.1,
370
+ 0.0, 0.0, 1740.0, 130.0, 0.0, 0.0, 0.0, 330.0, 2650.0, 0.0, 0.0, 2840.0, 0.0,
371
+ 0.0, 0.0, 1270.0, 15.0, 0.0, 11.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 0.0,
372
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
373
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
374
+ 70.0, 1200.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
375
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
376
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
377
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
378
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
379
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
380
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
381
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
382
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
383
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
384
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
385
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
386
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
387
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
388
+ ],
389
+ 50,
390
+ 't',
391
+ true
392
+ ),
393
+ 0.00019394092218582207
394
+ );
395
+
396
+ assert_eq!(
397
+ wilcoxon_rank_sum_test(
398
+ vec![1.0, 2.0, 4.0, 7.0],
399
+ vec![3.0, 7.0, 7.0, 7.0, 7.0, 12.0],
400
+ 50,
401
+ 't',
402
+ true
403
+ ),
404
+ 0.08806011270956263
405
+ );
406
+
407
+ assert_eq!(
408
+ wilcoxon_rank_sum_test(
409
+ vec![
410
+ 47.8, 12.26, 11.42, 38.42, 12.03, 16.28, 37.63, 48.57, 12.82, 3.95, 40.98,
411
+ 30.89, 3.17, 4.51, 49.7, 45.32, 6.03, 3.15, 39.09, 18.92, 5.67, 31.51, 25.66,
412
+ 13.35, 12.15, 18.77, 3.37, 9.38, 24.91, 12.86, 9.93, 5.22, 32.52, 20.05, 46.99,
413
+ 26.61, 19.36, 37.07, 39.65, 33.67, 46.87, 13.98, 23.53, 11.46, 2.71, 37.03,
414
+ 4.23, 28.89, 18.42, 18.0, 16.69, 27.05, 46.98, 14.28, 41.31, 38.66, 48.01,
415
+ 28.02, 27.19, 6.17
416
+ ],
417
+ vec![
418
+ 74.49, 39.0, 71.82, 38.79, 35.39, 87.33, 38.78, 49.59, 96.0, 55.23, 32.53,
419
+ 94.79, 43.63, 80.14, 65.88, 95.97, 90.67, 80.5, 73.07, 44.16
420
+ ],
421
+ 50,
422
+ 't',
423
+ true
424
+ ),
425
+ 1.3209445059614108e-8
426
+ );
427
+
428
+ assert_eq!(
429
+ wilcoxon_rank_sum_test(
430
+ vec![
431
+ 47.8, 12.26, 11.42, 38.42, 12.03, 16.28, 37.63, 48.57, 12.82, 3.95, 40.98,
432
+ 30.89, 3.17, 4.51, 49.7, 45.32, 6.03, 3.15, 39.09, 18.92, 5.67, 31.51, 25.66,
433
+ 13.35, 12.15, 18.77, 3.37, 9.38, 24.91, 12.86, 9.93, 5.22, 32.52, 20.05, 46.99,
434
+ 26.61, 19.36, 37.07, 39.65, 33.67, 46.87, 13.98, 23.53, 11.46, 2.71, 37.03,
435
+ 4.23, 28.89, 18.42, 18.0, 16.69, 27.05, 46.98, 14.28, 41.31, 38.66, 48.01,
436
+ 28.02, 27.19, 6.17
437
+ ],
438
+ vec![
439
+ 74.49, 39.0, 71.82, 38.79, 35.39, 87.33, 38.78, 49.59, 96.0, 55.23, 32.53,
440
+ 94.79, 43.63, 80.14, 65.88, 95.97, 90.67, 80.5, 73.07, 44.16
441
+ ],
442
+ 50,
443
+ 'g',
444
+ true
445
+ ),
446
+ 0.999999993811286
447
+ );
448
+
449
+ assert_eq!(
450
+ wilcoxon_rank_sum_test(
451
+ vec![
452
+ 47.8, 12.26, 11.42, 38.42, 12.03, 16.28, 37.63, 48.57, 12.82, 3.95, 40.98,
453
+ 30.89, 3.17, 4.51, 49.7, 45.32, 6.03, 3.15, 39.09, 18.92, 5.67, 31.51, 25.66,
454
+ 13.35, 12.15, 18.77, 3.37, 9.38, 24.91, 12.86, 9.93, 5.22, 32.52, 20.05, 46.99,
455
+ 26.61, 19.36, 37.07, 39.65, 33.67, 46.87, 13.98, 23.53, 11.46, 2.71, 37.03,
456
+ 4.23, 28.89, 18.42, 18.0, 16.69, 27.05, 46.98, 14.28, 41.31, 38.66, 48.01,
457
+ 28.02, 27.19, 6.17
458
+ ],
459
+ vec![
460
+ 74.49, 39.0, 71.82, 38.79, 35.39, 87.33, 38.78, 49.59, 96.0, 55.23, 32.53,
461
+ 94.79, 43.63, 80.14, 65.88, 95.97, 90.67, 80.5, 73.07, 44.16
462
+ ],
463
+ 50,
464
+ 'l',
465
+ true
466
+ ),
467
+ 6.604722529807054e-9
468
+ );
469
+
470
+ assert_eq!(
471
+ wilcoxon_rank_sum_test(
472
+ vec![
473
+ 0.0, 13.0, 0.0, 13.0, 0.0, 27.0, 1400.0, 5.3, 0.0, 16.0, 1400.0, 0.0, 0.0,
474
+ 1720.0, 1200.0, 0.0, 13.0, 6.6, 0.0, 15.0, 2480.0, 1400.0, 1200.0, 0.0, 1200.0,
475
+ 1200.0, 1200.0, 0.0, 110.0, 0.0, 56.0, 0.0, 0.0, 0.0, 7.3, 0.0, 0.0, 570.0,
476
+ 1200.0, 0.0, 0.0, 0.0, 1200.0, 1200.0, 1550.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
477
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
478
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
479
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
480
+ ],
481
+ vec![0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
482
+ 50,
483
+ 't',
484
+ true
485
+ ),
486
+ 0.1223950436242044
487
+ );
488
+
489
+ assert_eq!(
490
+ wilcoxon_rank_sum_test(
491
+ vec![
492
+ 120.0, 122.0, 135.0, 137.0, 122.0, 155.0, 121.0, 118.0, 109.0, 142.0, 106.0,
493
+ 94.0, 122.0, 130.0, 133.0, 124.0, 116.0, 118.0, 124.0, 120.0, 122.0, 122.0,
494
+ 124.0, 126.0, 119.0, 122.0, 118.0, 136.0, 138.0, 80.0, 118.0, 134.0, 115.0,
495
+ 133.0, 106.0, 117.0, 130.0, 115.0, 105.0, 123.0, 142.0, 110.0, 110.0, 95.0,
496
+ 119.0, 108.0, 130.0, 111.0, 106.0, 131.0, 133.0, 118.0, 132.0, 118.0, 128.0,
497
+ 148.0, 119.0, 128.0, 112.0, 112.0, 133.0, 131.0, 140.0, 126.0, 117.0, 136.0,
498
+ 109.0, 126.0, 113.0, 93.0, 118.0, 123.0, 125.0, 122.0, 112.0, 118.0, 125.0,
499
+ 118.0, 110.0, 150.0, 113.0, 133.0, 102.0, 138.0, 120.0, 130.0, 114.0, 102.0,
500
+ 121.0, 127.0, 109.0, 128.0, 142.0, 107.0, 128.0, 127.0, 111.0, 146.0, 133.0,
501
+ 140.0, 117.0, 133.0, 114.0, 98.0, 120.0, 139.0, 131.0, 123.0, 117.0, 124.0,
502
+ 93.0, 93.0, 123.0, 117.0, 109.0, 110.0, 138.0, 132.0, 101.0, 105.0, 117.0,
503
+ 131.0, 124.0, 113.0, 118.0, 108.0, 115.0, 159.0, 145.0, 142.0, 115.0, 127.0,
504
+ 104.0, 119.0, 125.0, 96.0, 119.0, 106.0, 100.0, 116.0, 133.0, 124.0, 145.0,
505
+ 88.0, 113.0, 111.0, 117.0, 113.0, 110.0, 126.0, 104.0, 112.0, 100.0, 105.0,
506
+ 122.0, 150.0, 114.0, 115.0, 126.0, 106.0, 119.0, 179.0, 111.0, 117.0, 132.0,
507
+ 112.0, 123.0, 129.0, 122.0, 134.0, 121.0, 106.0, 128.0, 119.0, 110.0, 133.0,
508
+ 96.0, 131.0, 150.0, 122.0, 132.0, 110.0, 107.0, 105.0, 111.0, 136.0, 114.0,
509
+ 99.0, 119.0, 119.0, 134.0, 117.0, 133.0, 128.0, 127.0, 130.0, 127.0, 115.0,
510
+ 117.0, 120.0, 119.0, 132.0, 118.0, 116.0, 120.0, 128.0, 106.0, 130.0, 122.0,
511
+ 110.0, 105.0, 115.0, 127.0, 137.0, 115.0, 125.0, 99.0, 95.0, 100.0, 136.0,
512
+ 129.0, 98.0, 122.0, 119.0, 135.0, 119.0, 127.0, 123.0, 131.0, 143.0, 118.0,
513
+ 113.0, 114.0, 111.0, 146.0, 130.0, 114.0, 111.0, 90.0, 125.0, 120.0, 119.0,
514
+ 128.0, 114.0, 131.0, 105.0, 122.0, 97.0, 100.0, 109.0, 129.0, 107.0, 112.0,
515
+ 133.0, 106.0, 115.0, 118.0, 120.0, 120.0, 127.0, 121.0, 118.0, 116.0, 127.0,
516
+ 140.0, 123.0, 121.0, 136.0, 122.0, 108.0, 139.0, 115.0, 119.0, 136.0, 121.0,
517
+ 119.0, 106.0, 121.0, 118.0, 138.0, 138.0, 120.0, 139.0, 163.0, 109.0, 104.0,
518
+ 138.0, 132.0, 113.0, 126.0, 128.0, 119.0, 109.0, 124.0, 122.0, 144.0, 117.0,
519
+ 110.0, 126.0, 101.0, 140.0, 98.0, 106.0, 110.0, 124.0, 116.0, 112.0, 114.0,
520
+ 131.0, 120.0, 116.0, 191.0, 106.0, 135.0, 118.0, 94.0, 102.0, 101.0, 113.0,
521
+ 130.0, 119.0, 115.0, 129.0, 106.0, 126.0, 115.0, 121.0, 142.0, 113.0, 133.0,
522
+ 109.0, 122.0, 95.0, 104.0, 101.0, 135.0, 131.0, 122.0, 106.0, 129.0, 116.0,
523
+ 131.0, 104.0, 110.0, 128.0, 114.0, 126.0, 132.0, 109.0, 115.0, 124.0, 122.0,
524
+ 128.0, 128.0, 119.0, 115.0, 118.0, 122.0, 119.0, 139.0, 127.0, 136.0, 129.0,
525
+ 132.0, 109.0, 113.0, 139.0, 113.0, 134.0, 114.0, 138.0, 122.0, 154.0, 134.0,
526
+ 116.0, 127.0, 139.0, 111.0, 122.0, 129.0, 123.0, 121.0, 116.0, 136.0, 119.0,
527
+ 110.0, 118.0, 125.0, 115.0, 116.0, 109.0, 122.0, 115.0, 127.0, 103.0, 115.0,
528
+ 136.0, 135.0, 117.0, 122.0, 106.0, 132.0, 125.0, 102.0, 112.0, 122.0, 103.0,
529
+ 110.0, 122.0, 109.0, 124.0, 125.0, 138.0, 119.0, 111.0, 104.0, 124.0, 128.0,
530
+ 127.0, 130.0, 136.0, 120.0, 139.0, 118.0, 124.0, 122.0, 129.0, 117.0, 139.0,
531
+ 108.0, 127.0, 135.0, 133.0, 147.0, 126.0, 108.0, 121.0, 133.0, 134.0, 98.0,
532
+ 103.0, 133.0, 127.0, 116.0, 125.0, 111.0, 131.0, 110.0, 93.0, 131.0, 124.0,
533
+ 122.0, 122.0, 125.0, 178.0, 148.0, 142.0, 130.0, 114.0, 103.0, 103.0, 133.0,
534
+ 121.0, 125.0, 116.0, 126.0, 140.0, 114.0, 102.0, 108.0, 101.0, 129.0, 125.0,
535
+ 127.0, 124.0, 119.0, 136.0, 109.0, 127.0, 125.0, 113.0, 113.0, 103.0, 138.0,
536
+ 129.0, 128.0, 123.0, 127.0, 126.0, 119.0, 103.0, 135.0, 123.0, 118.0, 93.0,
537
+ 118.0, 138.0, 140.0, 119.0, 116.0, 114.0, 133.0, 113.0, 126.0, 132.0, 133.0,
538
+ 122.0, 119.0, 126.0, 109.0, 122.0, 111.0, 118.0, 124.0, 103.0, 128.0, 113.0,
539
+ 107.0, 110.0, 131.0, 132.0, 120.0, 104.0, 104.0, 135.0, 104.0, 127.0, 137.0,
540
+ 119.0, 140.0, 94.0, 108.0, 119.0, 116.0, 115.0, 121.0, 113.0, 129.0, 126.0,
541
+ 111.0, 119.0, 113.0, 118.0, 125.0, 128.0, 119.0, 119.0, 127.0, 118.0, 113.0,
542
+ 128.0, 100.0, 121.0, 121.0, 115.0, 107.0, 132.0, 93.0, 118.0, 152.0, 132.0,
543
+ 123.0, 122.0, 128.0, 129.0, 113.0, 116.0, 126.0, 135.0, 134.0, 120.0, 142.0,
544
+ 117.0, 146.0, 110.0, 127.0, 126.0, 134.0, 122.0, 108.0, 128.0, 121.0, 126.0,
545
+ 120.0, 127.0, 130.0, 130.0, 132.0, 139.0, 116.0, 98.0, 101.0, 139.0, 116.0,
546
+ 121.0, 114.0, 101.0, 125.0, 112.0, 115.0, 110.0, 112.0, 132.0, 123.0, 119.0,
547
+ 128.0, 134.0, 120.0, 108.0, 118.0, 119.0, 141.0, 107.0, 96.0, 116.0, 118.0,
548
+ 108.0, 101.0, 102.0, 130.0, 120.0, 115.0, 96.0, 107.0, 130.0, 100.0, 132.0,
549
+ 121.0, 92.0, 102.0, 111.0, 124.0, 102.0, 125.0, 103.0, 118.0, 130.0, 114.0,
550
+ 125.0, 101.0, 120.0, 105.0, 105.0, 142.0, 99.0, 110.0, 128.0, 142.0, 109.0,
551
+ 110.0, 112.0, 127.0, 90.0, 106.0, 111.0, 107.0, 91.0, 117.0, 106.0, 112.0,
552
+ 109.0, 110.0, 118.0, 118.0, 116.0, 140.0, 103.0, 119.0, 132.0, 114.0, 103.0,
553
+ 118.0, 110.0, 131.0, 109.0, 115.0, 118.0, 138.0, 108.0, 112.0, 109.0, 102.0,
554
+ 110.0, 112.0, 130.0, 149.0, 122.0, 130.0, 110.0, 94.0, 114.0, 92.0, 118.0,
555
+ 132.0, 116.0, 139.0, 118.0
556
+ ],
557
+ vec![
558
+ 128.0, 111.0, 120.0, 117.0, 108.0, 117.0, 140.0, 107.0, 120.0, 98.0, 106.0,
559
+ 102.0, 113.0, 112.0, 149.0, 129.0, 132.0, 106.0, 108.0, 106.0, 117.0, 118.0,
560
+ 117.0, 124.0, 116.0, 120.0, 101.0, 122.0, 134.0, 100.0, 120.0, 125.0, 111.0,
561
+ 122.0, 120.0, 103.0, 126.0, 110.0, 118.0, 122.0, 111.0, 134.0, 115.0, 133.0,
562
+ 127.0, 121.0, 107.0, 104.0, 112.0, 108.0, 119.0, 115.0, 103.0, 119.0, 124.0,
563
+ 124.0, 110.0, 112.0, 115.0, 113.0, 101.0, 100.0, 126.0, 119.0, 119.0, 117.0,
564
+ 124.0, 113.0, 102.0, 118.0, 105.0, 110.0, 152.0, 118.0, 114.0, 114.0, 112.0,
565
+ 122.0, 110.0, 122.0, 105.0, 101.0, 122.0, 130.0, 132.0, 142.0, 118.0, 116.0,
566
+ 110.0, 119.0, 98.0, 106.0, 112.0, 122.0, 111.0, 104.0, 118.0, 108.0, 100.0,
567
+ 110.0, 114.0, 118.0, 118.0, 104.0, 135.0, 118.0, 116.0, 117.0, 100.0, 110.0,
568
+ 115.0, 125.0, 102.0, 130.0, 112.0, 130.0, 111.0, 106.0, 120.0, 103.0, 96.0,
569
+ 106.0, 108.0, 105.0, 108.0, 124.0, 134.0, 124.0, 116.0, 126.0, 134.0, 126.0,
570
+ 122.0, 118.0, 110.0, 116.0, 123.0, 98.0, 117.0, 103.0, 94.0, 112.0, 111.0,
571
+ 133.0, 105.0, 112.0, 106.0, 154.0, 120.0, 117.0, 108.0, 115.0, 127.0, 110.0,
572
+ 111.0, 120.0, 110.0, 120.0, 109.0, 122.0, 133.0, 102.0, 119.0, 105.0, 107.0,
573
+ 116.0, 116.0, 124.0, 108.0, 104.0, 138.0, 106.0, 120.0, 92.0, 107.0, 111.0,
574
+ 103.0, 120.0, 102.0, 148.0, 135.0, 116.0, 104.0, 111.0, 98.0, 118.0, 109.0,
575
+ 122.0, 112.0, 123.0, 127.0, 114.0, 111.0, 120.0, 108.0, 94.0, 104.0, 116.0,
576
+ 130.0, 116.0, 106.0, 126.0, 112.0, 121.0, 124.0, 116.0, 102.0, 110.0, 105.0,
577
+ 129.0, 141.0, 116.0, 108.0, 100.0, 118.0, 121.0, 108.0, 97.0, 110.0, 140.0,
578
+ 105.0, 128.0, 117.0, 120.0, 127.0, 136.0, 126.0, 109.0, 122.0, 124.0, 110.0,
579
+ 120.0, 117.0, 129.0, 110.0, 115.0, 94.0, 110.0, 109.0, 104.0, 129.0, 116.0,
580
+ 104.0, 117.0, 127.0, 122.0, 142.0, 121.0, 100.0, 98.0, 106.0, 116.0, 101.0,
581
+ 121.0, 100.0, 118.0, 112.0, 99.0, 122.0, 110.0, 97.0, 121.0, 112.0, 108.0,
582
+ 98.0, 112.0, 112.0, 120.0, 116.0, 125.0, 131.0, 100.0, 116.0, 92.0, 137.0,
583
+ 112.0, 152.0, 109.0, 119.0, 112.0, 130.0, 133.0, 107.0, 102.0, 112.0, 118.0,
584
+ 116.0, 130.0, 114.0, 107.0, 112.0, 110.0, 97.0, 112.0, 140.0, 108.0, 98.0,
585
+ 118.0, 109.0, 114.0, 120.0, 113.0, 116.0, 120.0, 111.0, 113.0, 109.0, 126.0,
586
+ 127.0, 111.0, 118.0, 114.0, 94.0, 112.0, 127.0, 110.0, 105.0, 131.0, 118.0,
587
+ 117.0, 109.0, 102.0, 120.0, 134.0, 110.0, 120.0, 115.0, 122.0, 93.0, 122.0,
588
+ 93.0, 114.0, 123.0, 122.0, 104.0, 110.0, 104.0, 122.0, 118.0, 116.0, 144.0,
589
+ 111.0, 115.0, 109.0, 136.0, 104.0, 113.0, 110.0, 118.0, 118.0, 108.0, 150.0,
590
+ 123.0, 113.0, 104.0, 127.0, 104.0, 112.0, 116.0, 110.0, 102.0, 103.0, 110.0,
591
+ 99.0, 104.0, 112.0, 125.0, 108.0, 126.0, 129.0, 102.0, 104.0, 108.0, 158.0,
592
+ 107.0, 102.0, 102.0, 105.0, 116.0, 126.0, 112.0, 109.0, 118.0, 120.0, 92.0,
593
+ 106.0, 91.0, 132.0, 109.0, 105.0, 114.0, 106.0, 138.0, 112.0, 86.0, 110.0,
594
+ 97.0, 106.0, 105.0, 108.0, 100.0, 111.0, 95.0, 109.0, 102.0, 100.0, 137.0,
595
+ 114.0, 115.0, 104.0, 103.0, 102.0, 120.0, 119.0, 131.0, 119.0, 115.0, 103.0,
596
+ 115.0, 115.0, 104.0, 106.0, 122.0, 128.0, 108.0, 109.0, 98.0, 110.0, 111.0,
597
+ 122.0, 114.0, 116.0, 113.0, 126.0, 104.0, 118.0, 113.0, 93.0, 118.0, 114.0,
598
+ 75.0, 95.0, 84.0, 99.0, 103.0, 124.0, 103.0, 96.0, 96.0, 113.0, 99.0, 106.0,
599
+ 113.0, 132.0, 104.0, 103.0, 114.0, 115.0, 109.0, 103.0, 101.0, 102.0, 104.0,
600
+ 135.0, 120.0, 129.0, 98.0, 128.0, 110.0, 98.0, 90.0, 110.0, 115.0, 122.0,
601
+ 111.0, 102.0, 116.0, 115.0, 128.0, 118.0, 103.0, 115.0, 109.0, 127.0, 108.0,
602
+ 95.0, 122.0, 102.0, 103.0, 110.0, 113.0, 116.0, 112.0, 118.0, 118.0, 124.0,
603
+ 114.0, 122.0, 114.0, 124.0, 153.0, 112.0, 119.0, 114.0, 114.0, 101.0, 130.0,
604
+ 118.0, 114.0, 119.0, 110.0, 128.0, 112.0, 118.0, 101.0, 106.0, 102.0, 122.0,
605
+ 104.0, 134.0, 109.0, 117.0, 114.0, 136.0, 110.0, 99.0, 105.0, 97.0, 124.0,
606
+ 126.0, 136.0, 116.0, 106.0, 112.0, 111.0, 112.0, 126.0, 120.0, 108.0, 119.0,
607
+ 126.0, 106.0, 116.0, 94.0, 118.0, 144.0, 119.0, 93.0, 116.0, 115.0, 90.0,
608
+ 123.0, 143.0, 115.0, 126.0, 118.0, 102.0, 111.0, 114.0, 132.0, 98.0, 108.0,
609
+ 101.0, 117.0, 110.0, 112.0, 108.0, 112.0, 124.0, 124.0, 122.0, 121.0, 99.0,
610
+ 136.0, 106.0, 90.0, 102.0, 103.0, 111.0, 130.0, 112.0, 108.0, 114.0, 112.0,
611
+ 100.0, 112.0, 105.0, 128.0, 109.0, 113.0, 105.0, 120.0, 100.0, 110.0, 113.0,
612
+ 101.0, 102.0, 108.0, 102.0, 99.0, 119.0, 109.0, 121.0, 158.0, 109.0, 118.0,
613
+ 96.0, 115.0, 114.0, 109.0, 119.0, 116.0, 118.0, 114.0, 100.0, 124.0, 112.0,
614
+ 101.0, 110.0, 94.0, 107.0, 104.0, 106.0, 109.0, 123.0, 98.0, 108.0, 131.0,
615
+ 122.0, 102.0, 134.0, 110.0, 118.0, 109.0, 148.0, 110.0, 106.0, 120.0, 108.0,
616
+ 94.0, 102.0, 104.0, 118.0, 116.0, 118.0, 112.0, 108.0, 128.0, 111.0, 100.0,
617
+ 99.0, 106.0, 114.0, 107.0, 100.0, 120.0, 108.0, 125.0, 109.0, 100.0, 119.0,
618
+ 111.0, 96.0, 100.0, 109.0, 131.0, 124.0, 112.0, 116.0, 120.0, 106.0, 112.0,
619
+ 100.0, 112.0, 100.0, 140.0, 108.0, 128.0, 146.0, 120.0, 101.0, 124.0, 101.0,
620
+ 110.0, 114.0, 110.0, 97.0, 124.0, 118.0, 106.0, 122.0, 128.0, 120.0, 118.0,
621
+ 98.0, 119.0, 107.0, 98.0, 111.0, 98.0, 110.0, 128.0, 106.0, 105.0, 104.0,
622
+ 116.0, 104.0, 113.0, 101.0, 100.0, 118.0, 109.0, 109.0, 102.0, 99.0, 120.0,
623
+ 112.0, 98.0, 104.0, 111.0, 118.0, 112.0, 119.0, 111.0, 119.0, 109.0, 141.0,
624
+ 102.0, 108.0, 122.0, 120.0, 104.0, 142.0, 114.0, 103.0, 96.0, 102.0, 112.0,
625
+ 118.0, 119.0, 116.0, 99.0, 120.0, 122.0, 136.0, 121.0, 106.0, 104.0, 118.0,
626
+ 124.0, 125.0, 128.0, 128.0, 114.0, 114.0, 119.0, 126.0, 105.0, 141.0, 128.0,
627
+ 98.0, 132.0, 116.0, 128.0, 124.0, 116.0, 102.0, 110.0, 122.0, 102.0, 114.0,
628
+ 120.0, 114.0, 80.0, 132.0, 116.0, 102.0, 118.0, 102.0, 100.0, 118.0, 90.0,
629
+ 90.0, 122.0, 110.0, 98.0, 138.0, 134.0, 119.0, 99.0, 116.0, 112.0, 110.0,
630
+ 102.0, 98.0, 110.0, 118.0, 110.0, 108.0, 102.0, 98.0, 92.0, 116.0, 150.0,
631
+ 122.0, 110.0, 100.0, 135.0, 128.0, 110.0, 92.0, 102.0, 108.0, 98.0, 150.0,
632
+ 94.0, 124.0, 112.0, 114.0, 124.0, 113.0, 108.0, 126.0, 105.0, 112.0, 134.0,
633
+ 120.0, 100.0, 96.0, 110.0, 108.0, 110.0
634
+ ],
635
+ 50,
636
+ 't',
637
+ true
638
+ ),
639
+ 1.3480170302526593e-25
640
+ );
641
+ }
642
+ }
@@ -0,0 +1,427 @@
1
+ /*
2
+ ##########################
3
+ # Wilcoxon rank sum test #
4
+ ##########################
5
+
6
+ ##########################
7
+ # Documentation
8
+ ##########################
9
+
10
+ This wilcoxon test implementation aims to copy the methodology used in R's wilcox_test() function
11
+
12
+ #########
13
+ # Usage #
14
+ #########
15
+
16
+ # Usage: cd .. && cargo build --release && time echo '[{"group1_id":"European Ancestry","group1_values":[3.7,2.5,5.9,13.1,1,10.6,3.2,3,6.5,15.5,2.6,16.5,2.6,4,8.6,8.3,1.9,7.9,7.9,6.1,17.6,3.1,3,1.5,8.1,18.2,-1.8,3.6,6,1.9,8.9,3.2,0.3,-1,11.2,6.2,16.2,7.5,9,9.4,18.9,0.1,11.5,10.1,12.5,14.6,1.5,17.3,15.4,7.6,2.4,13.5,3.8,17],"group2_id":"African Ancestry","group2_values":[11.5,5.1,21.1,4.4,-0.04]},{"group1_id":"European Ancestry","group1_values":[3.7,2.5,5.9,13.1,1,10.6,3.2,3,6.5,15.5,2.6,16.5,2.6,4,8.6,8.3,1.9,7.9,7.9,6.1,17.6,3.1,3,1.5,8.1,18.2,-1.8,3.6,6,1.9,8.9,3.2,0.3,-1,11.2,6.2,16.2,7.5,9,9.4,18.9,0.1,11.5,10.1,12.5,14.6,1.5,17.3,15.4,7.6,2.4,13.5,3.8,17],"group2_id":"Asian Ancestry","group2_values":[1.7]},{"group1_id":"African Ancestry","group1_values":[11.5,5.1,21.1,4.4,-0.04],"group2_id":"Asian Ancestry","group2_values":[]}]' | target/release/wilcoxon
17
+
18
+ # Several examples are present in test_examples.rs. This can be tested using the command: cd .. && cargo build --release && time cargo test
19
+
20
+ # Input data is in JSON format and is read in from <in.json> file.
21
+ # Results are written in JSON format to stdout.
22
+
23
+ # Input JSON specifications:
24
+ # [{
25
+ # group1_id: group1 id,
26
+ # group1_values: [] group1 data values,
27
+ # group2_id: group2 id,
28
+ # group2_values: [] group2 data values
29
+ # }]
30
+ #
31
+ # Output JSON specifications:
32
+ # [{
33
+ # group1_id: group1 id,
34
+ # group1_values: [] group1 data values,
35
+ # group2_id: group2 id,
36
+ # group2_values: [] group2 data values,
37
+ # pvalue: p-value of test
38
+ # }]
39
+
40
+
41
+ ########
42
+ # Code #
43
+ ########
44
+ */
45
+
46
+ use json;
47
+ use r_stats;
48
+ use serde::{Deserialize, Serialize};
49
+ use std::io;
50
+
51
+ mod test_examples; // Contains examples to test the wilcoxon rank sum test
52
+
53
+ #[derive(Debug, Serialize, Deserialize)]
54
+ struct OutputJson {
55
+ // Output JSON data structure
56
+ group1_id: String,
57
+ group2_id: String,
58
+ group1_values: Vec<f64>,
59
+ group2_values: Vec<f64>,
60
+ pvalue: Option<f64>,
61
+ }
62
+
63
+ //#[derive(Debug)]
64
+ //struct RankFreq {
65
+ // rank: f64,
66
+ // freq: usize,
67
+ //}
68
+
69
+ fn main() {
70
+ let mut input = String::new();
71
+ match io::stdin().read_line(&mut input) {
72
+ // Accepting the piped input from nodejs (or command line from testing)
73
+ Ok(_n) => {
74
+ //println!("{} bytes read", n);
75
+ //println!("input:{}", input);
76
+ const THRESHOLD: usize = 50; // Decrease this number so as to invoke the normal approximation for lower sample sizes. This would speed up the test at the cost of sacrificing accuracy.
77
+ let input_json = json::parse(&input);
78
+ match input_json {
79
+ Ok(json_string) => {
80
+ //println!("{} bytes read", n);
81
+ //println!("json_string:{}", json_string);
82
+
83
+ let mut output_string = "[".to_string();
84
+ for i in 0..json_string.len() {
85
+ //println!("group1_id:{}", json_string[i]["group1_id"]);
86
+ //println!("group2_id:{}", json_string[i]["group2_id"]);
87
+ //println!("group1_values:{}", json_string[i]["group1_values"]);
88
+ //println!("group2_values:{}", json_string[i]["group2_values"]);
89
+ let mut vec1 = Vec::<f64>::new();
90
+ let mut vec2 = Vec::<f64>::new();
91
+
92
+ for arr_iter in 0..json_string[i]["group1_values"].len() {
93
+ vec1.push(json_string[i]["group1_values"][arr_iter].as_f64().unwrap());
94
+ }
95
+ for arr_iter in 0..json_string[i]["group2_values"].len() {
96
+ vec2.push(json_string[i]["group2_values"][arr_iter].as_f64().unwrap());
97
+ }
98
+ //println!("vec1:{:?}", vec1);
99
+ //println!("vec2:{:?}", vec2);
100
+
101
+ if vec1.len() == 0 || vec2.len() == 0 {
102
+ // If one of the vectors has a length of zero, wilcoxon test is not performed and a pvalue of NULL is given.
103
+ output_string += &serde_json::to_string(&OutputJson {
104
+ group1_id: json_string[i]["group1_id"]
105
+ .as_str()
106
+ .unwrap()
107
+ .to_string(),
108
+ group2_id: json_string[i]["group2_id"]
109
+ .as_str()
110
+ .unwrap()
111
+ .to_string(),
112
+ group1_values: vec1,
113
+ group2_values: vec2,
114
+ pvalue: None,
115
+ })
116
+ .unwrap();
117
+ output_string += &",".to_string();
118
+ } else {
119
+ let pvalue: f64 = wilcoxon_rank_sum_test(
120
+ vec1.clone(),
121
+ vec2.clone(),
122
+ THRESHOLD,
123
+ 't', // two-sided test
124
+ true,
125
+ );
126
+
127
+ //if pvalue > 0.01 {
128
+ // pvalue = format!("{:.4}", pvalue).parse().unwrap();
129
+ //}
130
+ //println!("pvalue:{}", pvalue);
131
+ output_string += &serde_json::to_string(&OutputJson {
132
+ group1_id: json_string[i]["group1_id"]
133
+ .as_str()
134
+ .unwrap()
135
+ .to_string(),
136
+ group2_id: json_string[i]["group2_id"]
137
+ .as_str()
138
+ .unwrap()
139
+ .to_string(),
140
+ group1_values: vec1,
141
+ group2_values: vec2,
142
+ pvalue: Some(pvalue),
143
+ })
144
+ .unwrap();
145
+ output_string += &",".to_string();
146
+ }
147
+ }
148
+ output_string.pop();
149
+ output_string += &"]".to_string();
150
+ println!("{}", output_string);
151
+ }
152
+ Err(error) => println!("Incorrect json: {}", error),
153
+ }
154
+ }
155
+ Err(error) => println!("Piping error: {}", error),
156
+ }
157
+ }
158
+
159
+ fn wilcoxon_rank_sum_test(
160
+ mut group1: Vec<f64>,
161
+ mut group2: Vec<f64>,
162
+ threshold: usize,
163
+ alternative: char,
164
+ correct: bool,
165
+ ) -> f64 {
166
+ // Check if there are any ties between the two groups
167
+
168
+ let mut combined = group1.clone();
169
+ combined.extend(group2.iter().cloned());
170
+ combined.sort_by(|a, b| a.partial_cmp(b).unwrap());
171
+ //println!("combined:{:?}", combined);
172
+
173
+ group1.sort_by(|a, b| a.partial_cmp(b).unwrap());
174
+ group2.sort_by(|a, b| a.partial_cmp(b).unwrap());
175
+ //println!("group1:{:?}", group1);
176
+ //println!("group2:{:?}", group2);
177
+
178
+ let mut group1_iter = 0;
179
+ let mut group2_iter = 0;
180
+ let mut xy = Vec::<char>::new(); // Stores X-Y classification
181
+ let mut ranks = Vec::<f64>::new(); // Stores the rank of each element
182
+ let mut is_repeat = false;
183
+ let mut repeat_present = false;
184
+ let mut frac_rank: f64 = 0.0;
185
+ let mut num_repeats: f64 = 1.0;
186
+ let mut repeat_iter: f64 = 1.0;
187
+ #[allow(unused_variables)]
188
+ let mut weight_x: f64 = 0.0;
189
+ let mut weight_y: f64 = 0.0;
190
+ let mut group_char: char = 'X';
191
+ let mut rank_frequencies = Vec::<f64>::new();
192
+ for i in 0..combined.len() {
193
+ //println!("group1_iter:{}", group1_iter);
194
+ //println!("group2_iter:{}", group2_iter);
195
+ //println!("item1:{}", combined[i]);
196
+ //println!("is_repeat:{}", is_repeat);
197
+ if group1_iter < group1.len() && combined[i] == group1[group1_iter] {
198
+ xy.push('X');
199
+ group1_iter += 1;
200
+ group_char = 'X';
201
+ } else if group2_iter < group2.len() && combined[i] == group2[group2_iter] {
202
+ xy.push('Y');
203
+ group2_iter += 1;
204
+ group_char = 'Y';
205
+ }
206
+
207
+ // Computing ranks
208
+ if is_repeat == false {
209
+ // Check if current element has other occurences
210
+ num_repeats = 1.0;
211
+ for j in i + 1..combined.len() {
212
+ if combined[i] == combined[j] {
213
+ is_repeat = true;
214
+ repeat_present = true;
215
+ repeat_iter = 1.0;
216
+ num_repeats += 1.0;
217
+ } else {
218
+ break;
219
+ }
220
+ }
221
+ //println!("num_repeats:{}", num_repeats);
222
+ if is_repeat == false {
223
+ ranks.push(i as f64 + 1.0);
224
+ if group_char == 'X' {
225
+ weight_x += i as f64 + 1.0;
226
+ } else if group_char == 'Y' {
227
+ weight_y += i as f64 + 1.0;
228
+ }
229
+ //rank_frequencies.push(RankFreq {
230
+ // rank: i as f64 + 1.0,
231
+ // freq: 1,
232
+ //});
233
+ rank_frequencies.push(1.0);
234
+ } else {
235
+ frac_rank = calculate_frac_rank(i as f64 + 1.0, num_repeats);
236
+ ranks.push(frac_rank);
237
+ if group_char == 'X' {
238
+ weight_x += frac_rank;
239
+ } else if group_char == 'Y' {
240
+ weight_y += frac_rank
241
+ }
242
+ //rank_frequencies.push(RankFreq {
243
+ // rank: frac_rank,
244
+ // freq: num_repeats as usize,
245
+ //});
246
+ rank_frequencies.push(num_repeats);
247
+ }
248
+ } else if repeat_iter < num_repeats {
249
+ // Repeat case
250
+ ranks.push(frac_rank);
251
+ repeat_iter += 1.0;
252
+ if group_char == 'X' {
253
+ weight_x += frac_rank;
254
+ } else if group_char == 'Y' {
255
+ weight_y += frac_rank
256
+ }
257
+ if repeat_iter == num_repeats {
258
+ is_repeat = false;
259
+ }
260
+ } else {
261
+ //println!("i:{}", i);
262
+ ranks.push(i as f64 + 1.0);
263
+ repeat_iter = 1.0;
264
+ num_repeats = 1.0;
265
+ if group_char == 'X' {
266
+ weight_x += i as f64 + 1.0;
267
+ } else if group_char == 'Y' {
268
+ weight_y += i as f64 + 1.0;
269
+ }
270
+ }
271
+ }
272
+ //println!("rank_frequencies:{:?}", rank_frequencies);
273
+ //println!("xy:{:?}", xy);
274
+ //println!("ranks:{:?}", ranks);
275
+ //println!("weight_x:{}", weight_x);
276
+ //println!("weight_y:{}", weight_y);
277
+
278
+ //u_dash (calculated below) calculates the "W Statistic" in wilcox.test function in R
279
+
280
+ let u_y = weight_y - (group2.len() as f64 * (group2.len() as f64 + 1.0) / 2.0) as f64;
281
+ let u_dash_y = (u_y - (group1.len() * group2.len()) as f64).abs();
282
+ //println!("u_dash_y:{}", u_dash_y);
283
+
284
+ let u_x = weight_x - (group1.len() as f64 * (group1.len() as f64 + 1.0) / 2.0) as f64;
285
+ let _u_dash_x = (u_x - (group1.len() * group2.len()) as f64).abs();
286
+ //println!("u_dash_x:{}", u_dash_x);
287
+
288
+ // Calculate test_statistic
289
+
290
+ //let t1 = weight_x - ((group1.len() as f64) * (group1.len() as f64 + 1.0)) / 2.0;
291
+ //let t2 = weight_y - ((group2.len() as f64) * (group2.len() as f64 + 1.0)) / 2.0;
292
+ //
293
+ //let mut test_statistic = t1;
294
+ //if t2 < t1 {
295
+ // test_statistic = t2;
296
+ //}
297
+
298
+ //println!("test_statistic:{}", test_statistic);
299
+
300
+ if group1.len() < threshold && group2.len() < threshold && repeat_present == false {
301
+ // Compute exact p-values
302
+
303
+ // Calculate conditional probability for weight_y
304
+
305
+ if alternative == 'g' {
306
+ // Alternative "greater"
307
+ //if group1.len() <= low_cutoff && group2.len() <= low_cutoff {
308
+ // iterate_exact_p_values(ranks, weight_y, group2.len())
309
+ //} else {
310
+ calculate_exact_probability(u_dash_y, group1.len(), group2.len(), alternative)
311
+ //}
312
+ } else if alternative == 'l' {
313
+ // Alternative "lesser"
314
+ //if group1.len() <= low_cutoff && group2.len() <= low_cutoff {
315
+ // iterate_exact_p_values(ranks, weight_x, group1.len())
316
+ //} else {
317
+ calculate_exact_probability(u_dash_y, group1.len(), group2.len(), alternative)
318
+ //}
319
+ } else {
320
+ // Two-sided distribution
321
+ calculate_exact_probability(u_dash_y, group1.len(), group2.len(), alternative)
322
+ }
323
+ } else {
324
+ // Compute p-values from a normal distribution
325
+ //println!("group1 length:{}", group1.len());
326
+ //println!("group2 length:{}", group2.len());
327
+
328
+ let mut z = u_dash_y - ((group1.len() * group2.len()) as f64) / 2.0;
329
+ //println!("z_original:{}", z);
330
+ let mut nties_sum: f64 = 0.0;
331
+ for i in 0..rank_frequencies.len() {
332
+ nties_sum += rank_frequencies[i] * rank_frequencies[i] * rank_frequencies[i]
333
+ - rank_frequencies[i];
334
+ }
335
+
336
+ let sigma = (((group1.len() * group2.len()) as f64) / 12.0
337
+ * ((group1.len() + group2.len() + 1) as f64
338
+ - nties_sum
339
+ / (((group1.len() + group2.len()) as f64)
340
+ * ((group1.len() + group2.len() - 1) as f64))))
341
+ .sqrt();
342
+ //println!("sigma:{}", sigma);
343
+ let mut correction: f64 = 0.0;
344
+ if correct == true {
345
+ if alternative == 'g' {
346
+ // Alternative "greater"
347
+ correction = 0.5;
348
+ } else if alternative == 'g' {
349
+ // Alternative "lesser"
350
+ correction = -0.5;
351
+ } else {
352
+ // Alternative "two-sided"
353
+ if z > 0.0 {
354
+ correction = 0.5;
355
+ } else if z < 0.0 {
356
+ correction = -0.5;
357
+ } else {
358
+ // z=0
359
+ correction = 0.0;
360
+ }
361
+ }
362
+ }
363
+ z = (z - correction) / sigma;
364
+ //println!("z:{}", z);
365
+ if alternative == 'g' {
366
+ // Alternative "greater"
367
+ //println!("greater:{}", n.cdf(weight_y));
368
+ //1.0 - n.cdf(z) // Applying continuity correction
369
+ r_stats::normal_cdf(z, 0.0, 1.0, false, false)
370
+ } else if alternative == 'l' {
371
+ // Alternative "lesser"
372
+ //println!("lesser:{}", n.cdf(weight_x));
373
+ //n.cdf(z) // Applying continuity coorection
374
+ r_stats::normal_cdf(z, 0.0, 1.0, true, false)
375
+ } else {
376
+ // Alternative "two-sided"
377
+ let p_g = r_stats::normal_cdf(z, 0.0, 1.0, false, false); // Applying continuity correction
378
+ let p_l = r_stats::normal_cdf(z, 0.0, 1.0, true, false); // Applying continuity correction
379
+ let mut p_value;
380
+ if p_g < p_l {
381
+ p_value = 2.0 * p_g;
382
+ } else {
383
+ p_value = 2.0 * p_l;
384
+ }
385
+ //println!("p_value:{}", p_value);
386
+ if p_value > 1.0 {
387
+ p_value = 1.0;
388
+ }
389
+ p_value
390
+ }
391
+ }
392
+ }
393
+
394
+ // To be used only when there are no ties in the input data
395
+ fn calculate_exact_probability(weight: f64, x: usize, y: usize, alternative: char) -> f64 {
396
+ //println!("Using Wilcoxon CDF");
397
+ let mut p_value;
398
+ if alternative == 't' {
399
+ if weight > ((x * y) as f64) / 2.0 {
400
+ p_value = 2.0 * r_stats::wilcox_cdf(weight - 1.0, x as f64, y as f64, false, false);
401
+ } else {
402
+ p_value = 2.0 * r_stats::wilcox_cdf(weight, x as f64, y as f64, true, false);
403
+ }
404
+ if p_value > 1.0 {
405
+ p_value = 1.0;
406
+ }
407
+ } else if alternative == 'g' {
408
+ p_value = r_stats::wilcox_cdf(weight - 1.0, x as f64, y as f64, false, false);
409
+ } else if alternative == 'l' {
410
+ p_value = r_stats::wilcox_cdf(weight, x as f64, y as f64, true, false);
411
+ } else {
412
+ // Should not happen
413
+ panic!("Unknown alternative option given, please check!");
414
+ }
415
+ //println!("p_value:{}", p_value);
416
+ p_value
417
+ }
418
+
419
+ fn calculate_frac_rank(current_rank: f64, num_repeats: f64) -> f64 {
420
+ let mut sum = 0.0;
421
+ for i in 0..num_repeats as usize {
422
+ let rank = current_rank + i as f64;
423
+ sum += rank;
424
+ }
425
+
426
+ sum / num_repeats
427
+ }