Class: Regression::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/linear-regression/base.rb

Direct Known Subclasses

CorrelationCoefficient, Linear

Instance Method Summary collapse

Instance Method Details

#covariance(xs, ys) ⇒ Object



13
14
15
16
17
18
# File 'lib/linear-regression/base.rb', line 13

def covariance(xs, ys)
  raise "Length xs and ys must be equal" unless xs.length == ys.length

  xys = xs.zip(ys).map{|x,y| x * y }
  mean(xys) - mean(xs) * mean(ys)
end

#covariance2(xs, ys) ⇒ Object

Another way to implement covariance



21
22
23
24
25
26
27
28
# File 'lib/linear-regression/base.rb', line 21

def covariance2(xs, ys)
  raise "Length xs and ys must be equal" unless xs.length == ys.length

  ev_x, ev_y = mean(xs), mean(ys)
  xs.zip(ys)
    .map{|x,y| (x-ev_x) * (y-ev_y)}
    .inject(0) {|sum, x| sum += x} / xs.length
end

#mean(values) ⇒ Object



5
6
7
8
9
# File 'lib/linear-regression/base.rb', line 5

def mean(values)
  raise "values must be an array" unless values.is_a?(Array)

  values.inject(0) {|sum, x| sum + x}.to_f / values.length
end

#standard_deviation(values) ⇒ Object



40
41
42
43
44
# File 'lib/linear-regression/base.rb', line 40

def standard_deviation(values)
  raise "Values must be an array" unless values.is_a?(Array)

  Math.sqrt(variance(values))
end

#variance(values) ⇒ Object



32
33
34
35
36
# File 'lib/linear-regression/base.rb', line 32

def variance(values)
  raise "Values must be an array" unless values.is_a?(Array)

  mean(values.map{|i| i**2}) - mean(values)**2
end