【问题标题】:Detecting drastic changes of values检测值的剧烈变化
【发布时间】:2013-11-21 09:03:24
【问题描述】:

我有一个时间序列,我想找出值是否发生剧烈变化。例如我有一个时间序列:

1,3,5,2,4,3,2,5,6,1,3,2,4,10,15,20,24,34,40

在这个值为 10 的示例中,时间序列开始发生剧烈变化。如何检测到这种变化?

我所做的是将当前值与过去的第三个值进行比较,如果变化超过五个,那么集合就会发生剧烈变化,但我认为没有最好的方法。

您知道这可能是完成这项工作的更好方法吗?

编辑

我有一个时间序列,我想注意斜率(在这张图片中)是否开始快速上升

【问题讨论】:

  • 我的意思是如果集合中的某些值与其他值完全不同。在我的示例中,大多数值在 1 到 5 之间,但从 10 开始在 15-20-24-34-40 开始增加

标签: r math statistics


【解决方案1】:
ts <- c(1,3,5,2,4,3,2,5,6,1,3,2,4,10,15,20,24,34,40)
#shows elements where difference between x and x + lagth element is greater than 10 
diffts <- diff(ts)

rollingwindow <- 5

# option 1
avgslope1 <- vector(mode = "numeric", length = (length(ts)-rollingwindow))
for ( i in 1 : (length(ts)-rollingwindow))
{
  avgslope1[i] <- round(mean(ts[i:(i+rollingwindow)]),2)
}


#option 2
avgslope2 <- vector(mode = "numeric", length = (length(ts)-rollingwindow))
for ( i in 1 : (length(diffts)-rollingwindow))
{
  avgslope2[i] <- round(mean(diffts[i:(i+rollingwindow)]),2)
}

avgslope1 是 5 个值的滚动平均值。如果您运行ts[1 + which.max(diff(avgslope1))],您将获得接下来五个值的平均值变化最大的值。同样,ts[1 + which.max(diff(avgslope2))] 返回值的平均变化在接下来的 5 个元素中最高的元素。

> avgslope1
 [1]  3.00  3.17  3.50  3.67  3.50  3.33  3.17  3.50  4.33  5.83  9.00 12.50 17.83 23.83
> avgslope2
 [1]  0.17  0.33  0.17 -0.17 -0.17 -0.17  0.33  0.83  1.50  3.17  3.50  5.33  6.00  0.00
> ts
 [1]  1  3  5  2  4  3  2  5  6  1  3  2  4 10 15 20 24 34 40

【讨论】:

  • 感谢您的回答。实际上我的时间序列的长度是相对的。每一秒后,一个值被添加到系列中,我不知道,值是多少。我只有一个来检测系列的大变化
  • 您需要更具体地了解“大变化”。例如,您可以从 avgslope 向量中获取最大值,这意味着超过 5 个连续值的最大增长。
  • 你能再解释一下吗?如果我从 avgslop 中取最大值,我怎么能注意到一个值或一组值与其他值不同。在我的示例中,10-15-20--24-34-401-3-5-2-4-2-5-6-1-3-2-4 不同
  • 已编辑答案。但是您确实需要更好地定义“差异/大变化”。
  • 非常感谢您的回答,我已经测试了您的想法,我认为这是我的答案,如果我的时间序列中有另一个值范围,例如10-15-20--24-34-40,那么滚动平均值的结果不止一个,但如果我只有1-3-5-2-4-2-5-6-1-3-2-4 这样的范围,则滚动平均值总是小于 1。我也编辑了我的帖子
猜你喜欢
  • 1970-01-01
  • 2020-07-26
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 2011-11-24
相关资源
最近更新 更多