Régression linéaire par morceaux Python
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Régression linéaire par morceaux Python



  1. #1
    Melindapuchadez

    Régression linéaire par morceaux Python


    ------

    Bonjour,
    J'ai réalisé des mesures conductimétriques d'une expérience et je voudrais les étudier avec Python. Les mesures doivent formées deux segments de droite et je recherche l'intersection. Cependant, je ne connais pas dans quelle zone se situe l'intersection ni les équations de droite. Mon idée était de faire une régression linéaire en 2 morceaux mais je ne sais pas si une fonction Python existe pour réaliser cette opération sur un jeu de données.

    Par ailleurs, si cette fonction n'existe pas, j'avais eu l'idée de couper le jeu de données en 2 puis de faire une régression linéaire sur les deux moitiés pour ensuite voir comment évolue le coefficient de corrélation lorsque j'inclue le point du milieu dans la 1ère moitié puis dans la 2nde. Je mettrais donc le point du milieu dans la liste pour laquelle la régression linéaire a le plus grand coefficient de corrélation en valeur absolue. Puis, je prendrais le dernier point de la plus petite liste pour faire la même chose etc, jusqu'à ce que le point que je prends permet d'avoir le plus grand coefficient de corrélation dans la liste la plus petite. Ainsi j'aurais deux listes permettant de faire une régression linéaire en 2 morceaux et je pourrais trouver l'intersection. Pensez-vous que cela puisse fonctionner?

    Merci beaucoup pour votre aide!

    -----

  2. #2
    polo974

    Re : Régression linéaire par morceaux Python

    La dérivée d'une droite est une constante...

    2 segments de droite, donc en dérivant, 2 niveaux, prendre le milieu comme seuil et couper à ce niveau pour obtenir les 2 segments.
    Jusqu'ici tout va bien...

  3. #3
    Melindapuchadez

    Re : Régression linéaire par morceaux Python

    Merci beaucoup pour ta réponse. Mais mes mesures ne forment pas parfaitement une droite donc en faisant la dérivée je n'aurais pas nécessairement deux niveaux. Cela ne pose pas de problèmes?

  4. #4
    polo974

    Re : Régression linéaire par morceaux Python

    Si localement, il y a des dents de scie ou autres bosses, il faut peut-être appliquer un filtre passe-bas qui ne déphase pas...
    Jusqu'ici tout va bien...

  5. A voir en vidéo sur Futura
  6. #5
    MissJenny

    Re : Régression linéaire par morceaux Python

    tiens c'est bien une approche d'ingénieur celle que tu proposes. Bidouiller pour arriver à un résultat, dont on ne connaîtra pas les propriétés. L'approche d'un mathématicien serait de commencer par exprimer ce paramètre (le point d'intersection des droites de régression) comme fonction de la distribution des données, puis d'en proposer un estimateur sans biais et optimal si possible. Il est vrai que de tels estimateurs n'existent pas toujours, en tout cas pas pour toutes les distributions.

  7. #6
    Melindapuchadez

    Re : Régression linéaire par morceaux Python

    Merci beaucoup pour vos réponses. Je vais me renseigner sur les filtres possibles et sur comment exprimer le point d'intersection selon les données parce que là sans recherches je ne vois pas trop comment faire. Merci encore!

  8. #7
    MissJenny

    Re : Régression linéaire par morceaux Python

    Une chose que tu pourrais faire : je suppose que tu as comme données n couples (x1,y1)...(xn,yn). Tu commences par les trier selon les valeurs de x, tu as donc les couples (x(1),y(1)),...,(x(n),y(n)) avec x(1)<= ... <= x(n). Maintenant tu ajustes le modèle à 6 paramètres a1,b1,a2,b2,k,s où (a1,b1) et (a2,b2) sont les paramètres des deux droites, k est le rang du dernier couple qui relève de la droite (a1,b1) et s est l'écart-type résiduel. Autrement dit du écris que y(i) = a(t) + x(i)*b(t) + epsilon(i) où t vaut 1 si i<=k et t=2 si i>k, la variance de epsilon étant s^2. Tu peux obtenir des estimations des 6 paramètres par moindres carrés, à l'aide d'un programme d'optimisation non linéaire itératif. L'intérêt de cette méthode est que tu vas obtenir en même temps que les estimations des valeurs pour les variances des paramètres.

    Ensuite il te faut calculer la position du point d'intersection des droites, c'est de la géométrie élémentaire. A l'aide de la formule et en appliquant la méthode delta, tu auras une estimation de la variance de ce paramètre.
    Dernière modification par MissJenny ; 15/05/2021 à 18h32.

  9. #8
    MissJenny

    Re : Régression linéaire par morceaux Python

    je crois que j'ai été un peu optimiste. La théorie qui permet de donner des variances aux estimateurs des paramètres utilise l'information de Fisher, laquelle est la dérivée seconde du log vraisemblance. Or le paramètre k est un entier, donc pas de dérivée. Bien sûr, on peut remplacer k par une valeur réelle sur l'axe des x, ça revient au même, mais la vraisemblance va faire un saut à chaque fois que ce paramètre croise un x(i), donc toujours pas de dérivée. Il doit y avoir moyen de s'en sortir avec les différences finies mais ça dépasse mes compétences (les statistiques ne sont pas mon métier). Il faudrait en parler avec un statisticien.

  10. #9
    Melindapuchadez

    Re : Régression linéaire par morceaux Python

    D'accord, en tout cas merci beaucoup pour vos explications je vais me renseigner à ce sujet!

  11. #10
    MissJenny

    Re : Régression linéaire par morceaux Python

    même en l'absence de théorie solide, tu peux utiliser les moindres carrés pour estimer les paramètres et faire du rééchantillonnage (bootstrap) pour la variabilité.

  12. #11
    Melindapuchadez

    Re : Régression linéaire par morceaux Python

    D'accord merci beaucoup!

Discussions similaires

  1. Régression linéaire
    Par pipopopo dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 28/02/2016, 14h16
  2. Régression non linéaire
    Par inviteedf4ed80 dans le forum Mathématiques du supérieur
    Réponses: 8
    Dernier message: 27/02/2012, 19h53
  3. régression linéaire
    Par 369 dans le forum Physique
    Réponses: 8
    Dernier message: 08/01/2011, 21h27
  4. régression linéaire
    Par inviteb4939f73 dans le forum Mathématiques du supérieur
    Réponses: 6
    Dernier message: 01/12/2010, 11h20
  5. régression non linéaire
    Par invitefaad1b29 dans le forum Mathématiques du supérieur
    Réponses: 13
    Dernier message: 20/10/2009, 13h57