2015-12-17 29 views
6

你们是否有一个想法如何处理在血压曲线发现文物/异常的问题?我的目标是编写一个程序,找出每个人工制品的开始和结束。这里有不同文物的一些例子中,绿地面积是正确的血压曲线,红色的是人工制品,也需要检测:的R - 迫近发现血压异常曲线/文物

enter image description here

enter image description here

enter image description here

这是一个整体的血压曲线的例子: enter image description here

我的第一个想法是计算意思是从整条曲线和许多曲线的短时间间隔中找出它们的不同之处。但血压变化很大,我认为这不会奏效,因为它会发现太多不存在的“人造物”。

感谢您的输入!

编辑:这里有两个例子文物的一些数据:

Artefact1

Artefact2

+0

你可以包含一些数据,以便我们可以尝试找到一个实用的解决方案? – David

+1

谢谢你的想法! @David我刚刚添加了一些数据到我原来的帖子。感谢您的有趣链接,我会检查一下! – Borsi

+1

此处插入[CrossValidated](http://stats.stackexchange.com),这是一个针对对统计,机器学习,数据分析,数据挖掘和数据可视化感兴趣的人的问答网站。这个“R”问题也将在那里讨论。 – C8H10N4O2

回答

3

没有任何数据存在只是把你指向对不同方法的选项。

首先(无需知道您的数据,这总是一个巨大的缺点),我会指向Markov switching models,可以使用HiddenMarkov包装或HMM包装进行分析。 (不幸的是,第一个链接描述的RHmm -package不再保留)

你可能会发现它很值得去查看Twitter的outlier detection

此外,还有很多博客文章研究变化点检测或政权变化。我发现this R-bloggers blog发布很有帮助。它是指CPM -package,它的全称是“顺序和批处理变化中的参数和非参数方法”,该BCP -package(“分析贝叶斯变点问题的”),以及ECP -package(“非参数多多变量数据的变点分析“)。由于您没有多元数据,您可能需要考虑前两项。

这能帮助你入门吗?

0

我可以提供一个不使用任何统计算法的图形化答案。根据你的数据,我观察到“异常”序列似乎呈现恒定的部分,或者相反,非常高的变化。研究衍生工具,并设定此衍生工具的限制可能会起作用。这是一个解决方法:

require(forecast) 
test=c(df2$BP) 
test=ma(test, order=50) 
test=test[complete.cases(test)] 
which <- ma(0+abs(diff(test))>1, order=10)>0.1 
abnormal=test; abnormal[!which]<-NA 
plot(x=1:NROW(test), y=test, type='l') 
lines(x=1:NROW(test), y=abnormal, col='red') 

它的作用:首先用移动平均值“平滑”数据,以防止检测到微小变化。然后应用“差异”函数(微分)并测试它是否大于1(根据舒缓幅度手动调整该值)。那么,为了得到一个没有微小间隙的整个“阻塞”异常序列,我们再次对布尔值应用一个平滑处理,并且测试它优于0.1以更好地掌握该区域的边界。最终,我用红色重叠了斑点部分。

enter image description here

这适用于一种类型的异常。对于另一种类型,您可以在导数上构成一个低阈值,反之,并使用平滑的调整参数。