2017年に@Kevin_Andersonは、JSLと数式エディタにロバスト平均と標準偏差関数を計算する機能を追加してほしいという要望を提出しました。
2022年に@jthiによって、この願いの拡張版が提出されました。
正規化機能と堅牢な統計関数(および行列関数)を追加する
コメント付き:
@jthi さんは次のように書いています。これらのほとんどは既存の統計関数を使えば比較的簡単に実装できますが、JMPの標準機能として搭載される方がはるかに望ましいです(ネイティブ実装の方が高速になる可能性もあります)。私の意見では、これらは(他のすべての統計列関数と同様に)非常に便利で強力な関数です。
値の変動に対するロバストな推定値を決定するための別の関数:
MAD:中央絶対偏差。
https://en.wikipedia.org/wiki/Median_absolute_deviation

これは(*)によって決定できます。
- 値の中央値を計算する
- 値と中央値の差を計算する
看板を撤去する
中央値を計算する
列のMADを計算したい場合は、テーブル/集計プラットフォームを使用できます。

多くの場合、ユーザーは個々のグループごとにMADを計算したいと考えます。
しかし残念ながら、JSL にはまだCol MAD (値、グループ化)関数はありません。
一方、(*)の手順に従ってJSL経由でMADを「手動で」計算するのは非常に簡単です。
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
t0=hptime();
New Column( "MAD",
Formula( Col Median( Abs( :height - Col Median( :height, :sex ) ), :sex ) )
);
dt << run formulas();
show((hptime()-t0)/1000000)
しかし待ってください。Col Medianの中のコル中央値は恐ろしいように見えます。JMP がすべての行で値を何度も計算したらどうなるでしょうか?
これが事実かどうか確認してみましょう。データテーブルを大きくして(640万行)、検証してみましょう。
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
For Each( {i}, {1, 2},
dts = Repeat( {dt}, 400 );
dt = dt << Concatenate( dts, );
);
データテーブルが大きい場合、計算には数分かかります(JMP18.2.1)。
簡単なコツ:
計算を2つの計算に分割します。
- まず、グループ化された中央値を含む列を計算します。
- 次にMADを計算する
もう一つのトリック:
JMPの次期バージョンを待つべきでしょうか?
他にも裏技はありますか?
@hogi さんが書きました:
もう一つのトリック:
JMPの次期バージョンを待つべきでしょうか?
JMP19のEA版で試してみましたが、大幅に改善されています!
→数分ではなく、ほんの数秒で済む
素晴らしい : )