2016-01-12 2 views
0

У меня есть следующие данные:1Finding Сегментация во время серии ошибок

Lines <- "D1,Value 
1,20/11/2014 16:00,0.01 
2,20/11/2014 17:00,0.01 
3,20/11/2014 19:00,0.01 
4,20/11/2014 22:00,0.20 
5,20/11/2014 23:00,0.03" 

library(zoo) 
library(strucchange) 
ts1 <- read.csv(text = Lines, as.is = TRUE) 
z <- read.zoo(ts1, tz = "", format = "%d/%m/%Y %H:%M") 

я использую интерполяции для заполнения недостающих значений:

interp <- na.approx(z, xout = seq(start(z), end(z), "hours")) 

Я хотел бы найти сегменты (не более 2 сегментов) и сделать соответствующие строки для каждого сегмента:

interp1 <- as.ts(interp) 

Я получаю следующее сообщение об ошибке:

bp.interp1<- breakpoints(interp1 ~ 2) 
Error in terms.formula(formula, data = data) : 
    invalid model formula in ExtractVars 

Помимо даты были изменены

ответ

1

Пакет strucchange зависит от зоопарка, так что вам не нужно явно загрузить зоопарк. Вам не нужно read.table, если вы используете read.zoo, и нет необходимости преобразовывать временные ряды в объект "ts". Вам нужно указать формулу. См ?breakpoints

library(strucchange) 

# test input 
Lines <- "D1,Value 
1,20/11/2014 16:00,0.01 
2,20/11/2014 17:00,0.01 
3,20/11/2014 19:00,0.01 
4,20/11/2014 22:00,0.20 
5,20/11/2014 23:00,0.03" 
z <- read.zoo(text = Lines, tz = "", format = "%d/%m/%Y %H:%M", sep = ",") 

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

дает:

> bp 

     Optimal 2-segment partition: 

Call: 
breakpoints.formula(formula = z ~ 1, h = 2) 

Breakpoints at observation number: 
3 

Corresponding to breakdates: 
0.6 

Примечание: Для построения графика:

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

Большое спасибо @g. Grothendieck, есть ли способ добавить строки и точку разрыва к графику z? Я попробовал plot (z); <-breakpoints (z ~ 1, h = 2); линии (а); – Avi

+0

См. Добавленное примечание. –

Смежные вопросы