你好,
有什么方法可以检测 JMP 中超过 3 个标准偏差的异常值?
我应该说我熟悉“探索异常值”选项以及“Levey Jennings”控制图。但是,除了 3SD,还有其他方法可以检测异常值吗?
谢谢,
氖
我的第二个公式应该显示 > 3 SD 的值包含错误。因此它不起作用。 您必须将“*”替换为 *
因此,为了获得值,正确的公式是:
If(:Data > Col Mean(:Data) + Col Std Dev(:Data) * 3,
:数据,
.
)
只是一个简单的附录@托马斯1回复。 如果您有严重的异常值,则 Col Std Dev 可能会非常大,并且可能会使平均值产生偏差。
另一种方法是使用中值 + k* 伪 sigma 作为筛选上限,使用中值 - k* 伪 sigma 作为筛选下限。
这是名为 weight 的列的列公式。 对于原始数据,有时分位数 0.85 和 0.15 用于计算伪 sigma,其中 6 作为 ps 的乘数。
Local( {ps},
ps = (Col Quantile( :weight, 0.75 ) - Col Quantile( :weight, 0.25 )) / 1.349;
If(
:weight > Col Quantile( :weight, 0.5 ) + 5 * ps, 1,
:weight < Col Quantile( :weight, 0.5 ) - 5 * ps, -1,
0
);
)如果您正在编写脚本,则分发平台会计算稳健均值和稳健标准差。这是一个获取这些值的简单脚本。
Names Default To Here(1);
dt = Open( "$sample_data/Big class.jmp");
dist = dt << Distribution(
Continuous Distribution(
Column( :height ),
Quantiles( 0 ),
Horizontal Layout( 1 ),
Histogram( 0 ),
Vertical( 0 ),
Outlier Box Plot( 0 ),
Customize Summary Statistics(
Trimmed Mean( 1 ),
Robust Mean( 1 ),
Robust Std Dev( 1 ),
Set Alpha Level( 0.05 )
)
)
);
snames = report(dist)["Summary Statistics"][TableBox(1)][StringColBox(1)] << get;
svalues= report(dist)["Summary Statistics"][TableBox(1)][NumberColBox(1)] << get;
stats = Associative Array(snames, svalues); //cretea a keyed list
r_xb = stats["Robust Mean"];
r_sd = stats["Robust Standard Deviation"];
show(r_xb, r_sd);
//now use r_xb + <4|5|6> * r_sd and r_xb - <4|5|6> * r_sd for screening limits
@NeF写道:
你好,
有什么方法可以检测 JMP 中超过 3 个标准偏差的异常值?
我应该说我熟悉“探索异常值”选项以及“Levey Jennings”控制图。但是,除了 3SD,还有其他方法可以检测异常值吗?
谢谢,
氖
这可以通过使用公式创建一个新的公式列来解决:
If(:Data > Col Mean(:Data) + Col Std Dev(:Data) * 3,
1、
0
)
数据列是您的源列。
如果您想要 vaules > 3SDs,则公式为:
If(:Data > Col Mean(:Data) + Col Std Dev(:Data) * 3,
:数据,
“。”
)