リストの列を合計する動的な数式列を生成するには JSL コードが必要ですこんにちは、みんな、
この質問は投稿に関連していますこここれにより、他の列のリストを合計するための非動的列がうまく生成されます。
私が抱えている問題は、他の N 列のリストがあり、それを動的式にするときに (JSL を使用して) 列を合計する方法です。
データ テーブルに列のリスト (ColList など) があり、ColList 内の N 個の項目を単純に合計する数式を含む新しい列を生成したいと考えています。 私が考えていたことは次のようなものです:
Names Default to Here (1);
dt = Open("$Sample_Data/2D Gaussian Process Example.jmp");<BR />ColList = dt << Get Column Names;
dt << New Column("Sum", Formula(Sum(ColList)));ColList は列のリストであるため、これは明らかに機能しません: ColList = {"col1", "col2", ..., "colN"}。 私は文字列を作成し、次のように Eval(Parse()) と Eval Insert() を使用しようとしました。
Names Default to Here (1);
dt = Current Data Table();
str = Eval Insert("dt << New Column(\!"Sum\!", Formula(Sum(Eval(ColList))));");
Eval(Parse(str));しかし、まだ運がありません。 JSL コードは数式を含む列を生成しますが、実際の数式ではなく Eval(ColList) が数式内に表示されるため、空の行値が含まれます。これは次のようになります。 Sum(:col1, :col2, :列3, ..., :colN)。
列のリスト {""} からコロン : を含む列への参照に移動する際に何が間違っているのかわかりません。
ご協力をよろしくお願いいたします。
ありがとう!、
DS
消費者および市場調査品質およびプロセスエンジニアリングRe: リストの列を合計する動的な数式列を生成するには JSL コードが必要ですやあ@MS 、
解決策をいただきまして誠にありがとうございます。 私が作業しているデータテーブルでは問題なく動作します。 私が扱うデータ テーブルの多くには他のデータ型があるため、考慮する必要があるのは数値連続データのみであるという事実を考慮して、少し変更する必要がありました。 とにかく、それは正しく動作し、多変量平均、標準偏差、および X 相関を正しく入力します。 それが重要であれば、私はJMP 16 EAを使用しています。
ご協力いただきありがとうございます! また、相関行列に関する元のリクエストの別のスレッドにも投稿したので、N 次元にスケールアップするコードから恩恵を受けることができれば幸いです。
ありがとう!、
DS
Re: リストの列を合計する動的な数式列を生成するには JSL コードが必要ですここで 1 つのアプローチを紹介します。 最初に Factors() を繰り返し構築し、次に 2 番目のステップで、X Correlations() の評価された引数を含む完全な Simulator() 式を作成します。
// Iteratively build the Factors expression
fs = Expr( Factors() );
For( i = 1, i <= N Items( ColList ), i++,
Insert Into(
fs,
Eval Expr( Expr( collist[i] ) << multivariate( Expr( MMean[i] ), Expr( MSD[i] ) ) )
)
);
// Make the complete Simulator expression
sim = Eval Expr(
sim_design << Simulator(
1,
Expr( Name Expr( fs ) ),
X Correlations( 1, Expr( ColList ), Expr( corr_mat ) ),
N Runs( 1e4 )
)
);
// Name Expr( sim ) // Run this line to show the expression in the log
// Launch Profiler and run the Simulator expression
sim_design = Profiler( Y( :Pred ) );
sim;
ただし、X 相関行列は (ほとんどの場合) 無視されるようです。 レポートにはゼロのみ。
また、プロファイラーに相関関係を手動で入力し、スクリプトを保存して実行すると、相関関係が失われます。 保存されたスクリプトにそれらが保存されている場合でも。 理由はわかりません。
Re: リストの列を合計する動的な数式列を生成するには JSL コードが必要ですやあ@MS 、
関連する質問があります(したがって別の投稿ではありません)。あなたのスクリプト方法が役立つことを願っています。 それはポストと関係がありますここ。 私が今やろうとしていることは、基本的に、プロファイル内のシミュレーターに情報を「フィード」するときに、元の投稿に含まれていたものを 4x4 相関行列から任意の NxN 行列に一般化することです。
他の元の投稿には、NxN 相関行列を生成できるスクリプトがあり、入力から「予測」列 (他の N 列の合計) を生成できます。 私が苦労しているのは次の点です。Simulator() 関数を呼び出すときに、次のものを渡す必要があります。
Simulator(state=0|1, , )
したがって、他の元の投稿から、因子の正しいリスト (「tpListY」) と相関行列 (「corr.mat」) を渡すための解決策、送信する呼び出しに Eval Insert() をラップする必要がある JSL コードが必要です。 Simulator() をプロファイラー レポートに送信し、それを中心に Eval(Parse()) を実行します。
ここでの課題は、これを正しく一般化して、Simulator() を呼び出して Factor を定義するときに、その ColList でこれを実行できるようにする方法です。
ColList は、ColList = {A、B、C、D、...} のようなもので、各列 A、B、C、... に関連付けられた平均と標準偏差があります。
各因子の正しい平均値と標準偏差を挿入するためにシミュレーターを呼び出すための正しい構文は何ですか? 例:
sim_design = Profiler(Y(:Pred), Invisible);
new = Eval Insert(
"sim_design << Simulator(
1,
Factors(
:A << mutlivariate(Mmean[1], MSD[1])),
:B << mutlivariate(Mmean[2], MSD[2])),
:C << mutlivariate(Mmean[3], MSD[3])), //etc. for the N columns in the made up table.
),
X Correlations(
1,
Eval(ColList),
Eval(corr_mat)
),
NRuns(1e6)
);");
Eval(Parse(new));元のデータ テーブルから、相関行列 (corr_mat) の生成に使用された列数 (N) を使用して 2 番目のモックアップが作成されます。 このモックアップ テーブルは、列を合計して :Pred 列を作成するもので、プロファイラーに送信するダミー関数として使用されます。 変数 Mmean と MSD は、N 列 A からその他の列の平均と標準偏差を含むベクトルです。
各列とそれに対応する平均を明示的に記述する必要がなく、任意の数の列を処理できるように、これをさらに自動化したいと考えています。
これについてはどうするのが良いでしょうか?
また、Eval(corr_mat) が X Correlations エントリに相関行列の値を実際に入力する際にも問題が発生しています。
添付のデータ テーブルとスクリプトは、私が何をしようとしているのかを理解するのに役立つはずです。
ありがとう!、
DS
更新、申し訳ありませんが間違ったファイルを追加しました。現在は正しいデータテーブルがあります。
Re: リストの列を合計する動的な数式列を生成するには JSL コードが必要ですやあ@MS 、
完璧な解決策ですね、ありがとう! シンプルでエレガントなのが気に入っています。
リストが {"A"、"B"、"C"、...} のような構造になっている場合、自分の方法で実行しても問題が依然として発生するため、コードを少し変更する必要がありました。 ただし、リストが {A、B、C、...} のような構造になっている場合、式は適切に評価されます。 2 つのリストは生成方法が少し異なり、引用符によって実際に Eval() が無効になります。
ありがとう!、
DS
Re: リストの列を合計する動的な数式列を生成するには JSL コードが必要ですこれを行うにはいくつかの方法があります。 私は、EvalExpr() を使用して目的の式の変数を作成し、次に NameExpr() を使用して (評価されていない) 式を Formula() 引数に転送することを好みます。
Names Default To Here( 1 );
dt = Open( "$Sample_Data/2D Gaussian Process Example.jmp" );
ColList = dt << Get Column Names;
F = Eval Expr( Sum( Expr( ColList ) ) );
dt << New Column( "Sum", Formula( Name Expr( F ) ) );