from Packages import * 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