Ajustement non linéaire - Comment vérifier le succès ?Aperçu:
Comment puis-je vérifier qu'un ajustement non linéaire a réussi ?
(Les données réelles ne convergent pas toujours et peuvent nécessiter un examen manuel pour les problèmes d'automatisation/de test/de produit.)
Détail:
Je voudrais écrire une réponse après qu'un ajustement non linéaire ne converge pas.Si l'ajustement échoue, je dois traiter d'une autre manière et/ou éventuellement étiqueter pour examen manuel. (J'échantillonne une population, puis pour chaque partie, je fais un ajustement non linéaire.Généralement, si j'échoue à la convergence, il y avait un problème de test quelque part; Je ne veux pas vraiment assouplir les critères de convergence.)
(Message "Échec" : "Échec : impossible de réduire la fonction objective")

Script modifié de Dérivées numériques uniquement (Aide > Index des scripts > "<
(JMP 15.2.1 en cours d'exécution)
Names Default To Here( 1 );
dt = Open(
"$SAMPLE_DATA/Nonlinear Examples/US Population.jmp"
);
// Random, intentionally divergent, formula on this dataset
dt << New Column( "Random", Numeric, Formula( Random LogLogistic(5) ) );
dt << New Column( "FancyPredictionFormula",
Numeric,
Continuous,
Formula(
Parameter(
{Rth0 = 735, n = 0.5},
(:year / :pop) * ((1 - ((n - 1) * :pop * Rth0) / (:year
* (300 / :year) ^ n)) ^ (-1 / (n - 1)) - 1)
)
)
);
nonlinear = dt << Nonlinear(
Y( :Name( "Random" ) ),
X( :Name("FancyPredictionFormula") ),
Expand Intermediate Formulas( 1 ),
Numeric Derivatives Only( 1 ),
QuasiNewton SR1,
Interation Limit(50),
Finish,
Plot( 0 ),
Confidence Limits,
Save Estimates
);
// How to check if nonlinear fit succeeded?
Idéal.
S'il y a une variable d'état bool renvoyée par la plate-forme d'ajustement non linéaire quelque part indiquant le succès ou l'échec, ce serait la méthode idéale pour vérifier le succès, je pense.
Variante 1.
Je peux aussi tabuler ou faire un résumé des données pour voir si toutes les : Nom ( "FancyPredictionFormula" ) les valeurs sont nulles.(Les valeurs semblent être 0 si l'ajustement échoue).
Variante 2.
Il existe probablement un moyen de vérifier le XML et de lire le message "échec".
Merci pour votre temps et votre considération.
-Aubrey
ScriptRe : Ajustement non linéaire - Comment vérifier le succès ?Voici une approche utilisant l'alternative 2a (en grattant les mots du rapport). Les 2 premières lignes font le travail réel, et la troisième ligne est juste un exemple simple de ce qu'il faut faire avec les informations ; vous avez probablement autre chose en tête pour cette partie.
// How to check if nonlinear fit succeeded?
r = nonlinear << report;
alltext = r[Outline Box("Control Panel")] << get text;
if (contains(alltext, "Cannot Decrease"), caption ("Failed: Cannot Decrease ..."));Re : Ajustement non linéaire - Comment vérifier le succès ?Ça va le faire.Merci Djed !
Re : Ajustement non linéaire - Comment vérifier le succès ?Je me demande s'il est préférable de vérifier si le texte est autre chose qu'un succès :
If( Not( Contains( alltext, "Converged" ) ),
// trap failure
,
// proceed after success
);
Re : Ajustement non linéaire - Comment vérifier le succès ?Vous êtes plus proche de l'endroit où je me dirige avec elle.
J'ai travaillé avec :
if (contains(alltext, "Failed"), caption ("Failed: Do additional action now ..."));Comme un fourre-tout, mais j'envisage d'ajouter plus d'une déclaration de cas (ou je suppose plusieurs 'si'), pour gérer spécifiquement la raison de l'échec.</CODE></P><P><CODE class=" language-jsl">
par exemple, je peux exécuter à nouveau avec un nombre d'itérations plus élevé si j'attrape cette raison d'échec :
contains(alltext, "Maximum Iteration Exceeded");
La véritable motivation est que "la plupart" des parties convergeront avec une approche numérique, mais certaines semblent nécessiter une analyse.Je ne sais pas ce qui se passe pour causer cela.Critères de convergence?Mais la "solution" consiste à exécuter à nouveau sans dérivés numériques, quelque chose comme :
nonlinear = dt << Nonlinear(
Y( :Name( "Random" ) ),
X( :Name("FancyPredictionFormula") ),
Expand Intermediate Formulas( 1 ),
Newton,
Finish,
Plot( 0 ),
Confidence Limits,
Save Estimates
);Après avoir attrapé avec :
contains(alltext, "Cannot Decrease Objective Function");
Re : Ajustement non linéaire - Comment vérifier le succès ?Le coupable habituel derrière l'échec de la convergence est les valeurs des paramètres de départ. Il suffit souvent d'utiliser des heuristiques spécifiques au domaine pour les initialiser lorsqu'elles sont disponibles.