(ns code.utils.mw (:use (incanter core stats))) (defn mw [a b] ;a and b are already ranked (let [asum (apply + a) bsum (apply + b) na (count a) nb (count b) n (+ na nb) amedrank (median a) bmedrank (median b) rank-asum (/ (* na (+ n 1)) 2) rank-bsum (/ (* nb (+ n 1)) 2) stdev (sqrt (/ (* na nb (+ n 1)) 12.0)) z (fn [rsum msum] (if (< rsum msum) (/ (+ (- rsum msum) 0.5) stdev) (/ (- (- rsum msum) 0.5) stdev))) za (z asum rank-asum) zb (z bsum rank-bsum) Z (if (> za zb) za zb)] (if (and (<= Z 1.96) (>= Z 0)) 'high (if (> amedrank bmedrank) 'high (if (< amedrank bmedrank) 'low 'high))))) (defn mw-2 [a b] ;a and b are already ranked (let [asum (apply + a) bsum (apply + b) na (count a) nb (count b) n (+ na nb) rank-asum (/ (* na (+ n 1)) 2) rank-bsum (/ (* nb (+ n 1)) 2) stdev (sqrt (/ (* na nb (+ n 1)) 12.0)) z (fn [rsum msum] (if (< rsum msum) (/ (+ (- rsum msum) 0.5) stdev) (/ (- (- rsum msum) 0.5) stdev))) za (z asum rank-asum) zb (z bsum rank-bsum) Z (if (> za zb) za zb)] (if (and (<= Z 1.96) (>= Z 0)) 'high 'low))) (defn mw-1 [a b] ;a and b are already ranked (let [asum (apply + a) bsum (apply + b) na (count a) nb (count b) n (+ na nb) rank-asum (/ (* na (+ n 1)) 2) rank-bsum (/ (* nb (+ n 1)) 2) stdev (sqrt (/ (* na nb (+ n 1)) 12.0)) z (fn [rsum msum] (if (< rsum msum) (/ (+ (- rsum msum) 0.5) stdev) (/ (- (- rsum msum) 0.5) stdev))) za (z asum rank-asum) zb (z bsum rank-bsum) Z (if (> za zb) za zb)] (if (and (<= Z 1.96) (>= Z 0)) 0 (if (< za zb) -1 1)))) (defn mw-0 [a b] ;a and b are already ranked (let [asum (apply + a) bsum (apply + b) na (count a) nb (count b) n (+ na nb) amedrank (median a) bmedrank (median b) rank-asum (/ (* na (+ n 1)) 2) rank-bsum (/ (* nb (+ n 1)) 2) stdev (sqrt (/ (* na nb (+ n 1)) 12.0)) z (fn [rsum msum] (if (< rsum msum) (/ (+ (- rsum msum) 0.5) stdev) (/ (- (- rsum msum) 0.5) stdev))) za (z asum rank-asum) zb (z bsum rank-bsum) Z (if (> za zb) za zb)] (if (and (<= Z 1.96) (>= Z 0)) 0 (if (> amedrank bmedrank) 1 (if (< amedrank bmedrank) -1 1)))))