]> gitweb.factorcode.org Git - factor.git/commitdiff
math.statistics: adding demean and demedian, cleanup a bit.
authorJohn Benediktsson <mrjbq7@gmail.com>
Thu, 28 Mar 2013 18:40:46 +0000 (11:40 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Thu, 28 Mar 2013 18:40:46 +0000 (11:40 -0700)
basis/math/statistics/statistics.factor
extra/math/distances/distances.factor

index 90a7fcadc5e179e2befb9f2aeda2310a2409e074..713ff46494825a65527d4c21c41f596123fdb192 100644 (file)
@@ -288,9 +288,13 @@ ALIAS: std sample-std
 
 : signal-to-noise ( seq -- x ) [ mean ] [ population-std ] bi / ;
 
-: mean-dev ( seq -- x ) dup mean v-n vabs mean ;
+: demean ( seq -- seq' ) dup mean v-n ;
 
-: median-dev ( seq -- x ) dup median v-n vabs mean ;
+: mean-dev ( seq -- x ) demean vabs mean ;
+
+: demedian ( seq -- seq' ) dup median v-n ;
+
+: median-dev ( seq -- x ) demedian vabs mean ;
 
 : ste-ddof ( seq n -- x ) '[ _ std-ddof ] [ length ] bi sqrt / ;
 
@@ -322,7 +326,7 @@ ALIAS: std sample-std
     [ swapd * - ] keep ;
 
 : cov-ddof ( {x} {y} ddof -- cov )
-    [ [ dup mean v-n ] bi@ v* ] dip mean-ddof ;
+    [ [ demean ] bi@ v* ] dip mean-ddof ;
 
 : population-cov ( {x} {y} -- cov ) 0 cov-ddof ; inline
 
@@ -349,8 +353,7 @@ ALIAS: std sample-std
     1 [ * ] cum-map ;
 
 : cum-count ( seq quot -- seq' )
-    [ 0 ] dip
-    '[ _ call [ 1 + ] when ] cum-map ; inline
+    [ 0 ] dip '[ _ call [ 1 + ] when ] cum-map ; inline
 
 : cum-min ( seq -- seq' )
     dup ?first [ min ] cum-map ;
@@ -371,15 +374,13 @@ ALIAS: std sample-std
     [ dup log * ] [ 1 swap - dup log * ] bi + neg 2 log / ;
 
 : standardize ( u -- v )
-    [ dup mean v-n ] [ sample-std ] bi
-    dup zero? [ drop ] [ v/n ] if ;
+    [ demean ] [ sample-std ] bi [ v/n ] unless-zero ;
 
 : standardize-2d ( u -- v )
-    flip dup [ [ mean ] [ sample-std ] bi 2array ] map
-    [ [ first v-n ] 2map ] keep [ second v/n ] 2map flip ;
+    flip [ standardize ] map flip ;
 
 : differences ( u -- v )
-    [ 1 tail-slice ] keep [ - ] 2map ;
+    [ 1 tail-slice ] keep v- ;
 
 : rescale ( u -- v )
     dup minmax over - [ v-n ] [ v/n ] bi* ;
@@ -393,4 +394,4 @@ ALIAS: std sample-std
     [ '[ first2 [ _ set-nth ] with each ] each ] keep ;
 
 : z-score ( seq -- n )
-    dup [ mean ] [ sample-std ] bi '[ _ - _ / ] map ;
+    [ demean ] [ sample-std ] bi v/n ;
index 1fd5f1ac8a1c14ae2f6b25a05e15d299370d8632..e59fbad5d04ba01011966011c3c0045c834bb0da 100644 (file)
@@ -31,4 +31,4 @@ IN: math.distances
     [ v- ] [ v+ ] 2bi [ vabs sum ] bi@ / ;
 
 : correlation-distance ( a b -- n )
-    [ dup mean v-n ] bi@ [ v* sum ] [ [ norm ] bi@ * ] 2bi / 1 swap - ;
+    [ demean ] bi@ [ v* sum ] [ [ norm ] bi@ * ] 2bi / 1 swap - ;