gpt4 book ai didi

R : How to detect and fix abnormal values on plot?

转载 作者:行者123 更新时间:2023-12-04 16:09:46 26 4
gpt4 key购买 nike

我尝试使用来自 https://github.com/twitter/AnomalyDetectionlibrary(AnomalyDetection)AnomalyDetectionTs()https://www.r-bloggers.com/anomaly-detection-in-r/在我的数据上。在我的示例数据中,有非常摆动的值,曲线下降(或像模式一样缓慢下降)比其模式应有的多。这个功能对我不起作用。该函数检测到的所有异常点都是正确的和正常的值。

这是函数的结果:enter image description here

我的示例数据:https://raw.githubusercontent.com/ieatbaozi/R-Practicing/master/example.csv

df <- read.csv(url("https://raw.githubusercontent.com/ieatbaozi/R-Practicing/master/example.csv"),header = TRUE,stringsAsFactors = FALSE)
df$DateTime <- as.POSIXct(df$DateTime)

library(AnomalyDetection)
ADtest <- AnomalyDetectionTs(df, max_anoms=0.1, direction='both', plot=TRUE)
ADtest$plot

这是我的预期结果: enter image description here如何检测那些异常数据?

如何通过填充最合适的值来修复这些值?平滑它们以绘制接近它们周围的图案,并且在修复这些值后所有数据的总值仍然相同。

我的额外问题是:您是否知道找到它的模式?我可以给你更多的信息吗?非常感谢您的帮助。

最佳答案

这是一个可能的解决方案。

  1. 计算每个点周围小窗口的平均值(滚动平均值)
  2. 计算实际值与局部平均值之间的差异。
  3. 计算第 2 步中所有差异的标准差。
  4. 将与局部平均值相差超过 X 个标准差的点标记为异常值。

使用这种方法,我得到了您正在寻找的点以及其他一些点 - 从非常低的值到非常高的值过渡的点。您也许可以过滤掉那些。

代码

library(zoo)        ## For rolling mean function

WindowSize = 5
HalfWidth = (WindowSize-1)/2

SD = sqrt(mean((rollmean(df$Val, WindowSize ) -
df$Val[-c(1:HalfWidth, (nrow(df)+1-(1:HalfWidth)))])^2))
Out = which(abs(rollmean(df$Val, WindowSize ) -
df$Val[-c(1:HalfWidth, (nrow(df)+1-(1:HalfWidth)))]) > 2.95*SD) + 2

plot(df, type="l")
points(df[Out,], pch=16, col="red")

Time series plot

关于R : How to detect and fix abnormal values on plot?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44713124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com