如何在DataFrame中检测偏离滑动均值超过threshold*s.d.的异常值?
标记滑动统计量下的异常值
嘿,你已经搞定了滑动均值和标准差的计算,接下来找出异常值就简单啦!咱们直接用你已经生成的mean和sd列来做判断:
步骤1:定义异常值阈值
首先确定一个阈值(常用2或3倍标准差,可按需调整):
threshold <- 2 # 比如改成3就是3倍标准差规则
步骤2:标记异常值
新增一列outlier,用逻辑值标记每个数据点是否为异常值——判断规则是当前值与滑动均值的绝对差超过 threshold 倍的滑动标准差:
df$outlier <- abs(df$value - df$mean) > threshold * df$sd
步骤3:筛选出异常值子集
如果需要单独查看所有异常值,直接筛选即可:
outlier_data <- df[df$outlier, ] print(outlier_data)
可选:可视化异常值(更直观)
要是想在时序图里一眼定位异常值,可以用ggplot2画出来:
library(ggplot2) ggplot(df, aes(x = timestamp, y = value)) + geom_line(color = "#2c3e50", linewidth = 0.8) + geom_point(aes(color = outlier), size = 2.5) + scale_color_manual(values = c("#95a5a6", "#e74c3c")) + # 正常点灰色,异常点红色 labs(title = "时序数据与异常值标记", x = "时间戳", y = "数值") + theme_minimal()
小提示
你用rollapply时设置了fill = "extend",这会让首尾的滑动统计量用边界值填充,确保每个数据点都有对应的均值和标准差,不会出现NA值影响判断~
内容的提问来源于stack exchange,提问作者Jatt
相关产品推荐
相关产品推荐

