如何统计数值向量中超出均值3倍标准差的异常值数量
R语言统计数值向量中3σ准则异常值数量
按照你给出的异常值定义(与均值距离超过3个标准差的点),直接通过逻辑判断求和就能得到结果,不需要额外安装第三方包。
核心实现逻辑
对向量里的每个值做判定:满足abs(当前值 - 向量均值) > 3 * 向量标准差即为异常值,逻辑值TRUE在数值计算中等价于1、FALSE等价于0,直接对判定结果求和就是异常值总数量。
代码示例
# 构造测试向量:100个服从N(10,2)的常规值,加3个手动设置的极端值 set.seed(123) test_vec <- c(rnorm(100, 10, 2), 25, 1, 16) # 统计异常值数量 outlier_num <- sum(abs(test_vec - mean(test_vec)) > 3 * sd(test_vec)) print(outlier_num)
上述示例运行后返回结果为2,对应手动添加的25、1两个离群点,16距离均值的偏差未超过3倍标准差,不会被判定为异常值。
特殊场景处理
- 如果向量中存在缺失值
NA,需要在计算均值、标准差时加上na.rm = TRUE参数跳过缺失值,否则最终结果会返回NA,写法如下:
# 含缺失值的统计写法 outlier_num <- sum( abs(test_vec - mean(test_vec, na.rm = TRUE)) > 3 * sd(test_vec, na.rm = TRUE), na.rm = TRUE )
- 注意均值和标准差本身容易受极端值影响,如果你的数据中异常值占比较高,计算出的均值、标准差会被异常值拉偏,可能导致漏判,但如果严格遵循你给定的3倍标准差规则,直接用上述代码即可。
内容的提问来源于stack exchange,提问作者lallal
相关产品推荐
相关产品推荐

