diff --git a/UI/main.py b/UI/main.py
index 5e0e855df125f060799760ed99e7f121491c4fd8..0583a6ed204633d56a341d95cf29241921282adb 100644
--- a/UI/main.py
+++ b/UI/main.py
@@ -1240,6 +1240,67 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
         self.freeze = False
         print('complete')
 
+        df = self.transects_df.loc[:, ['tr_q_total', 'meas_label_user', 'start_time', 'end_time']]
+        df['mid_time'] = (df['start_time'] + df['end_time']) / 2
+        df['mid_time'] = df['mid_time'] - np.nanmin(df['mid_time'])
+        df['meas_label_user'] = pd.to_numeric(df['meas_label_user'])
+        mean_q = np.nanmean(df['tr_q_total'])
+        df['delta_q'] = mean_q - df['tr_q_total']
+        from sklearn import linear_model
+        x = df[['meas_label_user', 'mid_time']]
+        y = df['delta_q']
+        regr = linear_model.LinearRegression()
+        regr.fit(x, y)
+        print('Intercept: \n', regr.intercept_)
+        print('Coefficients: \n', regr.coef_)
+
+        import statsmodels.api as sm
+        x = sm.add_constant(x)  # adding a constant
+        model = sm.OLS(y, x).fit()
+        predictions = model.predict(x)
+        print_model = model.summary()
+        print(print_model)
+
+        import matplotlib.pyplot as plt
+        from sklearn import linear_model
+        from mpl_toolkits.mplot3d import Axes3D
+        X = df[['meas_label_user', 'mid_time']].values.reshape(-1, 2)
+        Y = df['delta_q']
+        x = X[:, 0]
+        y = X[:, 1]
+        z = Y
+        x_pred = np.linspace(min(x), max(x), 30)  # range of porosity values
+        y_pred = np.linspace(min(y), max(y), 30)  # range of brittleness values
+        xx_pred, yy_pred = np.meshgrid(x_pred, y_pred)
+        model_viz = np.array([xx_pred.flatten(), yy_pred.flatten()]).T
+        ols = linear_model.LinearRegression()
+        model = ols.fit(X, Y)
+        predicted = model.predict(model_viz)
+        r2 = model.score(X, Y)
+
+        plt.style.use('default')
+        fig = plt.figure(figsize=(12, 4))
+        ax1 = fig.add_subplot(131, projection='3d')
+        ax2 = fig.add_subplot(132, projection='3d')
+        ax3 = fig.add_subplot(133, projection='3d')
+        axes = [ax1, ax2, ax3]
+        for ax in axes:
+            ax.plot(x, y, z, color='k', zorder=15, linestyle='none', marker='o', alpha=0.1)
+            ax.scatter(xx_pred.flatten(), yy_pred.flatten(), predicted, facecolor=(0, 0, 0, 0), s=20,
+                       edgecolor='#70b3f0')
+            ax.set_xlabel('Distance (m)', fontsize=12)
+            ax.set_ylabel('Time (s)', fontsize=12)
+            ax.set_zlabel('Delta Q (m3/s)', fontsize=12)
+            ax.locator_params(nbins=4, axis='x')
+            ax.locator_params(nbins=5, axis='x')
+        ax1.view_init(elev=28, azim=120)
+        ax2.view_init(elev=4, azim=114)
+        ax3.view_init(elev=60, azim=165)
+        fig.suptitle('$R^2 = %.2f$' % r2, fontsize=20)
+        fig.tight_layout()
+        fig.savefig(r"D:\0_INRAE\regression.png", dpi=300, bbox_inches='tight')
+
+
     def load_tables(self):
         """ Draw tables.
         """