2016-02-04 50 views
0

我有以下的时间序列:添加人工断点

Lines <- "Hour,PF 
0,14/01/2015 00:00,0.305 
1,14/01/2015 01:00,0.306 
2,14/01/2015 02:00,0.307 
3,14/01/2015 03:00,0.3081 
4,14/01/2015 04:00,0.3091 
5,14/01/2015 05:00,0.3101 
6,14/01/2015 06:00,0.3111 
7,14/01/2015 07:00,0.3122 
8,14/01/2015 08:00,0.455 
9,14/01/2015 09:00,0.7103 
10,14/01/2015 10:00,0.9656 
11,14/01/2015 11:00,1 
12,14/01/2015 12:00,0.9738 
13,14/01/2015 13:00,0.9476 
14,14/01/2015 14:00,0.9213 
15,14/01/2015 15:00,0.8951 
16,14/01/2015 16:00,0.8689 
17,14/01/2015 17:00,0.8427 
18,14/01/2015 18:00,0.6956 
19,14/01/2015 19:00,0.6006 
20,14/01/2015 20:00,0.5056 
21,14/01/2015 21:00,0.4106 
22,14/01/2015 22:00,0.3157 
23,14/01/2015 23:00,0.3157" 

library (zoo) 
library (strucchange) 

z <- read.zoo(text = Lines, tz = "", format = "%d/%m/%Y %H:%M", sep = ",") 

bp <- breakpoints(z ~ 1, h = 2) 

plot(z) 
abline(v = time(z)[bp$breakpoints]) 

The Breakpoints are at observation number: 
8 10 18 21 

现在假设我有相同的时间序列,但在观察数11 - 24小时营业,下落不明。我想定义Gap(在这种情况下= 24小时),并找到与前面示例中相关的断点,并在间隙开始和结束时添加2个附加断点。对于下面的时间序列中的断点将是:

8 10 12 13 18 21 

这里是时间序列的差距:

Lines <- "Hour,PF 
    0,14/01/2015 00:00,0.305 
    1,14/01/2015 01:00,0.306 
    2,14/01/2015 02:00,0.307 
    3,14/01/2015 03:00,0.3081 
    4,14/01/2015 04:00,0.3091 
    5,14/01/2015 05:00,0.3101 
    6,14/01/2015 06:00,0.3111 
    7,14/01/2015 07:00,0.3122 
    8,14/01/2015 08:00,0.455 
    9,14/01/2015 09:00,0.7103 
    10,14/01/2015 10:00,0.9656 
    11,14/01/2015 11:00,1   <--- 
    12,15/01/2015 12:00,0.9738  <--- GAP of 24 hours 
    13,15/01/2015 13:00,0.9476 
    14,15/01/2015 14:00,0.9213 
    15,15/01/2015 15:00,0.8951 
    16,15/01/2015 16:00,0.8689 
    17,15/01/2015 17:00,0.8427 
    18,15/01/2015 18:00,0.6956 
    19,15/01/2015 19:00,0.6006 
    20,15/01/2015 20:00,0.5056 
    21,15/01/2015 21:00,0.4106 
    22,15/01/2015 22:00,0.3157 
    23,15/01/2015 23:00,0.3157" 

回答

1

你的差距实际上是一整月(14/01至14/02)。

c(0,1)+which.max(diff(time(z))) # 12,13 

将返回您可以追加到您的折点的最大差距的指数。

注意:所述间隙的开始和结束是不12,13 11,12自中的R指数从1

+0

由于@fishtank启动时,该间隙仅仅是一个例子可能有一些多个间隙更大或小。我想获得每个差距的折点,然后我想找到每个段的拟合(线性回归)并跳过这些差距。找到最大差异将不是解决方案。 – Avi

+0

我不认为'断点'是用来识别“空白”的。所以这个例子的要点是你可以使用'diff(time(z))'来查找和评估(根据一些标准,例如超过24小时)你认为的“差距”。 – fishtank

+0

非常感谢。如果我想为缺口添加轮廓(在跳动和结束时)有没有办法做到这一点?我使用abline(v = time(z)[which.max(diff(time(z)))])但我不想使用which.max?我该怎么做? – Avi