Verify distribution uniformity/Naive: Difference between revisions
Verify distribution uniformity/Naive (view source)
Revision as of 15:16, 21 October 2014
, 9 years ago→{{header|Racket}}: naive test replaces better chi-squared test
Underscore (talk | contribs) (Added Hy.) |
(→{{header|Racket}}: naive test replaces better chi-squared test) |
||
Line 1,044:
=={{header|Racket}}==
{{trans|Tcl}}
Returns a pair of a boolean stating uniformity and either the "uniform" distribution or a report of the first skew number found.
<lang racket>▼
▲<lang racket>#lang racket
(define (pretty-fraction f)
(if (integer? f) f
(let* ((d (denominator f)) (n (numerator f)) (q (quotient n d)) (r (remainder n d)))
▲ (/ (sqr (- o e)) e)))
(define (test-uniformity/naive r n δ)
(define observation (make-hash))
(for ((_ (in-range n))) (hash-update! observation (r) add1 0))
(define target (/ n (hash-count observation)))
(> (abs (- v target)) max-skew))
(let/ec ek
(cons
#t
(for/list ((k (sort (hash-keys observation) <)))
(define v (hash-ref observation k))
(when (skewed? v)
(ek (cons
#f
(format "~a distribution of ~s potentially skewed for ~a. expected ~a got ~a"
'test-uniformity/naive r k (pretty-fraction target) v))))
(cons k v)))))
(define (
(min 6 (add1 (random 6))))
(define (crooked-die)
(
▲ (define r (rand 10))
▲ (define ex (make-vector 10 (/ n 10)))
; Test whether the builtin generator is uniform:
(
; Test whether
(
; Test whether a biased die fails:
(test-uniformity/naive crooked-die 1000 5)</lang>
{{out}}
<pre>'(#t (0 . 96) (1 . 100) (2 . 103) (3 . 86) (4 . 94) (5 . 111) (6 . 106) (7 . 99) (8 . 108) (9 . 97))
'(#t (1 . 169) (2 . 185) (3 . 184) (4 . 163) (5 . 144) (6 . 155))
'(#f . "test-uniformity/naive distribution of #<procedure:crooked-die> potentially skewed for 6. expected 166 2/3 got 262")</pre>
=={{header|REXX}}==
|