我想使用R检测趋势曲线显着变化的日期。红点是我看到显着变化的时间点,应该将其检测出来。较小的波动应该忽略。
我尝试了breakpoints
函数,该函数可以找到虚线所示的日期。我看不到这些行与数据之间的关系。
图表中的示例数据:
structure(c(431.510725286867, 421.634186460535, 379.627938613016,
425.906255600274, -14.1367284804303, -384.10599618701, -611.193815166686,
-460.535003689942, -309.875390598749, -84.9820334889592, 217.330882967973,
437.111949107673, 738.919896124628, 752.79552200685, 804.851028725362,
757.869760812822, 1197.91301915761, 1567.88256933466, 1794.97067632374,
1644.31215300884, 1493.6528224525, 1268.75973855711, 968.432034953716,
743.503624686386, 510.63191994943), .Tsp = c(2016.66666666667,
2018.66666666667, 12), class = "ts")
答案 0 :(得分:0)
比较前向和后向有限差分,并过滤出较小的值。
明确地:计算∆( t )= x ( t +1)- x ( t )和∇( t )= x ( t +1)- x ( t ),则d( t )=Δ( t )-∇( t )= x ( t +1)- x ( t -1),并保持 t 为此| d ( t )| >ε,其中ε捕获了您所说的小波动。
在您的情况下, d = c(NA,-32.1、88.3, -486.3 ,70.1、142.9, 377.7 ,0.0, 74.2、77.4,-82.5、82.0, -287.9 ,38.2,-99.0, 487.0 ,-70.1,-142.9, -377.7 ,- 0.0,-74.2,-75.4、75.4,-7.9,NA)。对于t = c(4,7,13,13,19),恰好是您的4个红点,其绝对值大于ε= 200。
当然,可以更严格地选择ε= 200的阈值(在 d 的直方图上,面部跳跃值为200)。
您可能还想通过对几个点取平均值而不是上一个和下一个值来平滑波动: d n ( t < / em>)= x ( t + n )+ ... + x ( t + 1 )- x ( t -1)-...- x (< em> t -n)。