我尝试使用来自https://github.com/twitter/AnomalyDetection AnomalyDetectionTs()
的{{1}} library(AnomalyDetection)
和https://www.r-bloggers.com/anomaly-detection-in-r/
在我的数据上。在我的示例数据中,在绘图上有非常摆动的值而没有下降曲线(或像图案一样缓慢下降),而不是它的模式。这个功能对我不起作用。函数检测到的所有异常点都是正确值和正常值。
我的示例数据: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
如何通过填充最合适的值来修复这些值?将它们平滑以绘制靠近它们周围的图案,并且在修复这些值之后所有数据的总值仍然相同。
我的额外问题是:你有什么想法找到它的模式吗?我可以告诉你更多信息。非常感谢你的帮助。
答案 0 :(得分:2)
这是一个可能的解决方案。
使用这种方法,我得到了你正在寻找的点,以及其他一些点 - 从极低值到极高值的过渡点。你或许可以过滤掉那些。
<强>代码强>
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")