# Module: PROIEL::Statistics

Defined in:
lib/proiel/statistics.rb

## Class Method Summary collapse

• Computes the line of best fit using the least-squares method.

## Class Method Details

### .least_squares(x, y) ⇒ Array(Float, Float)

Computes the line of best fit using the least-squares method.

Examples:

``````x = [8, 2, 11, 6, 5, 4, 12, 9, 6, 1]
y = [3, 10, 3, 6, 8, 12, 1, 4, 9, 14]
a, b = PROIEL::Statistics.least_squares(x, y)
a # => 14.081081081081088
b # => -1.1064189189189197``````

Parameters:

• x (Array<Number>)

x-values

• y (Array<Number>)

y-values

Returns:

• (Array(Float, Float))

y-intercept and slope

Raises:

• (ArgumentError)
 ``` 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39``` ```# File 'lib/proiel/statistics.rb', line 22 def self.least_squares(x, y) raise ArgumentError unless x.is_a?(Array) raise ArgumentError unless y.is_a?(Array) raise ArgumentError, 'array lengths differ' unless x.size == y.size x_mean = x.reduce(&:+).to_f / x.size y_mean = y.reduce(&:+).to_f / y.size x_sqsum = x.reduce(0.0) { |sum, n| sum + n**2 } xy_sum = x.zip(y).reduce(0.0) { |sum, (m, n)| sum + m * n } sxy = xy_sum - x.length * x_mean * y_mean sx2 = x_sqsum - x.length * (x_mean**2) beta = sxy / sx2 alfa = y_mean - beta * x_mean [alfa, beta] end```