fitting a curve to a straight line

i like this post (click again to cancel)
0
i dont like this post (click again to cancel)

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?

asked Sep 24 '11

ebs gravatar image ebs
129 1 10 15

updated Sep 24 '11

4 Answers:

i like this answer (click again to cancel)
2
i dont like this answer (click again to cancel) ebs has selected this answer as correct

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/reference/tutorial/optimize.html#least-square-fitting-leastsq

or numpy: http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html#numpy.linalg.lstsq

link

posted Sep 24 '11

Jason Grout gravatar image Jason Grout
3185 7 27 71

Or R, naturally.

kcrisman (Sep 25 '11)
i like this answer (click again to cancel)
3
i dont like this answer (click again to cancel)

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)
link

posted Sep 27 '11

Joaquim Puig gravatar image Joaquim Puig
171 5 9
i like this answer (click again to cancel)
1
i dont like this answer (click again to cancel)

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.

link

posted Sep 25 '11

Dirk Danckaert gravatar image Dirk Danckaert
165 1 8
i like this answer (click again to cancel)
1
i dont like this answer (click again to cancel)

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

link

posted Sep 25 '11

kcrisman gravatar image kcrisman
6639 13 66 150

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[hide preview]

Question tools

1 follower

Tags:

Stats:

Asked: Sep 24 '11

Seen: 541 times

Last updated: Sep 27 '11

powered by ASKBOT version 0.7.22
Copyright Sage, 2010. Some rights reserved under creative commons license.