如何使用Rosner检验识别分布底部异常值?无opposite参数的处理
用Rosner检验识别分布底部异常值的方法
EnvStats包的rosnerTest函数本身没有类似Grubbs检验(outliers::grubbs.test)里的opposite = TRUE参数来直接指定检测分布底部的异常值,但可以通过数据取反的方式实现相同效果,具体步骤如下:
- 对原始数据取反:把原始数据中的每个值乘以-1,这样原本分布底部的最小值会变成取反后数据的最大值,符合
rosnerTest默认检测最大异常值的逻辑。 - 对取反后的数据运行Rosner检验。
- 将检验结果中的异常值位置对应回原始数据,得到分布底部的异常值。
代码示例
# 1. 对原始体重数据取反 neg_wtval <- -df_females$wtval # 2. 对取反后的数据执行Rosner检验,指定要检测的异常值数量k=15 test <- EnvStats::rosnerTest(neg_wtval, k = 15) # 3. 提取原始数据中分布底部的异常值 bottom_outliers <- df_females$wtval[test$all.stats$Obs.Num]
原理说明
Rosner检验的核心是检测偏离样本均值最远的观测值,默认优先找最大的那个。通过取反数据,原始数据里最小的观测值会变成取反后数据里最大的观测值,此时rosnerTest检测出的异常值,对应回原始数据就是分布底部的异常值,和Grubbs检验设置opposite = TRUE的效果一致。
内容的提问来源于stack exchange,提问作者Mirko
相关产品推荐
相关产品推荐

