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)。
一個簡單的技巧:
將計算拆分為兩個計算:
首先計算包含分組中位數的列
然後計算平均絕對偏差(MAD)。
另一個技巧:
- 等待JMP的下一個版本?
還有其他技巧嗎?
@hogi寫道:
另一個技巧:
- 等待JMP的下一個版本?
我剛剛用EA版的JMP19試了一下——效果顯著提升!
只需幾秒鐘,而不是幾分鐘
精彩的 : )