Come posso fare l'analisi di regressione in Sage?
Domanda
L'ho provato senza successo:
find_fit(data, quadratic_residues)
Sto cercando di trovare la soluzione migliore per i dati sulle portate d'acqua: http : //dl.getdropbox.com/u/175564/rate.png
--- modifica dopo il commento ---
Il nuovo codice:
var('x')
model(x) = x**2
find_fit((xlist, reqlist), model)
Il messaggio di errore:
Traceback (click to the left for traceback)
...
TypeError: data has to be a list of lists, a matrix, or a numpy array
--- modifica
Il messaggio di errore è ora:
Traceback (click to the left for traceback)
...
ValueError: each row of data needs 2 entries, only 5 entries given
Lo stesso qui come un'immagine: http://dl.getdropbox.com/u/175564/sage.png
Soluzione
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'
)
Altri suggerimenti
Penso che il tuo problema sia che quadratic_residues probabilmente non significa cosa pensi che significhi. Se stai tentando di adattare il miglior modello quadratico, penso che tu voglia fare qualcosa del genere.
var('a, b, c, x')
model(x) = a*x*x + b*x + c
find_fit(data, model)
Provando a Steven il suo esempio, mi sono imbattuto anche nell'errore:
ValueError: each row of data needs 5 entries, only 2 entries given
Ecco un esempio più esplicito che ho testato per funzionare in 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]
Apparentemente hai bisogno delle variabili = [x] per dire a sage quale di a, b, c e x corrisponde alla variabile nel tuo modello.