Comment puis-je faire une analyse de régression dans Sage?
Question
J'ai essayé sans succès:
find_fit(data, quadratic_residues)
J'essaie de trouver les données les mieux adaptées aux débits d'eau: http : //dl.getdropbox.com/u/175564/rate.png
--- modifier après le commentaire ---
Le nouveau code:
var('x')
model(x) = x**2
find_fit((xlist, reqlist), model)
Le message d'erreur:
Traceback (click to the left for traceback)
...
TypeError: data has to be a list of lists, a matrix, or a numpy array
--- modifier
Le message d'erreur est maintenant:
Traceback (click to the left for traceback)
...
ValueError: each row of data needs 2 entries, only 5 entries given
La même chose ici qu'une image: http://dl.getdropbox.com/u/175564/sage.png
La solution
mydata = [[1,3],[2,7],[3,13],[4,24]]
var('a,b,c')
mymodel(x) = a*x^2 + b*x + c
myfit = find_fit(mydata,mymodel,solution_dict=True)
points(mydata,color='purple') + plot(
mymodel(
a=myfit[a],
b=myfit[b],
c=myfit[c]
),
(x,0,4,),
color='red'
)
Autres conseils
Je pense que votre problème est que quadratic_resid ne signifie probablement pas ce que vous pensez que cela signifie. Si vous essayez d’adapter le meilleur modèle quadratique, je pense que vous voulez faire quelque chose comme.
var('a, b, c, x')
model(x) = a*x*x + b*x + c
find_fit(data, model)
En essayant à Steven son exemple, j'ai aussi rencontré l'erreur:
ValueError: each row of data needs 5 entries, only 2 entries given
Voici un exemple plus explicite que j'ai testé pour fonctionner dans sage 4.7.
sage: l=[4*i^2+7*i+134+random() for i in xrange(100)]
sage: var('a,b,c,x')
(a, b, c, x)
sage: model=a*x^2+b*x+c
sage: find_fit(zip(xrange(100),l),model,variables=[x])
[a == 4.0000723084513217, b == 6.9904742307159697, c == 134.74698715254667]
Vous avez apparemment besoin des variables = [x] pour indiquer à sage lequel de a, b, c et x correspond à la variable de votre modèle.