gaushe で共分散を計算してみる
数学苦手なワシ。以下のページを参考に共分散を学ぶ https://mathtrain.jp/covariance
;; 国語・数学 の点数セット (define lst '((50 50) (50 70) (80 60) (70 90) (90 100))) (define (sum lst) (cond ((null? lst) 0) (#t (+ (car lst) (sum (cdr lst))))) (define (ave lst) (/ (sum lst) (length lst))) (define (first-list lst) (map car lst)) ;; 国語 (define (second-list lst) (map cadr lst)) ;; 数学 (ave (first-list lst)) ;; 国語 ave (ave (second-list lst)) ;; 数学 ave ;;共分散 計算方法 1 (ave (map (lambda (item) (* (- (car item) (ave (first-list lst))) (- (cadr item) (ave (second-list lst))))) lst)) ;;共分散 計算方法2 (- (ave (map (lambda (item) (* (car item) (cadr item))) lst)) (* (ave (first-list lst)) (ave (second-list lst))))
ついでに標準偏差、相関関数も。
;; 共分散 (define (covariance lst) (- (ave (map (lambda (item) (* (car item) (cadr item))) lst)) (* (ave (map car lst)) (ave (map cadr lst))))) ;; 標準偏差 (define (standard-dev lst) (define ave-lst (ave lst)) (ave (map (lambda (x) (expt (- x ave-lst) 2)) lst))) ;; 相関関数 (define (correctionFn lst) (inexact (/ (covariance lst) (* (standard-dev (map car lst)) (standard-dev (map cadr lst))))))
moremagic
2018-05-29