カテゴリごとにパラメータを拡張した非線形回帰<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />こんにちは
4 つの近似パラメータ A、B、C、D を使用して非線形モデルを使用して近似する必要があるデータセットがあります。 データセット (Y、列) は、列である「カテゴリ」を使用して分離する必要があります。 したがって、各一意の「カテゴリ」の Y は一意のデータ セットになります。
すべてのデータを当てはめて、パラメーター A、B、C、D を見つける必要があります。ただし、A、B は「カテゴリー」間で異なる可能性がある一方で、すべての「カテゴリー」にわたるすべてのデータセットに対して一意の C および D が必要であるという条件が必要です。
このために、モデルの列を作成してパラメータ C、D を作成し、A と BI については「カテゴリに展開、列を選択」をチェックしてパラメータを作成し、列に「カテゴリ」を選択して非線形回帰フィットを実行します。 。 すべてのカテゴリで最適な C と D が得られ、カテゴリ全体で異なる A と B が得られました。
私の質問は次のとおりです。すべてのカテゴリにわたってユニークな C と D をどのように見つけますか? 各データセットに対応するデータセットを適合させ、各セットのC1、D1、C2、D2などを見つけて、後で中央値/平均またはその他のものを取得しますか?
それとも、C と D の値の範囲を見つけて C と D 内に細かい点を作成し、すべてのデータセットを再度当てはめて、誤差が制限内に収まるまでさらに細かくしていきますか?
やるべきことを確実に実行したいので、その方法を知る必要があります。
ありがとう
ビノイ
Re: カテゴリごとにパラメータを拡張した非線形回帰遅れてごめんなさい。 もう終わったと思ったのに!
私の前回の投稿では、共通の式を示していますBそしてベータおよび条件パラメータカテゴリーレベル。 他に何か要りますか? 私の最初の返信のスクリプトは、そのような式の構築を自動化します。 モデルの観点から他に何が必要になるのか理解できません。
どのようにして非線形プラットフォームはそのような問題を解決しますか(パラメータを推定します)? それは、数値最適化手順そして損失関数監視するために。 与えられたものを使用します開始値次に、損失関数 (最小化) の結果を改善するためにそれらを変更します。 デフォルトの損失関数は次のとおりです。二乗誤差の合計、 または最小二乗。いくつかの変化の尺度を監視して、いつであるかを判断します。収束達成されて停止します。
Re: カテゴリごとにパラメータを拡張した非線形回帰こんにちは、
私が尋ねたこの質問に関する最新情報はありますか?
ありがとう
ビノイ
Re: カテゴリごとにパラメータを拡張した非線形回帰こんにちは、
私は手動で行うこの方法を知っています。 手動で行うのは非常に簡単であることは理解しています。 ただし、より大きなシステムの一部としてスクリプトを自動化する必要があるため、必要です。
お時間と労力をありがとうございました。
ビノイ
Re: カテゴリごとにパラメータを拡張した非線形回帰素晴らしい!!! まるで魔法のようにうまくいきました。 これは私の以前の投稿に対するほぼ答えです (元の投稿とは少し異なります)。
お時間とスクリプトをありがとうございました。
さて、ボーナスの質問です(実際には私の最初の質問です) 
この非線形回帰フィットでは、すべてのカテゴリーで同じままである 2 つのパラメーター B とベータがありますが、P と R0 はそれらのカテゴリー間で異なります。 ここでは、B とベータがカテゴリ間でどのように変化するかを方程式で指定していないため、JMP はどのようにしてすべてのカテゴリに適した最適な B とベータを見つけるのでしょうか? 使用されているアルゴリズムは何ですか?
ありがとう
ビノイ
Re: カテゴリごとにパラメータを拡張した非線形回帰Jeff Perkinson があなたがやりたいことと似た例を指摘したので、前の返信に追加したいと思います。 必要なモデル式を作成するためのスクリプトが本当に必要かどうかはわかりません。 選択するヘルプ>サンプルデータライブラリを開きます。非線形の例フォルダーを開き、最後に藻類ミッチャーリッヒデータ表。 を開きます数式エディタとともにミッチャーリッヒカラム。 次のようになります。

この場合、あなたの場合と同様に、2つのパラメータアルファそしてベータ条件付きです処理。
作成したデータのモックアップを開いて選択しますコル>新しい列... 電話しますモデルそして追加します式列のプロパティ。 モデル式を作成するために使用する前に、パラメーターを作成します。 クリックしますテーブルの列左上をクリックして選択しますパラメーター。 クリックします新しいパラメータ。 ..そして入力してくださいB名前に開始値を指定します。 2をクリックしてから、わかりました。 私が作成しますベータ= 0同じやり方で。 のBそしてベータパラメータは無条件であり、その値はすべてのカテゴリに共通です。
他の 2 つのパラメータは異なります。 クリックします新しいパラメータ、 入力R0名前については、 2開始値として を選択し、列を選択してカテゴリに展開します。 クリックしますわかりましたそして、カテゴリーカラム。 これで、一意のパラメータができましたR0カテゴリごとに。 私も同じことをしますPパラメータ。
パラメーターのリストとテーブル列のリストを切り替えながら式を構築して、次の式を作成します。

パラメーター リストでグループ化されたパラメーターをクリックすると、エディターによって Match(...) 式が自動的に挿入されます。 したがって、カテゴリごとに B が 1 つ、ベータが 1 つ、R0 と P が 1 つずつ存在します。
最初の例 Algae でこのアプローチを使用すると、次の式が得られます。

このモデルは、元のパラメータ化とまったく同じ推定値を非線形で生成します。
私たちがあなたの質問を誤解した可能性があることをご理解ください。 スクリプトは強力ですが、必ずしも必要というわけではありません。
Re: カテゴリごとにパラメータを拡張した非線形回帰私はこの問題を解決するために 3 つの原則を使用しました。 今は簡単そうに見えますが、正しくやるまでにいくつかの厄介な間違ったスタートがありました。 モデルの式をリバースエンジニアリングし、問題を小さな問題に分割し、徹底的にソリューションを構築しました。 指定された名前を持つ 3 つのデータ列が存在すると仮定します。 列名が実行間で変更される場合は、カスタム ダイアログを追加する必要がありますが、任意の数のカテゴリに対応します。 多数のカテゴリがある場合に非線形がモデルを解決できるかどうかはわかりません。また、開始値のリストを準備し、私の例を使用して固有の値を使用することもできます。
データテーブルはありませんが、私が持っていると思われるもの(Category、rRelax、tStress列)のモックアップは機能しました。
/* これらの列が存在することを前提とするか、カスタム ダイアログを作成してそれらをスクリプト変数に割り当てます。
カテゴリー
リラックス
tストレス
*/
// すべてのカテゴリを検索します
カテゴリー# = :カテゴリー<<値の取得;
// 式を使って内側から外側へ式を構築します
一致式 p# =一致式 r0# =エクスプレッション(マッチ( :カテゴリー) ) ;
パラメータリスト# =リスト( B = 2 、ベータ= 0 ) ;
// すべてのカテゴリを反復処理します
のために( c = 1 、 c <= N 個のアイテム(カテゴリー# ) 、 c ++、
// カテゴリ固有の R0 パラメータを作成します
評価(
解析する(
代わりの(
"Insert Into( パラメータリスト#, Expr( Name( \!"R0_ccc\!" ) = 2 ) )" 、
「CC」 、
カテゴリー# [ c 】
)
)
) ;
に挿入(一致式 r0# 、カテゴリー# [ c 】 ) ;
評価(
解析する(
代わりの(
"Insert Into( match expr r0#, Expr( Name( \!"R0_ccc\!" ))))」 、
「CC」 、
カテゴリー# [ c 】
)
)
) ;
// カテゴリ固有の P パラメータを作成します
評価(
解析する(
代わりの(
"Insert Into( パラメータリスト#, Expr( Name( \!"P_ccc\!" ) = 2 ) )" 、
「CC」 、
カテゴリー# [ c 】
)
)
) ;
に挿入(一致式 p# 、カテゴリー# [ c 】 ) ;
評価(
解析する(
代わりの(
"Insert Into( match expr p#, Expr( Name( \!"P_ccc\!" ))))」 、
「CC」 、
カテゴリー# [ c 】
)
)
) ;
) ;
// 一般的なモデル式に代入
式の式# =代わりの(
エクスプレッション(パラメータ( ll 、うーん/ ( 1 + B * ( :リラックス/ : tストレス) ^ベータ+ ppp ) ) ) 、
エクスプレッション( ll ) 、
パラメータリスト# 、
エクスプレッション(うーん) 、
名前の説明(一致式 r0# ) 、
エクスプレッション( ppp ) 、
名前の説明(一致式 p# )
) ;
// モデル列の式を設定します
評価(
代わりの(
エクスプレッション(現在のデータテーブル() <<新しい列( "モデル" 、式(ふふふ) ) ) 、
エクスプレッション(ふふふ) 、
名前の説明(式の式# )
)
) ;
Re: カテゴリごとにパラメータを拡張した非線形回帰こんにちは、
返信いただきありがとうございます。 私はマニュアルを一通り読みました。 それでも探していたものは得られませんでした。
私は現在、この非線形フィッティングをスクリプト化しようとしていますが、いくつかの問題に直面しています。 助けが要る。 ここで問題を繰り返します。
4 つのフィット パラメーターを持つモデルによってフィットする必要があるデータがあります。 各カテゴリの適合は互いに独立していません。 上記の投稿で示した 2 つの近似パラメーター、B とベータは一意である必要があります。つまり、回帰近似はすべてのカテゴリに対して一意の B とベータを抽出します。 一方、他の 2 つのパラメータ P と R0 はカテゴリによって異なります。
JMP インターフェイスは次のようになります。

ここで、これを JSL でコーディングする必要があります。
以下を実行すると、4 つの一意のパラメータをすべて取得できることがわかりました。
dt << New Column("モデル", Numeric, Continuous, Formula( Parameter( {B = 5, beta = 0.25, P = 10, R0 = 10}, R0 / (1 + B * (:Name( "tRelax( s)" ) / :Name( "tStress(s)" )) ^ beta) + P )));
しかし、これは私が望んでいることではありません。 また、「グループ化」機能は抽出が独立している場合にのみ役立つため、使用したくありません。
数式をコピーするときに生成されたコードを以下に示します。
パラメータ(
{B = 2、ベータ = 0、
名前( "R0_Category_D03_01_-1.8_100" ) = 2,
名前( "R0_Category_D03_01_-1.8_1000" ) = 3、
名前( "R0_Category_D03_01_-1.8_10000" ) = 3、
名前( "R0_Category_D03_01_-1.8_158" ) = 3、
名前( "R0_Category_D03_01_-1.8_1580" ) = 3、
名前( "P_Category_D03_01_-1.8_100" ) = 0、
名前( "P_Category_D03_01_-1.8_1000" ) = 1、
名前( "P_Category_D03_01_-1.8_10000" ) = 1、
名前( "P_Category_D03_01_-1.8_158" ) = 0、
名前( "P_Category_D03_01_-1.8_251" ) = 0},
Exp( -B * (:Name( "tR" ) / :Name( "tS" )) ^ beta ) *
Match( :カテゴリ,
"D03_01_-1.8_100", 名前( "R0_Category_D03_01_-1.8_100" ),
"D03_01_-1.8_1000", 名前( "R0_Category_D03_01_-1.8_1000" ),
"D03_01_-1.8_10000", 名前( "R0_Category_D03_01_-1.8_10000" ),
"D03_01_-1.8_158", 名前( "R0_Category_D03_01_-1.8_158" ),
"D10_05_-2.6_6310", 名前( "R0_Category_D10_05_-2.6_6310" )
) + 一致( :カテゴリ,
"D03_01_-1.8_100", 名前( "P_Category_D03_01_-1.8_100" ),
"D03_01_-1.8_1000", 名前( "P_Category_D03_01_-1.8_1000" ),
"D03_01_-1.8_10000", 名前( "P_Category_D03_01_-1.8_10000" ),
"D03_01_-1.8_158", 名前( "P_Category_D03_01_-1.8_158" ),
"D10_05_-2.6_6310", 名前( "P_Category_D10_05_-2.6_6310" )
)
)
これを自動化する必要があるため、このままでは使用できません。
「カテゴリ」列から P_XXX と R0_XXX の配列を作成できます。
これらの P と R0 のそれぞれに関連する配列を作成し、数式で使用することを考えましたが、うまくいきませんでした。
もちろん、この数式を作成した後、列とデータに対して非線形回帰フィットを実行する必要があります。
誰かこれのコーディングを手伝ってくれませんか?
ありがとう
ビノイ
Re: カテゴリごとにパラメータを拡張した非線形回帰ビノイ、
モデルの適合性と適合の背後にある統計を把握するには、[ブック] > [特殊モデル] の [ヘルプ] セクションにアクセスするとよいでしょう。非線形近似は 105 ページから始まります。近似をグループ化するための Michael Anderson の提案には、個々のカテゴリがどのように近似されるかが表示され、組み合わせた近似のグラフも表示されます。ヘルプの例を以下に示します。独自のパラメータ セットを使用することもできます。これについては第 7 章で説明します。統計セクションは第 7 章の 152 ページから始まります。

Re: カテゴリごとにパラメータを拡張した非線形回帰こんにちは、
返信いただきありがとうございます。
もっと明確に言うと。 私はやりたいことを実現する方法を知っています。 どのように行われているのか知りたいです。
以下に示す例では、B とベータは質問で尋ねられた C と D に対応しますが、P は A や B のようなパラメータであり、カテゴリ間で変化する可能性があります。
以下は、実行中のフィッティングのスクリーンショットです。パラメータとして B と beta はすべてのカテゴリで CONSTANT のままですが、P はカテゴリ間で変化する可能性があるパラメータです。
問題は、どのようにしてすべてのカテゴリで最高の B とベータを獲得できるかということです。 最初にカテゴリごとに異なる B とベータを検出し、すべてのカテゴリに十分な最適な B とベータを取得するためにいくつかの統計を実行しますか? もしそうなら、使用された統計は何ですか。
ありがとう
ビノイ

Re: カテゴリごとにパラメータを拡張した非線形回帰非線形プラットフォームでグループ化変数を使用したいようですね。X 変数と Y 変数をプラットフォームの適切なフィールドに入力し、「カテゴリ」列を「グループ」フィールドに入力します。その後モデルをフィッティングすると、各グループの結果が計算されます。したがって、カテゴリが 4 つある場合は、係数が 4 セットある 4 つのモデルが得られます。
[画像がありません]