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))))))