IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Statistiques, Data Mining et Data Science Discussion :

Travail sur courbe


Sujet :

Statistiques, Data Mining et Data Science

  1. #1
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut Travail sur courbe
    Bonjour,
    Je reviens demander de l'aide, j'ai un soucis qui maintenant me prend la tête depuis bien trop longtemps, et qui a mon avis ne se résout pas simplement parce que je n'ai plus le niveau en math ...

    Allons y ^^
    J'ai une courbe, une cinétique bactérienne en fait, elle se caractérise par un phase d'accélération (type exponentielle) suivi d'une phase exponentielle, suivi d'une phase de ralentissement qui mène à une phase stationnaire :
    Exemple concret :


    Le but de mon algorithme, que je recherche, c'est de récupérer le point durant lequel on passe d'une croissance à une décroissance, plus proprement dit : le point d'inflexion.
    Ca c'est dans un monde tout beau tout propre et déjà avoir cet algo m'aiderais beaucoup. Mais il faut comprendre que mes cinétiques à traiter sont des observation du vivant, donc le monde n'est pas beau, pas propre, parfois on a des courbes dégueu... Il me faudrait un algorithme souple, du moins autant que possible (quand une bactérie ne pousse pas, pas la peine de chercher a trouver ce point, si il y est de toute manière il n'aura aucune valeur)

    J'ai pensé calculé la différence Y(x1)-Y(x0) Et a partir de la plus grande différence, récupérer l’abscisse que je recherche. Mais malheureusement ça ne prend pas en compte les artefact qui pourrait apparaître en fin de courbe. Il faudrait dans l'idéal "trouver" la phase exponentielle recherché.
    J'ai alors tenté de trouver la phase de ralentissement qui suit cette phase exponentielle en partant du postulat que si 5 valeurs consécutives de différences sont inférieur à la précédente, alors on est au bon endroit, mais là encore pour des courbes "lissé", on aura des résultats mauvais.

    Je suis sur que je suis aller chercher bien trop loin et quasiment certain que ceux qui ont eu le courage de lire n'ont rien compris a mes réflexions, mais je dois avouer que je ne sais plus trop par quel bout prendre mon problème ...
    Images attachées Images attachées  
    Expert en recherche google caféinomane

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 72
    Points : 129
    Points
    129
    Par défaut
    Bonjour,
    Est-ce que tu veux utiliser un modèle du genre fonction logistique
    pour laquelle on part pratiquement de zéro ensuite on a une phase de croissance raide puis une stabilisation comme ça ?



    le modèle est f(t)= K / (1+a* e^(-r*t))
    avec les points de la courbe observée on peut trouver les valeurs des paramètres K, a et r qui conviennent le mieux.

    Précise ce que tu veux car le point d'inflexion en gros c'est celui qui est au milieu du S.(sur l'image son abscisse vaut 80) ou alors le point où le maximum est pratiquement atteint(sur l'image 220 )

  3. #3
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    Bonjour et merci de venir m'aider

    J'ai regardé ça a une époque par le biais de R (que j'ai du abandonné après, il faut que je fasse ça sans les courbes, uniquement avec les valeurs pour chaque cycle d'une heure) et j'avais pris comme modèle de linéarisation une fonction Logistique à 3 arguments :
    f(x) = c + \frac{d-c}{(1+\exp(b(x - e)))^f}
    Avec b, d, e comme valeur à récupérer. (les autres valeurs étant nul, j'imagine)
    Par R, je recherchais l'une de ces trois valeurs, mais je devais passer par des traitement sur la linéarisation (tel qu'une fixation de l'asymptote haute, le retrait d'un ou plusieurs point aberrants, une troncatures des valeurs pour avoir uniquement le motif qui match bien, ...)

    Ca doit correspondent avec ce que tu me donnes, mais dans le même genre, comment traiter ça avec uniquement les valeurs de base, c'est largement au dessus de mon niveau @.@

    Sinon oui, je recherche le milieu du S, en théorie dans mon cas, c'est DOmax/2 (soit en math : Ymax/2) Mais dans les faits, la valeur de DOmax n'est pas toujours égale à la valeur de seuil (parfois on aura des artefacts, parfois on aura une deuxième exponentielle qui commencera).
    Expert en recherche google caféinomane

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Moi je proposerais :

    d'abord une moyenne glissante (sur 3 points) ça lissera la courbe

    Puis simplement une exploration : ton point d'inflection marque la miite entre ce qui a une pente "verticale" (>> 45 degrés) et horizontale (<< 45 degrés). LE moment où tu détectes que tu bascules, c'est là...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 72
    Points : 129
    Points
    129
    Par défaut
    En fait il faut résoudre l'équation f''(x)=0 (dérivée seconde)

    Si les points connus sont répartis régulièrement (pas h constant)
    il y a des formules qui approchent la dérivée seconde

    f''(x_i) = (y_{i-1} -2y_i + y_{i+1}) / (h^2)

    ou encore mieux

    f''(x_i) = ( - y_{i-2} +16y_{i-1} -30y_i +16y_{i+1} - y_{i+2}) / (12h^2)

    Sur le dessin tu as f en noir, la dérivée en rouge avec le maximum dont tu parlais dans ton premier post et la dérivée seconde en vert.
    C'est plus facile et plus précis de trouver le zéro de la verte que le maximum de la rouge ou que l'inflexion de la noire.
    Comme tu veux la valeur qui annule tu peux laisser tomber le dénominateur
    12h^2 qui reste constant

    Nom : courbes.gif
Affichages : 754
Taille : 4,1 Ko
    je ne sais pas pourquoi l'image (en pj ) s'affiche si petit....il faut cliquer dessus pour l'agrandir

  6. #6
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Je vois deux solutions:

    1) La solution matheuse: faire une régression logistique.
    Ca permet d'obtenir les paramètres a et r de l'équation f(t)= K / (1+a* e^(-r*t)) donnée par kija13; les calculs sont un peut lourd à implémenter, mais d'autres on sûrement déjà fait ça à ta place. Ya plus qu'a trouver la lib qui va bien dans ton langage préféré.

    2)La solution simpliste:
    si pour x=0 tu as toujours y=0, et si pour x suffisamment grand tu as toujours une valeur de y constante (appelons la Y_palier) (sur tes graphs c'est à partir de x=6 ou 7) alors:
    tu peut alors chercher l’intervalle [x_i, x_i+1] dans lequel pour x_i on a y<Y_palier/2 et pour x_i+1 on a y>Y_palier/2, puis pour affiner la valeur de x_inflexion, tu fait une simple interpolation linéaire sur [x_i, x_i+1] et tu résous pour y=Y_palier

  7. #7
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    Merci pour votre aide précieuse.
    Là ou c'est drôle c'est que j'avais modélisé de tête puis sur une feuille la dérivé première et seconde exactement comme sur ton graphique et que j'avais fini par tout barrer parce que je ne voyais pas comment faire calculer ça à un ordinateur dans un langage pas du tout statistique ^^

    J'aimerais partir sur la dérivé seconde du coup, parce qu'elle m'apportera exactement le point que je recherche, et que, du coup, il y a une formule (je ne le savais pas ça).
    Maintenant une dernière question : Comment trouver cette formule ? le développement m'intéresse autant voir plus que la solution (solution : utile pour mon employeur; développement : utile pour moi)
    Un lien suffirait parce que même ça je trouve pas ^^'

    Souviron : ton idée était pas mal, je réutiliserais sans doute le principe de lissage que tu as suggéré.

    Bertry : Résoudre une logistique, j'ai le programme pour (R) et une bibliothèque pour l'utiliser dans mon langage (R.NET pour vb.net) mais la librairie ne fonctionne pas aussi bien que je le voudrais, donc j'ai du lacher l'affaire ... Quand à la solution simpliste, j'ai bien peur qu'avec les courbes méchantes que je pourrais avoir et dans l'optique d'avoir quelque chose de suffisamment fiable, ce ne soit pas une solution intéressante.
    Expert en recherche google caféinomane

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 72
    Points : 129
    Points
    129
    Par défaut
    La 2e formule est intéressante car elle utilise 5 points de la courbe donc correspond à une sorte de lissage.
    Je n'ai pas de lien, ma réf est le livre de J.P. NOUGIER Méthodes de calcul numérique chez Masson pp 123-133.
    On utilise les développement de Taylor
    f(x+h)=f(x)+hf'(x)+h^2/2f''(x)+...
    je peux te faire quelques pages en pdf

  9. #9
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    J'ai lu tout ça, dans toute mon incompétence j'ai réussi a comprendre environ la méthode, suffisamment pour que ma curiosité se calme un peu, c'est parfait pour mon cas, je lance une série de test. merci encore
    Expert en recherche google caféinomane

  10. #10
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    Double post pour donner mes résultats de tests. En pièce jointe se trouve les deux images, original, et dérivée seconde.
    Le premier passage d'un Y positif à négatif correspond, mais il y en a plein d'autres qui se forment après. Ca pourrait aller quand même mais uniquement dans un cas ou les irrégularités sont après l'exponentielle, ce qui ne sera pas toujours le cas. (il faut s'imaginer que vu le nombre de données, on peut clairement partir du principe que tout les cas de figures gênant seront a traiter...)
    Images attachées Images attachées   
    Expert en recherche google caféinomane

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Travailler sur une date
    Par HqX dans le forum Langage SQL
    Réponses: 11
    Dernier message: 05/10/2004, 15h54
  2. Travailler sur des sources distantes avec Eclipse
    Par El Saigneur dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 12/07/2004, 09h40
  3. Travailler sur des données qui doivent être triées
    Par haypo dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 19/07/2003, 17h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo