Created
August 29, 2012 19:13
-
-
Save rweald/3517406 to your computer and use it in GitHub Desktop.
Simple Linear Regression in Ruby
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class SimpleLinearRegression | |
def initialize(xs, ys) | |
@xs, @ys = xs, ys | |
if @xs.length != @ys.length | |
raise "Unbalanced data. xs need to be same length as ys" | |
end | |
end | |
def y_intercept | |
mean(@ys) - (slope * mean(@xs)) | |
end | |
def slope | |
x_mean = mean(@xs) | |
y_mean = mean(@ys) | |
numerator = (0...@xs.length).reduce(0) do |sum, i| | |
sum + ((@xs[i] - x_mean) * (@ys[i] - y_mean)) | |
end | |
denominator = @xs.reduce(0) do |sum, x| | |
sum + ((x - x_mean) ** 2) | |
end | |
(numerator / denominator) | |
end | |
def mean(values) | |
total = values.reduce(0) { |sum, x| x + sum } | |
Float(total) / Float(values.length) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi Ryan,
I found your code useful - and translated it to Elixir.
Any chance your code can be MIT licensed? I am happy to release my Elixir version as MIT also, but it's a derived work so you'll need to license yours first.
Kind regards,
James.