Is there a Ruby library that allows me to do either linear or non-linear least squares approximation of a set of data.
What I would like to do is the following:
I'd prefer not to have to try to port some C/C++/Java library to get this functionality so I'm hoping there is some existing Ruby lib that I can use.
I am maintaining a C library for non-linear least squares minimization, http://apps.jcns.fz-juelich.de/lmfit, that comes with swig files for Ruby.
Try using the 'statsample' gem. You can perform logarithmic, exponential, power, or any other transformation using the example that is provided below. I hope this helps.
require 'statsample'
# Independent Variable
x_data = [Math.exp(1), Math.exp(2), Math.exp(3), Math.exp(4), Math.exp(5)]
# Dependent Variable
y_data = [3, 5, 7, 9, 11]
# Logarithmic Transformation of X data
# Math.log in Ruby has the base of Euler's number 'e' ~= '2.71828',
# instead of the base '10'. Just a note.
log_x_data = x_data.map { |x| Math.log(x) }
# Linear Regression using the Logarithmic Transformation
x_vector=log_x_data.to_vector(:scale)
y_vector=y_data.to_vector(:scale)
ds={'x'=>x_vector,'y'=>y_vector}.to_dataset
mlr=Statsample::Regression.multiple(ds,'y')
mlr.summary
# Provides the value of the y-intercept
#p mlr.constant
# Lists the coefficients of each casual variable. In this case, we have only one--'x'.
#p mlr.coeffs
# The regression output produces the line y = 1 + 2*x, but
# considering that we transformed x earlier, it really produces
# y = 1 + 2*ln(x).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With