/
fitLib.py
75 lines (43 loc) · 1.21 KB
/
fitLib.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
from scipy.optimize import leastsq,curve_fit
from numpy.linalg import solve
import numpy as np
def genericFit(x,y,model=1,p0=None,logMe = False):
if logMe:
x = np.log(x)
y = np.log(y)
if type(model)==int:
fitP = (np.polyfit(x,y,model))
fit = applyPolyModel(x,fitP)
rsq = RsqPoly(x,y,fitP)
else:
fitP = (curve_fit(model,x,y,p0))[0]
fit = model(x,*fitP)
rsq = Rsq(x,y,model,fitP)
return {'fitParams':fitP,'fit':fit,'R^2':rsq}
def applyPolyModel(x,params):
y = np.zeros(x.shape)
e = params.shape[0]-1
for p in params:
y += x**(e)*p
e -= 1
return y
def SSRpoly(x,y,params):
yM = applyPolyModel(x,params)
SSR = np.sum((y-yM)**2)
return SSR
def SSR(model,x,y,par):
yM = model(x,*par)
SSR = np.sum((y-yM)**2)
return SSR
def SST(data):
return np.sum((data-np.mean(data))**2)
def RsqPoly(x,y,params):
ssr = SSRpoly(x,y,params)
sst = SST(y)
Rsq = 1-(ssr/sst)
return Rsq
def Rsq(x,y,model,params):
ssr = SSR(model,x,y,params)
sst = SST(y)
Rsq = 1-(ssr/sst)
return Rsq