我正在使用r尝试根据另一组数据中的趋势来分配事件发生的风险指数(基本上是机会)。我尝试了许多方法来取得成功,但是有很多不足之处。对于我的意思的示例,下面是要查看的数据示例:
set.seed(1234)
dates = seq.Date(as.Date("2010/1/1"), by = "month", length.out = 120)
event1 = c(runif(50,10,12), runif(30,100, 107), runif(length(dates) - 80, 60, 65))
event1[10] = 15
event1[25] = 30
event1[55] = 150
event1[70] = 130
event1[110] = 100
event2 = numeric(length(dates))
event2[30] = 1
event2[81] = 1
event2[112] = 1
plot(dates,event1, type = "l",ylim = c(0,150))
points(dates[event2 > 0],event2[event2 > 0]*50)
事件1和事件2随时间变化的图:
因此,在我的数据中,您会注意到: 1)事件1的平均值存在明显的不同 2)在这些水平上有一些峰远远超出了当地平均水平 3)事件2 可能在峰值之后发生(在这种情况下,3/5峰值之后是事件2的发生) 4)事件2通常在事件1达到峰值后的1-6个月内发生
我在任何时候分配风险指数的尝试都包括以下内容:
1)使用滚动平均值对数据进行平滑处理,并使用“ findpeaks”函数评估峰值后的风险。
问题:定义峰并不总是很清楚。如果标记了一个小峰,应该有某种方法来定义峰的大小
2)标准化窗口中的数据,以使区域的平均值不会影响风险,即:
normalize = (event1[t]-min[window])/(max[window]-min[window])
问题:取决于窗口的大小,如果窗口较小,则可能会使任何正斜率看起来像一个峰,而如果窗口较大,则可能无法达到目的。
3)看哪里:Event1 [t]> 2 * stdev [window] + Avg [window]
问题:这可以提供不错的结果,但是实际数据与平均数据之间存在很大的滞后性。
当前,我正在尝试找出一种方法来将这些过程中的一个或全部包含到最终错误计算中。最终结果应如下所示(对糟糕的绘画技巧感到抱歉): added risk index line
我确定有某种我不知道的解决此类问题的方法,但是经过数小时的谷歌搜索后,我认为我会在方法上寻求帮助/反馈。如果有人有任何想法,我很想听听他们!
谢谢