Régression y = a x^b + c

Bonjour à tous,

[Je décrasse un peu ce pseudo qui ne m'a pas servi depuis des années (!), le temps passe vite]

Je tente de modéliser un ensemble de points sous la forme y(x) = ax^b + c. Dans le cas où j'ai c=0, il est facile de linéariser ce modèle (ln y = ln a + b ln x), mais avec cette constante supplémentaire, j'ai l'impression que je ne vois pas de changement de variable évident pour retomber sur une régression linéaire.

Est-ce que l'un d'entre vous connait une méthode pour retrouver ces paramètres (a,b,c) ? J'imagine bien qu'il existe des techniques "génériques" pour résoudre ce genre de problème, mais j'aimerais autant ne pas sortir la grosse artillerie si il existe une méthode simple ...

De manière annexe, une propriété intéressante de la régression linéaire est que je peux facilement mettre à jour les paramètres à chaque fois que je rajoute un échantillon. Je serais bien entendu particulièrement intéressé par une telle propriété dans le cas y = ax^b + c ...

Je suis preneur de toute suggestion/commentaire/référence ...

Merci d'avance,
Cédric

Réponses

  • Si le problème est d'ordre pratique, vous pouvez utiliser (par exemple) le solveur d'Excel pour déterminer les constantes a, b et c qui minimisent la somme des carrés des résidus.
  • Bonsoir Cédric

    Et si tu poses $z=y-c$, tu te retrouves avec $z=ax^b$ et en log : $\ln z=\ln a+b\ln x$ qui semble ne pas te poser de problème :)

    Alain
  • Le problème est que c est inconnu, donc aussi z et ln(z). Je ne suis pas sûr que la solution analytique soit simple.
  • Ce n'est pas de la grosse artillerie, mais tu peux trouver des solutions approchées en utilisant des schemas numeriques de modelisation non lineaire, implementé dans pas mal de logiciels de maths, genre octave ou Matlab par exemple.

    Ta fonction est quand meme relativement "simple", ca devrait marcher pas trop mal...
  • Bonsoir,

    Déja merci pour vos réponses !

    En effet, depuis mon post j'ai essayé de m'en remettre à un certain nombre de logiciels (gnuplot, R, .. ) qui permettent de faire des regressions à base de moindres carrés ou autres.

    Pour ceux que cela interessent, il peut être utile de replacer le problème dans son contexte (attention, ce qui suivre risque de piquer les yeux pour ceux qui n'aiment pas l'informatique ! :) ).
    Je cherche à ordonnancer les différentes sous-taches qui constituent un algorithme sur différents processeurs, or j'ai montré que je peux le faire de manière particulièrement efficace si je peux prévoir la durée des différentes sous-taches. En conclusion, oui je peux certainement initialiser (a,b,c) de manière grossière.

    Les algorithmiciens aiment à modéliser le cout (la complexité) d'une telle tache sous une forme telle que O(n^3) dans le cas d'un produit matriciel (avec n la taille des matrices carrées).
    En utilisant un historique des temps d'executions par rapport à chacune des tailles, il est assez légitime d'essayer de modéliser le temps de calcul sous une forme t(n) = an^b. L'intéret de la regression linéaire est que je peux mettre à jour ce modèle à chaque fois qu'une tache se termine (l'ordre de grandeur est la dizaine de milliseconde par tache ici).
    Malheureusement, cette modélisation t(n) = an^b est assez mauvaise pour des petits n, puisque le cout d'initialisation d'une tache n'est alors plus négligeable: c'est en fait ce surcout que modélise c.

    J'ai donc en fait plusieurs approches possibles :
    - mettre à jour le modèle à chaque fois qu'une tache se termine. C'est le plus élégant il faut l'admettre, mais ça exclu de lancer excel une fois par milliseconde sur un supercalculateur :)
    - attendre que le programme se termine, et faire une analyse "offline" d'une trace de l'execution de ce programme. Effectivement, je peux plus ou moins m'en remettre à des logiciels externes dans ce cas.

    Malheureusement il me semble aussi que ces logiciels (et les méthodes des moindres carrés en général) nécessite une certaine estimation des paramètres (a,b,c) initiaux. On vient de voir que 'c' est un "surcout" logiciel : je peux eventuellement en donner une estimation très grossière. Pour 'b', il est réaliste de dire que ce paramètre est typiquement entre 1/2 et 5 (très grossièrement là encore). Quant à 'a', on ne peut guère l'estimer (meme si on peut l'interpreter comme la "vitesse" du processeur).

    Maintenant, si on considère qu'en pratique, on aura 0 < c et que c est borné (je sais qu'il ne me faut pas 1s pour initialiser une tache), je me demande si il n'est pas envisageable de considérer la transformation naturelle que m'a suggeré AD : (y - c) = ax^b et de faire varier 'c' pour optimiser la correlation/minimiser les résidus en appliquant une regression linéaire. Etant donné que c est borné et que b est vraissemblablement entre 1/2 et 4 (typiquement), cette méthode semble ne semble-t-elle pas intuitivement converger ?

    Dans tous cas, je dois pouvoir faire quelques expériences pour voir si ça marche empiriquement ... c'est un peu du bricolage mais un informaticien ne s'arrete pas là ;)

    En esperant ne pas trop vous avoir assomé avec mes remarques naives ...

    Merci pour votre temps,
    Cédric
  • Bonjour

    De toute façon, avec cette forme de fonction à optimiser, on est inéluctablement soumis aux aléas de résolution d'équation non-linéaire.
    Les logiciels de statistique qui le font utilisent des méthodes bénéficiant d'un background considérable de connaissances et de résultats de recherches pour être suffisamment fiables (fiabilité qui n'est quand même pas garantie à cent pour cent).
    Vouloir le faire soi-même peut se justifier pour des raisons diverses, mais il n'y a alors que peu d'espoir de faire mieux que ce qui existe déjà.
    Par exemple, le principal avantage de la méthode "home made" (page jointe) est d'être relativement simple à programmer. Néanmoins, il ne faut pas espérer une convergence garantie dans tous les cas d'application
    :
    10139
  • slp aidez moi j'ai besoin d'une base de donnée de regression simple ou multiple
    ayant au moins 20 observations.
    merci
  • Bonjour,

    le document cité dans le post précédent :
    Régressions y=a+bx^c et Weibull
    a été mis à jour et intégré à un dossier plus étendu, intitulé : "Régressions et équations intégrales", accessible par le lien suivant :
    http://www.scribd.com/JJacquelin
  • Le document "Régression y=a+b.x^c et Weibull" se trouve à l'adresse suivante :
    http://www.les-mathematiques.net/phorum/read.php?13,489321,490239#msg-490239
  • Merci de contribuer à l'amélioration de notre savoir
  • Bonjour,

    l'ancien lien est désactivé. La nouvelle adresse est :
    http://www.scribd.com/JJacquelin/documents
  • SVP comment je dois procéder pour calculer la volatilité implicite via une procédure de moindres carrés non linéaires (minimiser les écarts au carré entre le prix de marché de l'option et le prix théorique selon la formule de Black et Scholes)?
Connectez-vous ou Inscrivez-vous pour répondre.