from Packages import * class metrics: def __init__(self, meas, pred): if isinstance(meas, pd.DataFrame) or isinstance(meas, pd.Series): 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 # 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.round(3)