Minimisation de fonction

Questions sur les fonctions statistiques de R

Modérateur : Groupe des modérateurs

Jacques VESLOT
Messages : 13
Enregistré le : 04 Mai 2005, 07:20

Minimisation de fonction

Messagepar Jacques VESLOT » 19 Jan 2006, 12:04

Bonjour,

Nous travaillons actuellement sur un modèle et utilisons la fonction nlm() pour estimer les paramètres minimisant une fonction "vraisemblance", qui est en fait l'équivalent à une constante près de -log(V).

Les temps de calcul nous semblant plutôt longs et la fonction nlm() "explosant" régulièrement, je voulais savoir si quelqu'un avait utilisé une autre fonction de minimisation, peut-être plus performante.

Mon code est celui-ci :

Code : Tout sélectionner

param <- nlm(f = vraisemblance, p = param, sexe=sexe,
    iterlim = 1000, stepmax = 1000, gradtol = 1e-6, steptol = 1e-6)


où vraisemblance() est une fonction de param et de sexe, qui fait intervenir dans son déroulement d'autres fonctions et des objets de l'environnement global.

Bonne journée,

Jacques

François Bonnot
Messages : 461
Enregistré le : 10 Nov 2004, 15:19
Contact :

Messagepar François Bonnot » 19 Jan 2006, 14:18

Bonjour,
J'utilise fréquemment nlm exatement dans le même objectif (minimisation de -log(vraisemblance) de différentes loi, par ex Binomiale, Poisson, Gamma) et avec presque la même syntaxe. En général ça marche assez bien mais la convergence et le nombre d'itérations dépendent beaucoup des paramètres de départ (et aussi de l'adéquation du modèle). Je n'ai pas connaissance d'autres fonctions aussi générales. J'ai eu l'occasion de discuter avec d'autres utilisateurs de R qui font eux aussi leurs minimisations avec nlm.

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 19 Jan 2006, 17:33

Bonjour,

Je pense que tu veux parler de -log(V) et non de V elle-même ?

Si je me rappelle bien, nous avons été confrontés à ce problème dans les premières versions des fonctions negbin et betabin du package aod, qui ajustent respectivement des modèles glm pour des lois binomiales négatives ou bétabinomiales. Matthieu (Lesnoff) a préféré passer à l'utilisation de la fonction optim. Elle dispose de nombreux réglages qui ne sont pas anodins en termes de vitesse de convergence, voire de convergence tout court ! La paramétrisation du modèle est également très importante (un même modèle pouvant souvent être écrit de différentes manières), et Matthieu a testé différentes solutions avant de trouver quelque chose de stable (ce qui est le cas avec les versions actuelles des fcts).

Il y a aussi une version S4 de optim: mle, avec une interface plus sophistiquée (disponible dans la distribution standard de R, dans le package stats4).

Dans les versions récentes de R (à partir de 2.2.0, je crois) est aussi disponible la fct nlminb qui est censée résoudre des problèmes de convergence rencontrés avec optim. C'est une contribution de Douglas Bates, le "maître" des modèles non linéaires et auteur des packages nlme et lme4.

Tu trouveras dans les archives de R-Help de nombreuses discussions sur ces différentes fonctions.

Amicalement,

Renaud

Jacques VESLOT
Messages : 13
Enregistré le : 04 Mai 2005, 07:20

Messagepar Jacques VESLOT » 20 Jan 2006, 05:36

Merci François et Renaud,

Ce que tu me dis, François, me rassure...
Je vais regarder, Renaud, les fonctions que tu m'as indiquées.

Nous avons essayé de soulager nos fonctions en éliminant toutes les boucles ou presque et en travaillant sur des tableaux.

Mais, même en réduisant, dans un premier temps, le nombre de paramètres à estimer et en appliquant le modèle sur des données lissées - ceci pour obtenir des valeurs de départ correctes - nous récoltons des sorties plus que douteuses de -logV et des paramètres.

Amicalement,

Jacques

Matthieu Lesnoff
Messages : 118
Enregistré le : 29 Nov 2004, 12:41

optim

Messagepar Matthieu Lesnoff » 20 Jan 2006, 13:59

Comme l'a dit Renaud, dans le package aod ns sommes passes de nlm a optim car cela donnait de meilleurs resultats en general, mais pas dans 100 % des cas. D'ailleurs, d'apres les qq essais que nous ayons faits, il semble que le 100 % n'existe pas ds le domaine de l'optimisation (que je ne connais que tres peu).

Dans betabin() et negbin(), nous avons retenu l'option "Nelder-Mead" comme defaut (mais on peut en choisir une autre simplement en le specifiant dans les arguments). J'ai eu une petite discussion avec Venables qui me demandait pourquoi ns avions retenu cette option et qui en preconisait d'autres. Pourtant cette option nous est apparue **de loin** la +robuste meme si elle n'est peut etre pas optimale pour les puristes.

J'ai mis 2 exemples d'utilisation d'optim dans la rubrique Script de GuR (correspondant au code simplifie de betabin et negbin du package aod).

Il serait tres interessant que qqun teste la fonction ecrite par D Bates dont parlait Renaud. C'est peut etre un "must". Personnellement pas eu le temps de regarder.

Matthieu

Jacques VESLOT
Messages : 13
Enregistré le : 04 Mai 2005, 07:20

Messagepar Jacques VESLOT » 23 Jan 2006, 07:46

Merci Matthieu,

Nous avons lancé sur 3 pécés notre optimisation avec optim(), nlm() et nlminb(), pour voir...

On vous dira ce que ça donne.

Amicalement,

Jacques

Sireau Aurélien
Messages : 9
Enregistré le : 05 Juin 2006, 08:01

Messagepar Sireau Aurélien » 13 Juin 2006, 14:32

Sujet intéressant,

pouvez vous me dire comment les fonctions nlm et nlminb fonctionnent. En effet, selon la quantité qu'on leur donne en entrée (log(V) ou V pour la fonction de vraisemblance, le vecteur p différents), l'algoritme ne renvoit pas du tout les mêmes valeurs...
Comment utiliser aux mieux ces fonctions si l'on connait à peu près l'ordre de grandeur des résultats que l'on doit obtenir ?
Merci d'avance pour vos éclairssements
Cordialement
Aurélien Sireau

Matthieu Lesnoff
Messages : 118
Enregistré le : 29 Nov 2004, 12:41

Messagepar Matthieu Lesnoff » 14 Juin 2006, 06:49

pouvez vous me dire comment les fonctions nlm et nlminb fonctionnent.


Il y a deja pas mal de choses dans les aides des fonctions, avec des exemples qui permettent de comprendre comment utiliser les fonctions. Je viens aussi de mettre a jour un fichier d'exemples dans la rubrique Scripts du forum GuR. Le fichier glm0.R contient un exemple d'estimation d'un glim simple avec optim, nlm et nlminb. Personnellement, je n'utilise pas mle (qui en fait utilise optim) car je n'ai pas trop vu l'interet par rapport a une utilsation directe d'optim.

Comment utiliser aux mieux ces fonctions si l'on connait à peu près l'ordre de grandeur des résultats que l'on doit obtenir ?
Cordialement


Il suffit de definir les parametres initiaux (ex : argument par dans optim) proche des valeurs attendues.

Good luck

Matthieu

Michael Kalouche
Messages : 6
Enregistré le : 11 Mar 2009, 18:26

Messagepar Michael Kalouche » 24 Mar 2009, 21:04

Bonjour,

Cette discussion m'intéresse vivement puisque je cherche à utiliser nlm() pour trouver les paramètres d'une gaussienne par le biais d'une variante de l'algorithme EM.

Je cherche donc à minimiser, de manière itérative, l'opposé de ma log-vraisemblance.

Mes résultats sont loin d'être satisfaisants : mon programme me rend des valeurs à chaque fois différentes selon mon paramètre initial et il se comporte pour le moins bizarrement ...(à valeurs extrêmes, celui-ci ne réagit comme il devrait).

En fait, une des raisons qui me fait douter de la pertinence de la méthode est la nécessité de donner une condition initiale à nlm() : en ce qui me concerne, la valeur la moins incohérente selon moi est celle du paramètre courant (celui sur lequel on prend l'espérance conditionnelle). De plus, sachant que l'algorithme EM est censé s'arrêter lorsque l'espérance conditionnelle n'évolue plus, je ne sais pas quelle tolérance donner à ce niveau là, puisque si je travaille uniquement avec des égalités, mon programme s'arrête rarement de tourner ...

Peut-être auriez-vous des idées concernant ce type d'applications ? (je ne sais pas si l'explication de mon problème est compréhensible en l'état : je peux détailler les étapes "traditionnelles" de EM...)

D'avance un grand merci

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 25 Mar 2009, 07:53

Bonjour,

Commencer un nouveau post en donnant un exemple reproductible des pbs que vous rencontrez (code et données).

Renaud


Retourner vers « Archives : Fonctions statistiques »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité