diff --git a/bundle/bundle--stats.el b/bundle/bundle--stats.el index e69de29b..23502ff9 100644 --- a/bundle/bundle--stats.el +++ b/bundle/bundle--stats.el @@ -0,0 +1,23 @@ +(defun evenp (number) + (if (= 0 (% number 2)) + t + nil)) + +(defun oddp (number) + (not (evenp number))) + +(defun stats:mean (list) + (/ (apply #'+ list) (float (length list)))) + +(defun stats:median (list) + (let* ((sorted (sort (copy-sequence list) #'<)) + (len (length sorted)) + (mid (floor (/ len 2)))) + (if (evenp len) + (/ (+ (nth mid sorted) (nth (1- mid) sorted)) 2.0) + (nth mid sorted)))) + +(defun stats:standard-deviation (list) + (let ((m (stats:mean list))) + (sqrt (/ (seq-reduce (lambda (x acc) (+ x (expt (- x m) 2))) list 0) + (length list)))))