source: project/release/4/statistics/tags/0.6/tests/run.scm @ 32986

Last change on this file since 32986 was 32986, checked in by Ivan Raikov, 6 years ago

statistics v 0.6 release

File size: 8.9 KB
Line 
1;; some tests for statistics package
2
3(require-extension srfi-42)
4(require-extension srfi-78)
5(require-extension numbers)
6(require-extension statistics)
7
8;; -- to help the tests
9
10(define (to-4-dp f)
11  (/ (round (* f 10000)) 10000))
12
13(define (to-5-dp f)
14  (/ (round (* f 100000)) 100000))
15
16(define (=4 n1 n2)
17  (= (to-4-dp n1) (to-4-dp n2)))
18
19(define (=5 n1 n2)
20  (= (to-5-dp n1) (to-5-dp n2)))
21
22;; -- tests of utilities
23
24(check (average-rank 3 '(1 2 3 4 5))
25       => 3)
26
27(check (average-rank 3 '(1 2 3 3 4 5))
28       => 7/2)
29
30(check (beta-incomplete 0.2 0.1 0.3)
31       (=> =5) 0.28367)
32
33(check (bin-and-count '(1 2 3 4 5 6 7 8 9 10) 2)
34       => (vector 5 5))
35
36(check (bin-and-count '(1 2 3 4 5 6 7 8 9 10) 5)
37       => (vector 2 2 2 2 2))
38
39(check (bin-and-count '(1 2 2 2 3 9) 2)
40       => (vector 5 1))
41
42(check (combinations 10 3) 
43       => 120)
44
45(check (factorial 10)
46       => 3628800)
47
48; find-critical-value
49
50(check (fisher-z-transform 0.1)
51       (=> =5) 0.10034)
52
53(check (fisher-z-transform 0.5)
54       (=> =5) 0.54931)
55
56(check (let-values (((a b) (gamma-incomplete 2.0 1.5))) (list (to-5-dp a) b))
57       => (list 0.44217 0.0))
58
59(check (gamma-ln 0.5)
60       (=> =5) 0.57236)
61
62(check (permutations 10 3)
63       => 720)
64
65; random-normal: unsure how to test
66
67(check (random-pick '(1 2 3 4 5))
68       (=> member) '(1 2 3 4 5))
69
70(check (random-sample 3 '(1 2 3 4 5))
71       (=> (lambda (result expected) (= (length result) expected))) 3)
72
73(check (sign 3.5)
74       => 1)
75
76(check (sign -3.5)
77       => -1)
78
79(check (sign 0)
80       => 0)
81
82(check (square 10)
83       => 100)
84
85;; -- tests of descriptive statistics
86
87(check (mean '())
88       => 0)
89
90(check (mean '(1))
91       => 1)
92
93(check (mean '(1 2 3 4 5))
94       => 3)
95
96(check (median '(1))
97       => 1)
98
99(check (median '(1 2 3 4 5))
100       => 3)
101
102(check (median '(1 1 2 3 4 5 6 7 8))
103       => 4)
104
105(check (let-values (((modes counts) (mode '(1 1 1 2 3 4 5)))) 
106                   (list modes counts))
107       => '((1) 3))
108
109(check (let-values (((modes counts) (mode '(1 1 1 2 3 4 4 4 5)))) 
110                   (list modes counts))
111       => '((1 4) 3))
112
113(check (geometric-mean '(1 100))
114       => 10.0)
115
116(check (geometric-mean '(1 2 3 4 5))
117       (=> =5) 2.60517)
118
119(check (range '(1 2 3 4 5))
120       => 4)
121
122(check (range '(1 1 1 2 3 4 10))
123       => 9)
124
125(check (percentile '(1 2 3 4 5 6) 50)
126       => 7/2)
127
128(check (percentile '(1 2 3 4 5 6) 30)
129       => 2)
130
131(check (variance '(1 2 3 4 5))
132       => 5/2)
133
134(check (standard-deviation '(1 2 3 4 5))
135       (=> =5) 1.58113883)
136
137(check (coefficient-of-variation '(1 2 3 4 5))
138       (=> =5) 52.704627)
139
140(check (standard-error-of-the-mean '(1 2 3 4 5))
141       (=> =5) 0.707106781186548)
142
143(let-values (((mean sd n) (mean-sd-n '(1 2 3 4 5))))
144            (check mean => 3)
145            (check sd (=> =5) 1.58113883008419)
146            (check n => 5))
147
148;; -- tests of distributional functions
149
150(check-ec (: pair '((0 0.0009765625) (1 0.009765625) (2 0.0439453125) (3 0.1171875)
151                                     (4 0.205078125) (5 0.24609375) (6 0.205078125)
152                                     (7 0.1171875) (8 0.0439453125) (9 0.009765625)
153                                     (10 0.0009765625)))
154 (binomial-probability 10 (car pair) 0.5)
155 (=> =5) (cadr pair))
156
157(check-ec (: pair '((0 0.0) (1 0.0009765625) (2 0.0107421875) (3 0.0546875)
158                            (4 0.171875) (5 0.376953125) (6 0.623046875)
159                            (7 0.828125) (8 0.9453125) (9 0.9892578125)
160                            (10 0.9990234375)))
161          (binomial-cumulative-probability 10 (car pair) 0.5)
162          (=> =5) (cadr pair))
163
164(check-ec (: pair '((0 0.0000) (1 0.0005) (2 0.0023) (3 0.0076) (4 0.0189) (5 0.0378)
165                               (6 0.0631) (7 0.0901) (8 0.1126) (9 0.1251) (10 0.1251)
166                               (11 0.1137) (12 0.0948) (13 0.0729) (14 0.0521)
167                               (15 0.0347) (16 0.0217) (17 0.0128) (18 0.0071)
168                               (19 0.0037)))
169          (poisson-probability 10 (car pair))
170          (=> =4) (cadr pair))
171
172(check-ec (: pair '((0 0.0000) (1 0.0000) (2 0.0005) (3 0.0028) (4 0.0103) (5 0.0293)
173             (6 0.0671) (7 0.1301) (8 0.2202) (9 0.3328) (10 0.4579) 
174             (11 0.5830) (12 0.6968) (13 0.7916) (14 0.8645)
175             (15 0.9165) (16 0.9513) (17 0.9730) (18 0.9857) (19 0.9928)))
176          (poisson-cumulative-probability 10 (car pair))
177          (=> =4) (cadr pair))
178
179(check-ec (: pair '((0 0.0088) (1 0.0270) (2 0.0648) (3 0.1210) (4 0.1760)
180                               (5 0.1995) (6 0.1760) (7 0.1210) (8 0.0648)
181                               (9 0.0270)(10 0.0088)))
182          (normal-pdf (car pair) 5 4)
183          (=> =4) (cadr pair))
184
185(check (convert-to-standard-normal 5 6 2)
186       => -1/2)
187
188(check-ec (: pair '((-2.0 0.0228) (-1.6 0.0548) (-1.2 0.1151) (-0.8 0.2119)
189                                  (-0.4 0.3446) ( 0.0 0.5000) ( 0.4 0.6554)
190                                  ( 0.8 0.7881) ( 1.2 0.8849) ( 1.6 0.9452)))
191          (phi (car pair))
192          (=> =4) (cadr pair))
193
194(check-ec (: pair '((0.1 -1.2815515713806909) (0.2 -0.8416212245351449)))
195          (z (car pair))
196          (=> =5) (cadr pair))
197
198(check (t-distribution 1 0.9)
199       (=> =5) 3.07763671875)
200
201(check (t-distribution 10 0.9)
202       (=> =5) 1.3721923828125)
203
204(check (chi-square 10 0.4405)
205       (=> =5) 10)
206
207(check (chi-square 3 0.1718)
208       (=> =5) 5)
209
210(check (chi-square-cdf 10 10)
211       (=> =5) 0.559506714934786)
212
213(check (chi-square-cdf 5 3)
214       (=> =5) 0.828202855703266)
215
216;; -- tests of confidence intervals
217
218(let-values (((upper-bound lower-bound) (binomial-probability-ci 10 0.8 0.9)))
219            (check upper-bound (=> =5) 0.724273681640625)
220            (check lower-bound (=> =5) 0.851547241210938))
221
222(let-values (((upper-bound lower-bound) (poisson-mu-ci 10 0.9)))
223            (check upper-bound (=> =5) 8.305419921875)
224            (check lower-bound (=> =5) 10.0635986328125))
225
226(let-values (((upper-bound lower-bound) (normal-mean-ci 0.5 0.1 10 0.8)))
227            (check upper-bound (=> =5) 0.491747852700165)
228            (check lower-bound (=> =5) 0.508252147299835))
229
230(let-values (((upper-bound lower-bound) (normal-mean-ci-on-sequence '(1 2 3 4 5) 0.9)))
231            (check upper-bound (=> =5) 2.90535368828478)
232            (check lower-bound (=> =5) 3.09464631171522))
233
234;; -- tests of hypothesis testing
235
236(check (z-test 40 1 #:mu 50 #:sigma 10 #:tails ':negative)
237       (=> =5) 0.15865525)
238(check (z-test 40 10 #:mu 50 #:sigma 10 #:tails ':negative)
239       (=> =5) 0.000783)
240(check (z-test 40 5 #:mu 50 #:sigma 10)
241       (=> =5) 0.025347)
242
243(check (z-test 11/5 5 #:mu 2 #:sigma 1)
244       (=> =5) 0.65472085)
245
246(check (z-test-on-sequence '(1 1 2 3 4) #:mu 2 #:sigma 1)
247       (=> =5) 0.65472085)
248
249(check (t-test-one-sample 5 0.8 3 6)
250       (=> =5) 0.162781641721079)
251
252(check (t-test-one-sample-on-sequence '(5 6 7) 5.9)
253       (=> =5) 0.878433865229034)
254
255(check (correlation-test-two-sample 0.9 100 0.85 50)
256       (=> =5) 0.224083300908794)
257
258(check (t-test-paired 7/3 0.57735 3)
259       (=> =5) 0.0198039411803931)
260
261(check (t-test-paired-on-sequences '(4 3 5) '(1 1 3))
262       (=> =5) 0.0198039411803931)
263
264; correlation-test-two-sample-on-sequences
265
266(let-values (((s p) (spearman-rank-correlation '((4 5) (10 8) (3 6) (1 2) (9 10) (2 3) (6 9) (7 4) (8 7) (5 1)))))
267  (check s (=> =5) (/ 113 165))
268  (check p (=> =5) 0.0288827975067328))
269
270;; -- tests of sample size estimates
271
272(check (t-test-one-sample-sse 5.0 5.2 0.5)
273       => 163)
274
275(let-values (((n1 n2) (t-test-two-sample-sse 5.1 0.5 5.2 0.3)))
276            (check n1 => 1040)
277            (check n2 => 1040))
278
279(check (correlation-sse 0.80 #:alpha 0.05 #:1-beta 0.9)
280       => 11) ;; NOTE: Not same as some on-line sites describe ...
281
282;; -- tests of correlation and regression
283
284(let-values (((a b r r2 p) (linear-regression '((1.0 0.1) (2.0 0.3) (3.0 0.8)))))
285            (check a (=> =5) -0.3)
286            (check b (=> =5) 0.35)
287            (check r (=> =5) 0.970725343394151)
288            (check r2 (=> =5) 0.942307692307692)
289            (check p (=> =5) 0.154420958311267))
290
291(check (correlation-coefficient '((1.0 0.1) (2.0 0.3) (3.0 0.8)))
292       (=> =5) 0.970725343394151)
293
294;; -- tests of significance tests
295
296(check (t-significance 0.2 5)
297       (=> =5) 0.849360513995829)
298
299(check (t-significance 0.2 5 #:tails ':both)
300       (=> =5) 0.849360513995829)
301
302(check (t-significance 0.2 5 #:tails ':positive)
303       (=> =5) 0.424680256997915)
304
305(check (t-significance 0.2 5 #:tails ':negative)
306       (=> =5) 0.575319743002086)
307
308(check (f-significance 1.5 8 2)
309       (=> =5) 0.920449812578091)
310
311(check (f-significance 1.5 8 2 #:one-tailed? #t)
312       (=> =5) 0.460224906289046)
313
314(check (binomial-test-two-sample 0.2 100 0.3 50)
315       (=> =5) 0.245930683028145)
316
317(check (fisher-exact-test 10 20 30 40)
318       (=> =5) 0.5066621427235114)
319
320;; -- summarise results of tests
321
322(check-report)
323
324;; uncomment for released version - replace N with number of tests
325;(if (check-passed? N)
326;  'ok
327;  (error "failed test suite"))
328
Note: See TracBrowser for help on using the repository browser.