Newer
Older
class metrics:
def __init__(self, meas, pred):
if isinstance(meas, pd.DataFrame):
self.meas = meas.to_numpy()
else :
self.meas = meas.ravel()
self.pred = pred.to_numpy().ravel()
@property
def evaluate_(self):
xbar = np.mean(self.meas) # the average of measured values
e2 = (self.meas - self.pred)**2 # the squared error
print(xbar)
# Sum of squared:
# TOTAL
sst = np.sum((self.meas-xbar)**2)
# RESIDUAL
ssr = np.sum(e2)
# REGRESSION OR MODEL
ssm = np.sum(self.pred - xbar)
# Compute statistical metrics
metr = pd.DataFrame()
metr['r'] = [np.corrcoef(self.meas.ravel(), self.pred)[0,1]]
metr['r2'] = [1-ssr/sst]
metr['rmse'] = [np.sqrt(np.mean(e2))]
metr['mae'] = [np.mean(np.abs(e2))]
metr['rpd'] = [np.std(self.meas)/np.sqrt(np.mean(e2))]
metr['rpiq'] = [(np.quantile(self.meas,.75)-np.quantile(self.meas,.25))/np.sqrt(np.mean(e2))]
return metr