Newer
Older
class metrics:
def __init__(self, meas, pred):
if isinstance(meas, pd.DataFrame):
self.meas = meas.to_numpy()
else :
self.meas = meas.ravel()
if isinstance(pred, pd.DataFrame):
self.pred = pred.to_numpy().ravel()
else :
self.pred = pred.ravel()
@property
def evaluate_(self):
xbar = np.mean(self.meas) # the average of measured values
e = np.subtract(self.meas.ravel(), self.pred.ravel())
e2 = e**2# the squared error
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['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))]