Advertisement
Guest User

Linear Regression

a guest
Nov 2nd, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (ns tmath)
  2.  
  3. (defn sum [list]
  4.   (reduce + list)
  5. )
  6.  
  7. (defn mean [list]
  8.     (/ (sum list) (count list))    
  9. )
  10.  
  11. (defn prodsum [data]
  12.   (cond
  13.     (empty? data) 0
  14.     :else (+
  15.         (reduce * (first data))
  16.         (prodsum (rest data))
  17.     )
  18.   )
  19. )
  20.  
  21. (defn expsum [list]
  22.   (sum (map * list list))
  23. )
  24.  
  25. (defn nexpsum [data position]
  26.     (-
  27.         (*
  28.             (count data)
  29.             (expsum (map position data))
  30.         )
  31.         (Math/pow (sum (map position data)) 2)
  32.     )
  33. )
  34.  
  35. (defn nprodsum [data]
  36.   (*
  37.     (count data)
  38.     (prodsum data)
  39.   )
  40. )
  41.  
  42. (defn pearson [data]
  43.   (/
  44.     (-
  45.       (nprodsum data)
  46.       (*
  47.           (sum (map first data))
  48.           (sum (map last data))
  49.       )
  50.     )
  51.     (Math/sqrt
  52.       (*
  53.         (nexpsum data first)
  54.         (nexpsum data last)
  55.       )
  56.     )
  57.   )
  58. )
  59.  
  60. (defn dev [n mean]
  61.     (Math/pow (- n mean) 2)
  62. )
  63.  
  64. (defn stddev [list]
  65.     (Math/sqrt
  66.         (*
  67.             (/
  68.                 1
  69.                 (count list)
  70.             )
  71.             (sum (map dev list (repeat (count list) (mean list))))
  72.         )
  73.     )
  74. )
  75.  
  76. (defn slope [data]
  77.   (*
  78.     (pearson data)
  79.     (/
  80.       (stddev (map last data))
  81.       (stddev (map first data))
  82.     )
  83.   )
  84. )
  85.  
  86. (defn yintercept [data]
  87.   (-
  88.     (mean (map last data))
  89.     (* (slope data) (mean (map first data)))
  90.   )
  91. )
  92.  
  93. (defn lreg [data]
  94.   (str "f(x) = " (slope data) "x + " (yintercept data))
  95. )
  96.  
  97. (lreg [
  98. [     3.385    44.500]
  99. [     0.480    15.500]
  100. [     1.350     8.100]
  101. [   465.000   423.000]
  102. [    36.330   119.500]
  103. [    27.660   115.000]
  104. [    14.830    98.200]
  105. [     1.040     5.500]
  106. [     4.190    58.000]
  107. [     0.425     6.400]
  108. [     0.101     4.000]
  109. [     0.920     5.700]
  110. [     1.000     6.600]
  111. [     0.005     0.140]
  112. [     0.060     1.000]
  113. [     3.500    10.800]
  114. [     2.000    12.300]
  115. [     1.700     6.300]
  116. [  2547.000  4603.000]
  117. [     0.023     0.300]
  118. [   187.100   419.000]
  119. [   521.000   655.000]
  120. [     0.785     3.500]
  121. [    10.000   115.000]
  122. [     3.300    25.600]
  123. [     0.200     5.000]
  124. [     1.410    17.500]
  125. [   529.000   680.000]
  126. [   207.000   406.000]
  127. [    85.000   325.000]
  128. [     0.750    12.300]
  129. [    62.000  1320.000]
  130. [  6654.000  5712.000]
  131. [     3.500     3.900]
  132. [     6.800   179.000]
  133. [    35.000    56.000]
  134. [     4.050    17.000]
  135. [     0.120     1.000]
  136. [     0.023     0.400]
  137. [     0.010     0.250]
  138. [     1.400    12.500]
  139. [   250.000   490.000]
  140. [     2.500    12.100]
  141. [    55.500   175.000]
  142. [   100.000   157.000]
  143. [    52.160   440.000]
  144. [    10.550   179.500]
  145. [     0.550     2.400]
  146. [    60.000    81.000]
  147. [     3.600    21.000]
  148. [     4.288    39.200]
  149. [     0.280     1.900]
  150. [     0.075     1.200]
  151. [     0.122     3.000]
  152. [     0.048     0.330]
  153. [   192.000   180.000]
  154. [     3.000    25.000]
  155. [   160.000   169.000]
  156. [     0.900     2.600]
  157. [     1.620    11.400]
  158. [     0.104     2.500]
  159. [     4.235    50.400]
  160. ])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement