]> gitweb.factorcode.org Git - factor.git/commitdiff
Initial checkin
authorDoug Coleman <erg@trifocus.net>
Wed, 26 Oct 2005 01:54:19 +0000 (01:54 +0000)
committerDoug Coleman <erg@trifocus.net>
Wed, 26 Oct 2005 01:54:19 +0000 (01:54 +0000)
contrib/math/statistics.factor [new file with mode: 0644]

diff --git a/contrib/math/statistics.factor b/contrib/math/statistics.factor
new file mode 100644 (file)
index 0000000..2fef5a0
--- /dev/null
@@ -0,0 +1,35 @@
+IN: math-contrib
+USING: kernel math sequences ;
+
+: mean ( seq -- n )
+       #! arithmetic mean, sum divided by length
+    [ sum ] keep length / ;
+
+: geo-mean ( seq -- n )
+       #! geometric mean, nth root of product
+       [ product ] keep length swap nth-root ;
+
+: median ( seq -- n )
+       #! middle number if odd, avg of two middle numbers if even
+    number-sort dup length dup even? [
+               1+ 2 /i dup 1- rot [ nth ] keep swapd nth + 2 /
+       ] [
+               2 / swap nth
+       ] if ;
+
+: range ( seq -- n )
+       #! max - min
+       number-sort [ pop ] keep first - ;
+
+: var ( seq -- )
+       #! variance, normalize by N-1
+       dup length 1- dup 0 = [
+               0 2nip
+       ] [
+               swap [ mean ] keep [ over - sq ] map sum nip swap /
+       ] if ;
+
+: std
+       #! standard deviation, sqrt of variance
+       var sqrt ;
+