summaryrefslogtreecommitdiff
path: root/config.org
diff options
context:
space:
mode:
Diffstat (limited to 'config.org')
-rw-r--r--config.org180
1 files changed, 116 insertions, 64 deletions
diff --git a/config.org b/config.org
index e3d24ec..fc697c3 100644
--- a/config.org
+++ b/config.org
@@ -900,84 +900,136 @@ Inserts a newline above or below, like O and o in vim
** statistics
#+begin_src emacs-lisp
- (defun sum (lst)
- "Calculate the sum of a vector."
- (interactive "xEnter a vector: ")
+ (defun validate-list (lst)
+ "Check if input list is a symbol and ensure it's a list"
+ (when (symbolp lst)
+ (setq lst (symbol-value lst)))
(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)))))))
+ (error "Input must be a list!"))
+ (if (null lst)
+ (error "Empty list!"))
+ lst)
+
+
+ (defun sum (lst)
+ "Calculate the sum of a list"
+ (interactive "xEnter a list: ")
+ (let* ((lst (validate-list lst))
+ (result (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)))
+ "Calculate the mean of a list."
+ (interactive "xEnter a list: ")
+ (let* ((lst (validate-list lst))
+ (mean-value (/ (float (sum lst)) (length lst))))
+ (when (called-interactively-p 'any)
+ (message "Mean: %.2f" mean-value))
+ mean-value))
- (defun sdm (x mean)
+ (defun sqr-diff-mean (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)))
-
- (defun ccoef (xvector yvector)
- "Calculate the correlation coefficient between x and y"
- (interactive "xEnter independant vector: \nxEnter dependant vector: ")
- (let* ((xset xvector)
- (yset yvector)
+ (defun mean-avg-dev (lst)
+ "Calculate Mean Average Deviation of a list"
+ (interactive "xEnter a list: ")
+ (let* ((lst (validate-list lst))
+ (mean-value (mean lst))
+ (abs-dev-sum (sum (mapcar (lambda (x) (abs (- x mean-value))) lst)))
+ (mad-value (/ abs-dev-sum (length lst))))
+ (when (called-interactively-p 'any)
+ (message "Mean Average Deviation: %.2f" mad-value))
+ mad-value))
+
+ (defun pstd-dev (lst)
+ "Calculate Population Standard Deviation of a list"
+ (interactive "xEnter a list: ")
+ (let* ((lst (validate-list lst))
+ (n (length lst))
+ (mean-value (mean lst))
+ (squared-diffs (mapcar (lambda (x) (sqr-diff-mean x mean-value)) lst))
+ (sum-squared-diffs (sum squared-diffs))
+ (stddev (if (< n 2)
+ 0
+ (sqrt (/ (float sum-squared-diffs) (1- n))))))
+ (when (called-interactively-p 'any)
+ (message "%.2f" stddev))
+ stddev))
+
+ (defun sstd-dev (lst)
+ "Calculate Sample Standard Deviation of a list"
+ (interactive "xEnter a list: ")
+ (let* ((lst (validate-list lst))
+ (n (length lst))
+ (mean-value (mean lst))
+ (squared-diffs (mapcar (lambda (x) (sqr-diff-mean x mean-value)) lst))
+ (sum-squared-diffs (sum squared-diffs))
+ (stddev (if (< n 2)
+ 0
+ (sqrt (/ (float sum-squared-diffs) n)))))
+ (when (called-interactively-p 'any)
+ (message "%.2f" stddev))
+ stddev))
+
+ (defun scov (xset yset)
+ (interactive "xEnter independant list: \nxEnter dependant list: ")
+ (let* ((xset (validate-list xset))
+ (yset (validate-list yset))
+ (n (length xset))
+ (xmean (mean xset))
+ (ymean (mean yset))
+ (sum-dev-prod (sum (cl-mapcar (lambda (x y) (* (- x xmean) (- y ymean))) xset yset)))
+ (result (/ sum-dev-prod n)))
+ (when (called-interactively-p 'any)
+ (message "Sample Covariance: %.2f" result))
+ result))
+
+ (defun pcov (xset yset)
+ (interactive "xEnter independant list: \nxEnter dependant list: ")
+ (let* ((xset (validate-list xset))
+ (yset (validate-list yset))
+ (n (length xset))
+ (xmean (mean xset))
+ (ymean (mean yset))
+ (sum-dev-prod (sum (cl-mapcar (lambda (x y) (* (- x xmean) (- y ymean))) xset yset)))
+ (result (/ sum-dev-prod (1- n))))
+ (when (called-interactively-p 'any)
+ (message "Sample Covariance: %.2f" result))
+ result))
+
+ (defun pearson-scc (xset yset)
+ "Calculate the Pearson Sample Correlation Coefficient between x and y"
+ (interactive "xEnter independant list: \nxEnter dependant list: ")
+ (let* ((xset (validate-list xset))
+ (yset (validate-list yset))
+ (n (length xset))
+ (denominator (* (sstd-dev xset) (sstd-dev yset))))
+ (if (zerop denominator)
+ (message "Correlation coefficient: NaN (denominator is zero)")
+ (let ((r (/ (scov xset yset) denominator)))
+ (when (called-interactively-p 'any)
+ (message "Correlation coefficient: %.2f" r))
+ r))))
+
+ (defun pearson-pcc (xset yset)
+ "Calculate the Pearson Population Correlation Coefficient between x and y"
+ (interactive "xEnter independant list: \nxEnter dependant list: ")
+ (let* ((xset (validate-list xset))
+ (yset (validate-list yset))
(n (length xset))
- (prodxy (cl-mapcar (lambda (x y) (* x y)) xset yset))
- (sumx (sum xset))
- (sumy (sum yset))
- (sumprodxy (sum prodxy))
- (sumsqx (sum (mapcar (lambda (x) (expt x 2)) xset)))
- (sumsqy (sum (mapcar (lambda (y) (expt y 2)) yset)))
- (denominator (float (sqrt (* (- (* n sumsqx) (expt sumx 2))
- (- (* n sumsqy) (expt sumy 2)))))))
+ (denominator (* (pstd-dev xset) (pstd-dev yset))))
(if (zerop denominator)
(message "Correlation coefficient: NaN (denominator is zero)")
- (let ((r (/ (- (* n sumprodxy) (* sumx sumy)) denominator)))
- (message "Correlation coefficient: %.2f" r)))))
+ (let ((r (/ (scov xset yset) denominator)))
+ (when (called-interactively-p 'any)
+ (message "Correlation coefficient: %.2f" r))
+ r))))
#+end_src
* Custom keybinds and re-binds