summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryuzu-eva <cafebabe@disroot.org>2025-07-16 21:27:48 +0200
committeryuzu-eva <cafebabe@disroot.org>2025-07-16 21:27:48 +0200
commitfc3f927faeba00820a9afa2c28bd09c82e66938d (patch)
treeb6fe187626a8a4e9929da8377f36ce7ea6d0aea4
parent9c5e686e43246e6ea23901a6e769fd4faa1095ba (diff)
added functions for statistics (sum, mean, standard deviation)
-rw-r--r--.gitignore1
-rw-r--r--config.org64
2 files changed, 65 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index be00807..a40b78c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,6 +21,7 @@ image-dired/
irony/
lisp/
transient/
+url/
!lisp/rainbow-delimiters.el
!lisp/rainbow-delimiters.elc
diff --git a/config.org b/config.org
index 50f66f8..5308bad 100644
--- a/config.org
+++ b/config.org
@@ -897,6 +897,70 @@ Inserts a newline above or below, like O and o in vim
(message "%0.2f" (/ (- temp 32) 1.8)))
#+end_src
+** statistics
+
+#+begin_src emacs-lisp
+ (defun sum (lst)
+ "Calculate the sum of a vector."
+ (interactive "xEnter a vector: ")
+ (unless (listp lst)
+ (error "Input must be a vector!"))
+ (let ((result (if (null lst)
+ (progn
+ (message "Empty vector")
+ 0)
+ (if (null (cdr lst))
+ (car lst)
+ (+ (car lst) (sum (cdr lst)))))))
+ (when (called-interactively-p 'any)
+ (message "Sum: %.2f" (float result)))
+ result))
+
+ (defun mean (lst)
+ "Calculate the mean of a vector."
+ (interactive "xEnter a vector: ")
+ (unless (listp lst)
+ (error "Input must be a vector!"))
+ (if (null lst)
+ (message "Mean: 0")
+ (let ((mean-value (/ (float (sum lst)) (length lst))))
+ (message "Mean: %.2f" mean-value)
+ mean-value)))
+
+ (defun sdm (x mean)
+ "Calculate squared difference (datapoint - mean)"
+ (let ((diff (- x mean)))
+ (expt diff 2)))
+
+ (defun pdev (lst)
+ "Calculate Population Standard Deviation of a vector"
+ (interactive "xEnter a vector: ")
+ (unless (listp lst)
+ (error "Input must be a vector!"))
+ (let* ((n (length lst))
+ (mean-value (mean lst))
+ (squared-diffs (mapcar (lambda (x) (sdm x mean-value)) lst))
+ (sum-squared-diffs (sum squared-diffs))
+ (stddev (if (< n 2)
+ 0
+ (sqrt (/ (float sum-squared-diffs) (1- n))))))
+ (message "%.2f" stddev)))
+
+ (defun sdev (lst)
+ "Calculate Sample Standard Deviation of a vector"
+ (interactive "xEnter a vector: ")
+ (unless (listp lst)
+ (error "Input must be a vector!"))
+ (let* ((n (length lst))
+ (mean-value (mean lst))
+ (squared-diffs (mapcar (lambda (x) (sdm x mean-value)) lst))
+ (sum-squared-diffs (sum squared-diffs))
+ (stddev (if (< n 2)
+ 0
+ (sqrt (/ (float sum-squared-diffs) n)))))
+ (message "%.2f" stddev)))
+#+end_src
+
* Custom keybinds and re-binds
Some keybinds to make life easier