非線形フィット - 成功を確認する方法は?概要:
非線形フィットが成功したことを確認するにはどうすればよいですか?
(実際のデータは常に収束するとは限らず、自動化/テスト/製品の問題について手動で確認する必要がある場合があります。)
詳細:
非線形フィットが収束に失敗した後の応答をスクリプト化したいと考えています。適合しない場合は、別の方法で処理するか、最終的にはラベルを付けて手動で確認する必要があります。 (母集団をサンプリングしてから、部分ごとに非線形適合を行っています。通常、収束に失敗した場合、どこかにテストの問題がありました。実際には収束基準を緩めたくありません。)
(「失敗」メッセージ: 「失敗: 目的関数を減らすことができません」)

Numeric Derivatives Only からの変更されたスクリプト ([ヘルプ] > [スクリプト インデックス] > [<<非線形])
(現在 JMP 15.2.1 を実行中)
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?
理想。
成功または失敗を示す非線形フィット プラットフォームによって返される bool ステータス変数がどこかにある場合、それは成功を検証するための理想的な方法だと思います。
代替案 1。
また、データを集計または要約して、すべての:名前( 「ファンシー予測式」 )値はゼロです。(適合に失敗した場合、値は 0 のように見えます)。
代替案 2。
おそらく、XML をチェックして「失敗」メッセージを読み取る方法があります。
あなたの時間と配慮していただきありがとうございます。
-オーブリー
スクリプティングRe: 非線形フィット - 成功を確認するにはどうすればよいですか?これは、Alternative 2a (レポートから単語をスクレイピング) を使用したアプローチです。 最初の 2 行は実際の作業を行い、3 行目は情報をどう処理するかを示す単純な例です。この部分については、別のことを念頭に置いている可能性があります。
// 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: 非線形フィット - 成功を確認するにはどうすればよいですか?それでいい。ありがとうジェド!
Re: 非線形フィット - 成功を確認するにはどうすればよいですか?テキストが成功以外のものであるかどうかを確認する方が良いのではないでしょうか。
If( Not( Contains( alltext, "Converged" ) ),
// trap failure
,
// proceed after success
);
Re: 非線形フィット - 成功を確認するにはどうすればよいですか?あなたは私が向かっているところに近づいています。
私は一緒に働いてきました:
if (contains(alltext, "Failed"), caption ("Failed: Do additional action now ..."));キャッチオールとして、失敗の理由を具体的に処理するために、ケースステートメント(または複数の「if」を推測)をさらに追加することを検討しています。</CODE></P><P><CODE class=" language-jsl">
たとえば、この失敗の理由をキャッチした場合、反復回数を増やして再度実行できます。
contains(alltext, "Maximum Iteration Exceeded");
本当の動機は、「ほとんどの」部分が数値的アプローチで収束することですが、一部は分析が必要なようです。これを引き起こすために何が起こっているのかわかりません。収束基準?しかし、「修正」は、次のような数値導関数なしで再度実行することです。
nonlinear = dt << Nonlinear(
Y( :Name( "Random" ) ),
X( :Name("FancyPredictionFormula") ),
Expand Intermediate Formulas( 1 ),
Newton,
Finish,
Plot( 0 ),
Confidence Limits,
Save Estimates
);キャッチ後:
contains(alltext, "Cannot Decrease Objective Function");
Re: 非線形フィット - 成功を確認するにはどうすればよいですか?収束に失敗する通常の原因は、開始パラメーター値です。 多くの場合、ドメイン固有のヒューリスティックを使用して初期化するだけで十分です。