脚本? 非線形モデルの列式を複数の列に適用する列 1 に 2 つのパラメーターを持つモデル式があり、このモデルを 80 の異なるデータ列 (列 2 ~ 82) に適合させたいと考えています。各データ列には、それらの 2 つのパラメーターがカスタムフィットされています。 これを行う簡単な方法はありますか?
スクリプトを作成する必要がありますか?
Re: 脚本? 非線形モデルの列式を複数の列に適用する解決策としてこれに収束することになります:
名前のデフォルトは Here( 1 ) です。
dlg = 列ダイアログ(
Title( "非線形回帰" ),
yCol = Col List( "Y, レスポンス",
データ型(数値)、
最小列( 1 )
)、
xCol = Col List( "X, 予測式",
データ型(数値)、
最小列( 1 ),
最大列( 1 )
)
);
If( dlg["ボタン"] != 1,
Throw( "ユーザーがキャンセルしました" );
);
From( dlg ) を削除します。
評価リスト( dlg );
dt = 現在のデータ テーブル();
n 適合 = N 項目 ( yCol );
数式 = xCol[1] << 数式を取得します。
n parms = N Items( Arg( 式, 1 ) );
parm = J( n 個のフィット、2* n 個の parms、.);
clnmm={};
parmnm = Arg(式,1);
parclnm = As List(J(1,n parms));
For( i = 1, i<= n parms,i++,
parmnm[i]=Char(parmnm[i]);
parclnm[i]=Left(parmnm[i],Munger(parmnm[i],1,"=")-1);
);
For( f = 1, f <= n 適合, f++,
試す(
nl fit = dt << Nonlinear( Y( yCol[f] ), X( xCol[1] ), Newton, Numeric Derivatives Only (1), Finish, Go );
parm[f,[1,2]] = Transpose( Report( nl fit )["Solution"][NumberColBox(5)] << Get As Matrix );
parm[f,[3,4]] = Transpose( Report( nl fit )["Solution"][NumberColBox(6)] << Get As Matrix );
);
clmnm[f]=Column(yCol[f])< );
dt = As Table( parm );
dt<列 = 列 (1);
For( f = 1, f <= n 適合, f++,
col[f]=clmnm[f];
);
For( i = 1, i<= n parms,i++,
col = 列 (i+1);
col << Set Name(parclnm[i]||"Estimate");
col = 列 (i+1+n パラメーター);
col << Set Name(parclnm[i]||"ApproxStdError");
);
Re: 脚本? 非線形モデルの列式を複数の列に適用する私はそれを考え出した!
ありがとう!
Re: 脚本? 非線形モデルの列式を複数の列に適用するこの段階でエラーになる
parm[f,0] = Transpose( Report( nl fit )["Parameter Estimates"][NumberColBox(1)] << Get As Matrix );
Re: 脚本? 非線形モデルの列式を複数の列に適用するありがとう!
現在テスト中...
デバッグ時に次のエラーを受け取りました
'Subscript' 、Report( nl fit ) [/*####*/"Parameter Estimates"] のアクセスまたは評価で表示ボックスに添字を付けることはできません
@マークベイリー書きました:
この解決策は少しトリッキーです。 使用しているモデルが Fit Curve ライブラリに含まれていない場合にのみ機能します。 (そうである場合、Nonlinear は Fit Curve を起動します。これは、モデルが名前で指定されることを期待しますが、このスクリプトでは提供されません。) 実際のモデルはより複雑であるというあなたの主張に基づいて、私はそれがFit Model ライブラリにはなく、次のスクリプトを作成しました。
Names Default to Here( 1 );
dlg = Column Dialog(
Title( "Nonlinear Regression" ),
yCol = Col List( "Y, Response",
Data Type( Numeric ),
Min Col( 1 )
),
xCol = Col List( "X, Predictor Formula",
Data Type( Numeric ),
Min Col( 1 ),
Max Col( 1 )
)
);
If( dlg["Button"] != 1,
Throw( "User cancelled" );
);
Remove From( dlg );
Eval List( dlg );
dt = Current Data Table();
n fits = N Items( yCol );
formula = xCol[1] << Get Formula;
n parms = N Items( Arg( formula, 1 ) );
parm = J( n fits, n parms, . );
For( f = 1, f <= n fits, f++,
nl fit = dt << Nonlinear( Y( yCol[f] ), X( xCol[1] ), Newton, Finish );
parm[f,0] = Transpose( Report( nl fit )["Parameter Estimates"][NumberColBox(1)] << Get As Matrix );
);
As Table( parm );
最初に JMP データ テーブルを開き、次にこのスクリプトを開いて実行します。 すべての応答列 (この例では列 2 から 82) を選択し、はい、応答. モデル式のある列 (この例では列 1) をクリックし、 X、予測式、 。 次にクリックOK .
Re: 脚本? 非線形モデルの列式を複数の列に適用するこの解決策は少しトリッキーです。 使用しているモデルが Fit Curve ライブラリに含まれていない場合にのみ機能します。 (そうである場合、Nonlinear は Fit Curve を起動します。これは、モデルが名前で指定されることを期待しますが、このスクリプトでは提供されません。) 実際のモデルはより複雑であるというあなたの主張に基づいて、私はそれがFit Model ライブラリにはなく、次のスクリプトを作成しました。
Names Default to Here( 1 );
dlg = Column Dialog(
Title( "Nonlinear Regression" ),
yCol = Col List( "Y, Response",
Data Type( Numeric ),
Min Col( 1 )
),
xCol = Col List( "X, Predictor Formula",
Data Type( Numeric ),
Min Col( 1 ),
Max Col( 1 )
)
);
If( dlg["Button"] != 1,
Throw( "User cancelled" );
);
Remove From( dlg );
Eval List( dlg );
dt = Current Data Table();
n fits = N Items( yCol );
formula = xCol[1] << Get Formula;
n parms = N Items( Arg( formula, 1 ) );
parm = J( n fits, n parms, . );
For( f = 1, f <= n fits, f++,
nl fit = dt << Nonlinear( Y( yCol[f] ), X( xCol[1] ), Newton, Finish );
parm[f,0] = Transpose( Report( nl fit )["Parameter Estimates"][NumberColBox(1)] << Get As Matrix );
);
As Table( parm );
最初に JMP データ テーブルを開き、次にこのスクリプトを開いて実行します。 すべての応答列 (この例では列 2 から 82) を選択し、はい、応答. モデル式のある列 (この例では列 1) をクリックし、 X、予測式、 。 次にクリックOK .
Re: 脚本? 非線形モデルの列式を複数の列に適用するスクリプトなしで実行できますが、多くのクリックが必要になります。 非線形モデルを列式として既に設定していると仮定して、次の手順に従います。
- [テーブル] > [スタック] を選択します。
- すべての応答列 (この例では 2 ~ 82) を選択し、[スタック] をクリックします。
- 式をコピーするオプションが選択されていることを確認します。
- Response など、Data 列の名前を入力します。
- 曲線など、ラベル列の名前を入力します。
- [OK] をクリックします。
- [分析] > [特殊モデル] > [非線形] を選択します。
- 予測列 (この例では 83) を選択し、[X] をクリックします。
- モデル列 (この例では 1) を選択し、[Y] をクリックします。
- Curve 列を選択し、By をクリックします。
- [OK] をクリックします。
- ここで、各カーブに対して Go をクリックします。 (これは面倒な部分です。)
- 任意のパラメーター推定レポートを右クリックし、[結合データ テーブルの作成] を選択します。
このプロセスにより、すべてのパラメーター推定値を含む新しいデータ テーブルが得られます。
Re: 脚本? 非線形モデルの列式を複数の列に適用するマーク、
ありがとう。
確認に関するすべての質問への回答は「はい」です。
式は何でもかまいませんが、簡単にするために y = h*exp(-b*x^(0.65)) とし、h と b をパラメーターとし、x>0 とします。
実際の式はもっと複雑ですが、その余分な複雑さがソリューションに影響を与えることはありません。
Re: 脚本? 非線形モデルの列式を複数の列に適用するもう一度質問します。列 1 の式で表される非線形モデル ( f(X) ) は何ですか? 2つのパラメータは何ですか?
検証中: 予測子 (X) は最後の列で、列 1 の数式で使用されていますか?
検証中: 個々の回答 (Y) は列 2 ~ 82 にありますか?
検証: Y = f(X) を各 Y に個別に当てはめ、各 Y のパラメーター推定値を取得しますか?
Re: 脚本? 非線形モデルの列式を複数の列に適用するはい、予測変数が別の列に存在します。
必要に応じて、列 83 と呼ぶことができます。
そして、ターゲット出力は、列ごとに 2 つのパラメーターの最適な値と、関連付けられた信頼区間を示すテーブルになると思います。
Re: 脚本? 非線形モデルの列式を複数の列に適用する列 1 に式として格納されている非線形モデルは何ですか? この式は通常、予測変数の関数です。 予測子の値を保持するのはどの列ですか?
このケースが単純であれば、スクリプトを書くことができます。