PasteRack.org
Paste # 58403
2016-04-30 11:04:49

Fork as a new paste.

Paste viewed 191 times.


Embed:

  1. #lang racket
  2.  
  3.  
  4.  
  5.  
  6. (define (mean numbers)
  7.   (define sum 0)
  8.   (for ((x numbers)) (set! sum (+ x sum)))
  9.   (/ sum (length numbers))
  10.   )
  11.  
  12.  
  13. (define (std. numbers)
  14.   (define center (mean numbers))
  15.   (define sum 0)
  16.   (for ((x numbers))
  17.     (set! sum (+ sum (expt (- x center) 2)))
  18.     )
  19.   (expt (/ sum (- (length numbers) 1)) (/ 1 2))
  20.   )
  21.  
  22.  
  23. (define (correlation list1 list2)
  24.  
  25.   (define mean1 (mean list1))
  26.   (define mean2 (mean list2))
  27.   (define ldevs1 (for/list ((x list1)) (- x mean1)))
  28.   (define ldevs2 (for/list ((x list2)) (- x mean2)))
  29.  
  30.   (define numerator 0)
  31.   (for ((x (length list1))) (set! numerator (+ numerator (* (list-ref ldevs1 x) (list-ref ldevs2 x)) ) ))
  32.  
  33.   (define sqsums1 0)
  34.   (define sqsums2 0)
  35.   (for (( x ldevs1)) (set! sqsums1 (+ sqsums1 (expt x 2))))
  36.   (for (( x ldevs2)) (set! sqsums2 (+ sqsums2 (expt x 2))))
  37.   (define denominator (expt (* sqsums1 sqsums2) (/ 1 2)))
  38.  
  39.   (/ numerator denominator)
  40.  
  41.   )
  42.  
  43. (define (logorithm x y) (/ (log y) (log x)))
  44.  
  45. (define (linreg list1 list2)
  46.  
  47.   (define mean1 (mean list1))
  48.   (define mean2 (mean list2))
  49.   (define std1 (std. list1))
  50.   (define std2 (std. list2))
  51.   (define r (correlation list1 list2))
  52.  
  53.   (define slope (/ (* r std2) std1))
  54.   (define intercept (- mean2 (* slope mean1)))
  55.  
  56.   (list intercept slope)
  57.  
  58.   )
  59.  

=>