Forum Programmation.autre R : calcul de dérivée

Posté par  .
Étiquettes : aucune
0
15
déc.
2008
Bonjour,

je dispose d'une liste de 100 valeurs ordonnées. Le tracé de cette liste me donne donc logiquement une courbe décroissante. Je voudrais étudier la décroissance de cette liste (en fait, je dispose de 8000 listes ordonnées, et je voudrais comparer leurs pentes respectives). Assez naturellement, je souhaiterais obtenir la dérivée de ces listes (même si ce sont des valeurs discrètes, graphiquement c'est assez simple).

Ma liste est donc un vecteur de 100 valeurs. Je travaille avec R (avec lequel je débute) mais je ne comprends rien, et les ressources disponibles sur le ternet sont assez évasive (et la doc, pas super accessible à mon goût -- je suis pas un pro en stats).

Dans un premier temps, je ne comprends même pas la syntaxe de la fonction que je dois utiliser. Dans ma tête, une dérivée se calcule sur la différence en ordonnée entre trois valeurs proches en abscisse (avec un beau passage à la limite pour faire tendre cette différence vers 0, mais ici je travaille sur une liste discrète, donc la différence se fera sur trois valeurs consécutive, par pas de 1).

J'ai trouvé un exemple[1], que je parviens à reproduire :
> x
> numericDeriv(quote(x^2),"x")


Je ne comprends pas à quoi correspond le deuxième argument de la fonction. D'après la doc :
Usage:

numericDeriv(expr, theta, rho = parent.frame(), dir = 1)

Arguments:

expr: The expression to be differentiated. The value of this
expression should be a numeric vector.

theta: A character vector of names of numeric variables used in
'expr'.

rho: An environment containing all the variables needed to
evaluate 'expr'.

dir: A numeric vector of directions to use for the finite
differences.


Si vous pouviez m'éclairer, ça serait hyper super cool.

[1] http://tolstoy.newcastle.edu.au/R/help/05/11/15789.html
  • # Pas la bonne fonction a mon avis

    Posté par  . Évalué à 1.

    Je ne vais peut être pas t'aider beaucoup, mais je ne suis pas sûr que "numericDeriv" soit la fonction que tu veux utiliser. Au vu de ses arguments, cette fonction évalue la dérivée partielle d'une formule (x^2 dans ton exemple), en un certain nombre de points (contenus dans x dans ton exemple).

    Dans ton cas, si j'ai bien compris, tu ne connais pas la fonction sous-jacente à ta liste de points observés. Je ne sais pas comment répondre à ton problème par contre. Je te suggères d'envoyer ta question à la liste de diffusion R-help, les réponses sont en général assez rapides et les interlocuteurs compétents.
    • [^] # Re: Pas la bonne fonction a mon avis

      Posté par  . Évalué à 1.

      En fait, je pense même procéder autrement. Je vais traiter numériquement toutes mes valeurs en amont, pour calculer la pente de ma courbe entre chaque points, et passer ça comme données à R. Effectivement, la dérivée n'a l'air de se calculer que sur une fonction connue, et ma liste de points n'en est pas une (et je ne sais pas encore comment l'approximer par une fonction, je ne sais même pas si c'est possible).

      Comme je suis obligé de traiter mes résultats en amont de toutes façons (ne serait-ce que pour les formater en CSV pour que R puisse les traiter) je suis en train de rajouter ce bout de calcul. Ça me rappelle des cours d'algorithmique bien relou mais je m'en tire :)

      Toutefois, je ne bite toujours rien à R :)

      Merci !
  • # Mauvaise fonction

    Posté par  . Évalué à 1.

    Je ne suis pas un gourou R mais après lecture de l'aide en ligne, il me semble que la fonction numericDeriv ne fait pas ce que tu souhaites. Elle calcule les valeurs de dérivée d'une fonction connu (x² dans ton exemple) pour les valeurs de x fournit. Le second paramètre permet d'indiquer selon quelle variable tu dérives. Si j'ai bien compris, si tu indiquait

    x<-as.numeric(1:5)
    y<-as.numeric(10:20)
    numericDeriv(quote(x^3+y^2),c("x","y"))

    la dérivée serait selon x et y


    le forum http://forums.cirad.fr/logiciel-R/index.php des utilisateurs de R devrait pouvoir t'aider plus


    Désolé de ne pouvoir t'aider plus
    • [^] # Re: Mauvaise fonction

      Posté par  . Évalué à 1.

      Grillé, la prochaine fois, je ne ferais pas 2 choses en même temps
  • # Régression linéaire

    Posté par  . Évalué à 2.

    Mes cours de math sont loin, mais il me semble que ce que tu recherches s'apparente plutôt à une régression linéaire. Le coefficient directeur de la droite doit correspondre à la dérivée que tu recherches.
    Voir le calcul de a : R%C3%A9gression_lin%C3%A9aire (Désolé pour la gueule du lien.)
    • [^] # Re: Régression linéaire

      Posté par  (site web personnel) . Évalué à 2.

      Regression_lineaire ça marche aussi ;-)
    • [^] # Re: Régression linéaire

      Posté par  . Évalué à 3.

      En fait, la question n'est pas claire parce que le questionneur ne sait pas ce qu'il veut mesurer! On ne peut pas calculer la dérivée d'une série de points discrète (la fonction n'est pas dérivable, il y a des angles à chaque point). Il faut donc fitter une fonction en fonction de la tronche de la série (linéaire, exponentielle, quadratique, logistique...) et calculer la dérivée à partir de cette fonction. Si la fonction n'est pas linéaire, la dérivée dépend de l'endroit où on la prend évidemment; or la question parle juste de "calculer la dérivée", donc j'imagine qu'il s'agit d'un modèle linéaire.

      Si x est le vecteur des abscisses et y le vecteur des ordonnées,

      coef(lm(y ~ x))

      donne l'ordonnée à l'origine et la pente de la régression linéaire.

      Bref, le problème ne vient pas de R !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.