First time here? Check out the FAQ!

Ask Your Question
1

fitting a curve to a straight line

asked 13 years ago

ebs gravatar image

updated 10 years ago

FrédéricC gravatar image

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?

Preview: (hide)

4 Answers

Sort by » oldest newest most voted
2

answered 13 years ago

Jason Grout gravatar image

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...

or numpy: http://docs.scipy.org/doc/numpy/refer...

Preview: (hide)
link

Comments

Or R, naturally.

kcrisman gravatar imagekcrisman ( 13 years ago )
4

answered 13 years ago

Joaquim Puig gravatar image

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)
Preview: (hide)
link
1

answered 13 years ago

kcrisman gravatar image

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

Preview: (hide)
link
1

answered 13 years ago

Dirk Danckaert gravatar image

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.

Preview: (hide)
link

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 13 years ago

Seen: 5,108 times

Last updated: Sep 27 '11