# fitting a curve to a straight line How can I use sage to fit some points like

x = [1, 3, 4...] y = [1.2, 4.5, 3.6, ...]

to a straight line using method of least squares And make a plot of the points and the line?

edit retag close merge delete

Sort by » oldest newest most voted

Searching in google for "sage least squares" gives three examples as the three top hits. Here is another example: http://sage.cs.drake.edu/home/pub/52/

You can also use scipy to do it: http://docs.scipy.org/doc/scipy/refer...

more

In my opinion the easiest way to do the fit is to use the find_fit function, which is standard in SAGE. For example:

sage: x = [1, 3, 4]
sage: y = [1.2, 4.5, 3.6]
sage: var('a,b,t')
sage: model(t)=a*t+b
sage: data=zip(x,y)
sage: fit=find_fit(data,model,solution_dict=True) # Dictionary is optional but handy
sage: model.subs(fit) # Show the model
t |--> 0.92142857142840007*t + 0.64285714285636364
sage: plot(model.subs(fit),(t,0,5))+points(data,size=20,color='red') # Nice plot


When you have a huge number of points and you want just a polynomial fit, I found that it is (numerically) better to use the polyfit function from numpy:

sage: import numpy as np
sage: a,b=np.polyfit(x,y,1)
sage: a,b
(0.92142857142857137, 0.64285714285714401)

more

I didn't find any reference to linear regression in the SAGE reference manual. That means you have to use Maxima directly. Fortunately that's not so difficult.

It's easier if you present the data as a list of pairs (x,y). Try this in a SAGE notebook cell:

maxima.load("stats")
x=maxima.simple_linear_regression([[0,1],[1,2],[2,4]],conf_level=0.95)

x


You are presented a whole bunch of statistics about the regression. From there on I guess you can manage on your own. Good luck.

more

I have a feeling that the answer to this ask.sagemath question may also be helpful. It mentions the built-in find_fit method.

more