# -*- coding: utf-8 -*-
# Created on Sat Oct 09 07:20:12 2021
# @author: mhebding

""" regLin le script pour effecuer une regression lineaire """

import numpy as np # numpy : gestion des tableaux
from scipy.stats import linregress # scipy : calcul scientifique

x = np.array([0,2.5,5,7.5,10]) # data
y = np.array([2.2,7.7,12.4,17.7,21.1]) # data

(a,b,r,_,_) = linregress(x,y) # regression lineaire
a,b,R = round(a,3), round(b,3), round(r**2,3) # arrondis

print("y = ax + b")
print(" a = {}\n b = {}\n R = {}".format(a,b,R))

import matplotlib.pyplot as plt # matplotlib : graphes
modele = a*x+b # regression lineaire, le modele est une droite
plt.scatter(x,y) # nuage de points experimentaux
plt.plot(x,modele) # droite du modele
plt.show() # affichage


# Version plus moderne avec polyfit (mais ne donne pas directement accès à R)
droite_regression = np.polyfit(x,y,1) 
# polyfit est un paramètre de modélisation polynomiale, une droite correspond à un polynome de degré 1
# retourn a et b, les deux valeurs correpondantes aux paramètres d'une droite affine (y = ax+b, polynome de degré 1)
a,b = droite_regression[0], droite_regression[1] # on affecte la première valeur de polyfit à a et la deuxième à b
modele = [a*element+b for element in x] # on créée la droite de modélisation à partir de a et b