JSL は列の適切な参照を支援しますこんにちは、みんな、
JSL を使用してコマンド <
私が苦労しているコードのセクションは次のとおりです。
report_of_interest[Number Col Box( 8 )] << Simulate(
NBSnum,
Random Seed( RSnum ),
Out( Eval( YCols ) ),
In( :Simulated Y )
);
コードのそのセクションを実行すると、次のエラーが表示されます。スイッチアウトする列が見つかりません。次に、切り替える列を選択するウィンドウが表示されます。
report_of_interest は、Simulate コマンドを送信しているレポート ウィンドウです。 具体的には、レポートの見積り列である NumberColBox(8) に対してです。 NBSnum と RSnum は、実行するブートストラップ サンプルの数とランダム シード変数です。 問題は、Simulate( ) コマンドの Out( ) 内の列の名前です。 In( ) 列は、シミュレートされたデータ列に好きな名前を付けることができるので問題ありませんが、Out( ) オプションの列は、本当に名前を変更したい列でも何でもありません。 この場合、シミュレートされたデータをデータ テーブルに保存し、列の名前を「Simulated Y」に変更して、Simulate コマンドで必要に応じて In(:Simulated Y) として参照できるようにします。
コードの前半で、ユーザーはモデリングの応答列となる列を選択するように求められます。これは YCols です。多くの場合、プラットフォームで列を処理する場合は、単に Eval(YCols) として指定できます。それは問題なく受け入れられます。たとえば、次のようになります。
fm = avdt << Fit Model(
Y( Eval( YCols ) ),
Validation( :Validation ),
Effects( :Null Factor, Eval( XCols ) ),
Personality( "Generalized Regression" ),
Run( Fit( Estimation Method( Forward Selection ), Validation Method( Validation Column ) ) )
);
Y( ) 列に対して適合モデルを正しく実行します。 ただし、Simulate( ) コマンドは、列をスコープ付き列として参照させたいと考えています。たとえば、:My Column To Model のようにしたいと思います。
列の名前が「My Column To Model」であるとします。そのため、変数 YCols と Eval(YCols) は両方とも次の {"My Column To Model"} を返します。 シミュレート コマンドをレポートに送信するときは、次のようなスコープ付き列名が必要です。
report_of_interest[Number Col Box( 8 )] << Simulate(
NBSnum,
Random Seed( RSnum ),
Out( :My Column To Model ),
In( :Simulated Y )
);
問題は、モデル化している列が変更される可能性があるため、名前が変更されることです。列の名前を常に :YData のような固定名に変更したくないことです。 YCols のような変数を操作したいのですが、中置コロン演算子 (:) と YCols のような変数を操作して Simulate( ) コマンドの正しい列参照を取得する方法がわかりません。
Column(dt, name)、Column(dt, name)、Column(number)、Parse(":"||char(Column(avdt, Eval(YCols))))、Parse(":" として試してみました||Eval(YCols)[1])、どれも機能しません。 これらはすべて上記と同じエラーとなり、イン/アウトを入れ替える列を選択するための新しいウィンドウが開き、私が行おうとしている自動化が無効になります。
ご協力をよろしくお願いいたします。
ありがとう!、
DS
高度な統計モデリング自動化とスクリプト作成基本的なデータ分析とモデリングウィンドウズRe: JSL が列を適切に参照するのに役立ちます考えられる解決策を 1 つ見つけましたが、それは確かに効率的ではなく、かなり面倒です。 もっと良い解決策があると思いますので、誰かが私を助けてくれることを願っています。
コマンドを送信する文字列をJSLで構築し、Eval(Parse())を使用して実際に実行すると、機能することがわかりました。 繰り返しますが、これは面倒で効率的ではありませんが、機能します。
str = Eval Insert(
"report_of_interest[Number Col Box( 8 )] << Simulate(
NBSnum,
Random Seed( RSnum ),
Out("
);
str2 = Eval Insert( " ),
In( :Simulated Y )
)" );
Eval( Parse( str || ":" || Char( Eval( YCols )[1] ) || str2 ) );奇妙な解決策ですが、誰かがより良い解決策を共有できることを願っています。
ありがとう!、
DS
Re: JSL が列を適切に参照するのに役立ちますこのようなことにも問題があります。これは最適な解決策ではないかもしれませんが、次のコードは希望どおりの処理を実行するはずです。*編集* 同様の方法がすでに見つかったようですね。=)
Eval(
Parse(
"\[report_of_interest[Number Col Box( 8 )] << Simulate(
NBSnum,
Random Seed( RSnum ),
Out( ]\"
|| YCols[1] || "\[ ),
In( :Simulated Y )
);]\"
)
);
Re: JSL が列を適切に参照するのに役立ちます列参照のリストを作成する必要があり、Eval が機能しない場合は、通常、式を作成してから Eval(Substitute()) を使用します。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
cols = {"height", "weight"};
obj = Fit Model(
Y(:weight),
Effects(:age, :sex, :height),
Personality("Generalized Regression"),
Generalized Distribution("Normal"),
Run(
Fit(
Estimation Method(Lasso(Adaptive)),
Validation Method(AICc)
)
)
);
obj << (fit[1] << Save Simulation Formula);
rpt = Report(obj);
out_expr = Expr(Out());
For Each({colname}, cols,
Insert Into(out_expr, Name Expr(AsColumn(dt, colname)));
);
show(out_expr);
Eval(Substitute(
Expr(dtlst = rpt["Parameter Estimates for Original Predictors"][Number Col Box("Prob > ChiSquare")] <<SIMULATE></SIMULATE>Re: JSL が列を適切に参照するのに役立ちますこんにちは@mmarchandTSIそして@jthi 、
この問題を解決する方法についてのフィードバックとアイデアをありがとうございます。 JMP/JSL に関する同じ問題を解決する複数の異なる方法があることには、それほど驚くべきではありません。 このソフトウェアの素晴らしい点の 1 つは、 それでも、「より単純な」解決策が不可能であることは興味深いと思います。 助かりました!
ありがとう、
DS