2017 年, @Kevin_Anderson提交了一个愿望,希望在 JSL 和公式编辑器中添加计算稳健均值和标准差函数的功能。
2022年, @jthi提交了该愿望的扩展版本:
添加归一化和稳健统计函数(以及矩阵函数)
附注:
@jthi写道:其中大部分功能其实都可以利用现有的统计函数轻松实现,但我更希望它们能作为 JMP 的常规功能(原生实现速度可能更快?)。在我看来,这些函数非常实用且功能强大(就像其他所有统计列函数一样)。
另一个用于确定数值变化稳健估计量的函数:
MAD:中位数绝对偏差。
https://en.wikipedia.org/wiki/Median_absolute_deviation

可通过以下方式确定(*):
- 计算这些值的中位数()
计算各数值与中位数之间的差值
- 移除标志
计算中位数
如果要计算某一列的平均绝对偏差 (MAD),可以使用表格/汇总平台:

用户通常希望计算各个组的平均绝对偏差 (MAD)。
但遗憾的是,JSL 中还没有列 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)
但是等等——列中位数内部的列中位数看起来很可怕——如果 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的下一个版本?
我刚刚用EA版本的JMP19试了一下——效果显著提升!
只需几秒钟,而不是几分钟
精彩的 : )