ループ内の事前評価された統計 (Col Mean、Col Median)やあ、
JSLの複数の列のグループごとに標準偏差の平均と中央値を計算しようとしています。 私が使用しているデータ テーブルを以下に示し、添付します。 値の右側の列で正しい計算を確認しましたが、JSL 出力が正確に一致しません。 以下のコードは、両方の値のグループごとの標準偏差の平均を正しく計算しますが、中央値は最初の値についてのみ正しく計算します。 2 番目の値の中央値の結果は、最初の値に対して計算されたものとまったく同じです。 ループ内で平均値が正しく更新され、中央値が更新されない理由がわかりません。 これに関するヘルプは大歓迎です.JSLでこれを行うための最良の方法を教えてください.

言語:
For( i = 2, i < 4, i++,
N = Column Name( i );
Print( "i = " || Char( i ) );
Print( "Column Name = " || Char( Column Name( i ) ) );
Print( "Column Mean Std Dev by Group = " || Char( Col Mean( Col Std Dev( N, :Group ) ) ) );
Print( "Column Median Std Dev by Group = " || Char( Col Median( Col Std Dev( N, :Group ) ) ) );
);
JSL出力:
"i = 2"
"Column Name = Value 1"
"Column Mean Std Dev by Group = 3.9849040980727"
"Column Median Std Dev by Group = 3.60555127546399"
"i = 3"
"Column Name = Value 2"
"Column Mean Std Dev by Group = 5.14008843607314"
"Column Median Std Dev by Group = 3.60555127546399"
JMP Pro v16
ありがとう
分析スクリプティングRe: ループ内の事前評価された統計 (Col Mean、Col Median)ループすることもできますが、byVar では機能しない可能性がある関数 Col 関数の代わりに Summarize を使用してください。 これは 1 つのオプションです。
Names Default To Here(1);
dt = Current Data Table();
col_list = {"Value 1", "Value 2"};
For Each({col_name}, col_list,
Summarize(dt, groups = By(:Group), v_std = StdDev(Eval(col_name)));
Show(col_name, v_std);
Show(Mean(v_std));
Show(Median(v_std));
);
サマリー テーブルを使用できる他のオプションを次に示します (計算には 2 つの方法があります)。
Names Default To Here(1);
dt = Current Data Table();
col_list = {"Value 1", "Value 2"};
dt_summary = dt << Summary(
Group(:Group),
Std Dev(EvalList({col_list})),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0),
invisible
);
For Each({col_name}, col_list,
mea = Mean(dt_summary[0, col_name]);
med = Median(dt_summary[0, col_name]);
// or
mea1 = Col Mean(As Column(col_name));
med1 = Col Median(As Column(col_name));
Show(col_name, mea, med, mea1, med1);
);
Close(dt_summary, no save);
Re: ループ内の事前評価された統計 (Col Mean、Col Median)同意します。これはこれを処理する正しい方法のようです。 ただし、すべての列名を入力する必要があります。 列名を知らなくても多くの列に一般化する方法はありますか? これが、私のコードで For ループを使用する主な理由でした。
Re: ループ内の事前評価された統計 (Col Mean、Col Median)ここでは、要約がかなりうまく機能するはずです。
Names Default To Here(1);
dt = Current Data Table();
Summarize(dt, groups = By(:Group), v1_std = StdDev(:Value 1), v2_std = StdDev(:Value 2));
Show(groups, v1_std, v2_std);
Show(Mean(v1_std));
Show(Mean(v2_std));
Show(Median(v1_std));
Show(Median(v2_std));<BR /><BR />/*groups = {"A", "B", "C", "D"};<BR />v1_std = [3.60555127546399, 2.64575131106459, 3.60555127546399, 6.08276253029822];<BR />v2_std = [7.23417813807024, 8.9628864398325, 0.577350269189626, 3.78593889720018];<BR />Mean(v1_std) = 3.9849040980727;<BR />Mean(v2_std) = 5.14008843607314;<BR />Median(v1_std) = 3.60555127546399;<BR />Median(v2_std) = 5.51005851763521;*/Re: ループ内の事前評価された統計 (Col Mean、Col Median)この方法で計算を実行する理由は、各列のデータを個別にプロットし、計算された値をプロットの上限と下限に使用するスクリプトに結果をフィードしたいからです。
Re: ループ内の事前評価された統計 (Col Mean、Col Median)このような計算をループや数式で実行する理由はありますか? JMP は、何をしようとしているのかによっては、より適切なオプションとなる可能性のある要約 (表)、要約、および表を提供します。
ループについては、byVar を使用しているときに Col 関数をループできるかどうか (またはループする必要があるかどうか) はわかりません。
