Paramètre lié pour l'ajustement de courbe non linéaireJ'essaie d'ajuster les données à des points pour plus de 1 000 échantillons. J'ai constaté que la fonction biexponentielle 5P donne les meilleurs résultats. Cependant, des échantillons identiques avec un ou deux points de données légèrement en dehors de la tendance rendent l'ajustement vraiment étrange. Pour une population typique, les paramètres de taux de décroissance sont d'environ 0,2, et pour ces échantillons, l'ajustement donne des résultats de l'ordre de 10. Les options de « limite de paramètre » et de limite d'itération augmentée dans l'ajustement non linéaire résolvent le problème. Cependant, il est impossible de le faire manuellement via l'interface graphique.
Existe-t-il un moyen de définir les limites des paramètres et le nombre d'itérations « globalement » (pour tous les échantillons) ?
J'ai également essayé l'option de script, mais je ne suis pas familier avec les scripts JSL et je n'ai pas réussi à afficher des résultats adaptés avec le script ci-dessous.
Names Default To Here( 1 );
dt = Current Data Table();
obj = Nonlinear( Y( :data ), X( :data Predictor ), By( :ID ) );
obj << Go;
obj << Parameter Bounds(
asympt( 14, 22 ),
scale1( 0, 100 ),
decayrate1( -0.2, 0.1 ),
scale2( -100, 0 ),
decayrate2( -0.2, 0.1 )
);
obj << Iteration Limit( 10000 );
obj << Finish;
G = obj << Get Estimates;
Show( G );
obj << Report View( "Summary" );
obj << get estimates;
Remarque : JSL d'origine déplacé dans une boîte d'affichage JSL par txnelson
Analyse et modélisation des données de baseRe : Limite de paramètre pour l'ajustement de courbe non linéaireSalut @eugur ,
Je vais vous montrer comment réaliser cela sans JSL, afin que vous compreniez le fonctionnement du processus (hormis la section de démarrage). Commencez par générer une colonne de formules contenant les valeurs de paramètres vides, qui pourront ensuite être modifiées pour trouver la meilleure adéquation à vos données dans la plateforme non linéaire. Commencez par créer la colonne de formules (j'ai ajouté un court script à cet effet, mais vous pouvez également le faire manuellement) :
dt=current data table();
dt<
<NEW column=""></NEW>
<P>Une fois prêt, ouvrez la plateforme non linéaire, placez votre colonne de formules dans le rôle « X, Formule de prédiction » et votre Y dans la section « Y », puis cliquez sur Exécuter. Une fois la plateforme démarrée, cliquez sur le bouton rouge, sélectionnez « Limites des paramètres » et indiquez les limites souhaitées.</P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><span class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><img src="https://us.v-cdn.net/6038925/uploads/images/76921iB16E7281FC0917D7/Ben_BarrIngh_0-1749874842390.png" role="button" title="Ben_BarrIngh_0-1749874842390.png" alt="Ben_BarrIngh_0-1749874842390.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/76922i0E0E2181BA64F9AD/Ben_BarrIngh_1-1749874859915.png" role="button" title="Ben_BarrIngh_1-1749874859915.png" alt="Ben_BarrIngh_1-1749874859915.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P> <BR /> <P>Vous pouvez ensuite exécuter la plate-forme non linéaire avec « Go » pour obtenir les paramètres estimés avec ces limites.</P> <BR /> <P>J'espère que cela aide !</P> <P>Merci,</P> <P>Ben</P> <BR /> <BR />
Re : Limite de paramètre pour l'ajustement de courbe non linéaireSalut Ben,
Merci pour votre réponse, mais je peux déjà le faire, et ce n'est pas ce que je demande. Comme je l'ai mentionné dans mon message, j'essaie d'ajuster les données à des points de plus de 1 000 échantillons, ce qui signifie plus de 1 000 courbes ajustées. Par conséquent, sur une plateforme non linéaire, je devrais également utiliser la colonne « ID » dans la section « Par ». (L'option « Grouper » ne fonctionne pas ici, alors qu'elle fonctionne pour « Ajuster la courbe ».)
Lorsque vous avez plusieurs échantillons, vous devez effectuer manuellement la procédure décrite (cliquez sur le bouton rouge, sélectionnez « Limites des paramètres » et indiquez les limites souhaitées) pour chaque échantillon. Cela peut convenir pour quelques échantillons, mais pas pour plus de 1 000. Je souhaite pouvoir définir simultanément les limites des paramètres et le nombre d'itérations pour plus de 1 000 échantillons.
Re : Limite de paramètre pour l'ajustement de courbe non linéaireSalut @eugur ,
Si vous n'utilisez pas le terme de groupe, les limites des paramètres définies sont définies globalement pour plus de 1 000 échantillons. (Le regroupement ne fonctionne pas en non-linéaire car le groupe lui-même doit être intégré à la formule de prédiction fournie à NL.) Votre script devrait fonctionner, mais il n'est pas nécessaire d'exécuter « Go » sur la deuxième ligne. C'est pourquoi les limites des paramètres ne sont pas ajoutées, car la plateforme est en cours d'exécution avant toute modification. Voici un exemple qui utilise l'outil « Tableau de données combinées » pour obtenir un rapport unique permettant de visualiser facilement l'évolution des valeurs dans chaque échantillon.
dt=current data table();
id_no=N Items(Associative Array(dt:Batch)<
<GET keys=""></GET>
<BR /> <BR />
Re : Limite de paramètre pour l'ajustement de courbe non linéaireFit Curve fonctionne mieux pour les cas avec de nombreux ID de courbe, mais si votre fonction d'ajustement n'est pas incluse dans la bibliothèque de fonctions préprogrammées de Fit Curve, alors Fit Nonlinear est nécessaire.
Comme vous l'avez remarqué, le regroupement fonctionne différemment dans Ajustement non linéaire et n'est pas l'option à utiliser dans ce cas. Je recommande de regrouper les courbes avec « Par ».
I prefer using the following syntax for this. Could you try this and let us know if it works:</CODE></P>
<PRE><CODE class=" language-jsl">Nonlinear(
Y( :data ),
X( :data predictor),
By( :ID ),
Parameter Bounds(
asympt( 14, 22 ),
scale1( 0, 100 ),
decayrate1( -0.2, 0.1 ),
scale2( -100, 0 ),
decayrate2( -0.2, 0.1 ) ),
Iteration Limit( 10000 )
);
Re : Limite de paramètre pour l'ajustement de courbe non linéaireMerci Ben,
Cela fonctionne fonctionnellement. Cependant, je pense que la plateforme non linéaire utilise un solveur différent. Près de 50 % des résultats d'ajustement ne sont pas acceptables.
Re : Limite de paramètre pour l'ajustement de courbe non linéaireSalut Christian,
Merci beaucoup pour votre réponse. Vous avez raison, Fit Curve semble bien plus efficace. La fonction d'ajustement que j'utilise ( Biexponentielle 5P ) est incluse dans la bibliothèque de fonctions préprogrammées de Fit Curve. Cependant, comme je l'ai mentionné précédemment, pour les mêmes échantillons (5 %), les résultats d'ajustement sont vraiment étranges, et c'est pourquoi j'ai voulu essayer l'option Fit Nonlinear. Cependant, même avec les limites, Fit Nonlinear ne peut ajuster avec précision qu'environ 50 % des échantillons.
Donc mes questions sont :
- Est-il possible d'ajouter des limites de paramètres pour la courbe d'ajustement ?
- Sinon, est-il possible d'utiliser les mêmes solveurs et paramètres pour Fit Nonlinear que pour Fit Curve ?
Re : Limite de paramètre pour l'ajustement de courbe non linéaireBonjour @eugur , vous pouvez essayer d'élargir votre limite d'itération ou même envisager d'utiliser une grille SSE pour voir s'il est même possible d'obtenir des valeurs de paramètres appropriées pour vos échantillons - vous pouvez également envisager d'exécuter différentes itérations à partir de l'option « Netwon » qui est utilisée par défaut.
La raison pour laquelle 50 % des résultats échouent individuellement est que lorsque tous les échantillons sont utilisés, l'effet sur l'ajustement global du modèle SSE est réduit, de sorte que la probabilité qu'un seul point provoque un échec est réduite, alors que lorsqu'un seul point est analysé, l'échec est plus probable.
Re : Limite de paramètre pour l'ajustement de courbe non linéaireSalut eugur,
1) Fit Curve ne prend pas en charge les limites de paramètres pour autant que je sache. 2) Fit Curve utilise un algorithme différent de Nonlinear, donc le même solveur ne peut pas être utilisé.
Ajustement Courbe et Ajustement Nonlinéaire semblent similaires en apparence, mais ils sont en réalité très différents. Ajustement Nonlinéaire est un solveur de régression des moindres carrés non linéaire traditionnel. Il offre une flexibilité maximale, mais nécessite également le plus de saisie manuelle. L'ajustement de régression non linéaire, contrairement aux régressions linéaires, est non déterministe ; il n'y a donc aucune garantie qu'un ensemble donné d'estimations initiales converge toujours, même pour des ensembles de données « similaires ». Ce problème n'est pas spécifique à JMP ; d'après mon expérience, la plupart des solveurs non linéaires nécessitent des ajustements manuels occasionnels, ce qui rend le traitement par lots de centaines d'ensembles de données un défi intéressant (mais pas impossible !). C'est là qu'intervient la plateforme Ajustement Courbe de JMP.
Fit Curve est un cas particulier doté d'une petite bibliothèque de fonctions prédéfinies optimisées. Il n'utilise pas de solveur de régression non linéaire général ; chaque fonction utilise un algorithme spécifique, écrit sur mesure pour elle. Cela le rend exceptionnellement rapide et plus susceptible de converger pour une grande variété de données. (Je ne suis ni développeur de logiciels ni mathématicien, veuillez donc m'excuser pour cette explication superficielle ; il ne s'agit que de mon interprétation de base !) À ma connaissance, Fit Curve ne prend pas en charge les bornes de paramètres, peut-être parce qu'elles ne sont généralement pas nécessaires. Si vous pensez que les bornes de paramètres sont nécessaires dans votre situation, nous revenons à la plateforme non linéaire. Ben a proposé de bonnes idées et il existe d'autres solutions à essayer avec les scripts non linéaires si Fit Curve ne fonctionne pas. Cependant, je suggère toujours d'essayer Fit Curve en premier, et de n'utiliser Fit Nonlinear qu'en solution de secours si cela ne fonctionne pas.
Voici quelques liens qui pourraient être intéressants :
Exemple de définition des limites de paramètres
Détails statistiques pour les modèles de courbes d'ajustement
Courbe non linéaire ou courbe d'ajustement : des résultats différents ? - Communauté d'utilisateurs JMP
-Chrétien