R: работа c временными рядами

Есть временные ряды можно скачать по ссылки тут https://yadi.sk/d/ulzZFSaZGSx2Mg над которыми провожу тесты. Делаю бутсрап через библиотеку(boot), когда блоки двигаются(мешаются) то получается разрывы между блоками эти разрывы склеиваю с помощью своей функции (remove_diff) все разрывы получается склеить, НО самый первый блок не получается и остаётся разрыв. Вопрос что не так в моей функции (remove_diff) ?

# подключить
require("zoo")
require("tseries")
require("xts")
require("lubridate")
require("ggplot2")
require("np")
require("boot")

# функция, которая двигает блоки
remove_diff <- function(data, l_block){
  n_blocks <- as.integer(nrow(data)/l_block)
  block_end <- c((1:n_blocks) * l_block, nrow(data))
  
for (i in 1:(length(block_end) - 1)){dif_block <- data[block_end[i],2] - data[block_end[i]+1, 5]  
    
    data[(block_end[i] + 1):block_end[i + 1],2] <- data[(block_end[i] + 1):block_end[i + 1],2] + dif_block
    data[(block_end[i] + 1):block_end[i + 1],3] <- data[(block_end[i] + 1):block_end[i + 1],3] + dif_block
    data[(block_end[i] + 1):block_end[i + 1],4] <- data[(block_end[i] + 1):block_end[i + 1],4] + dif_block
    data[(block_end[i] + 1):block_end[i + 1],5] <- data[(block_end[i] + 1):block_end[i + 1],5] + dif_block
  }
  return(data)
}


# загрузка данных
test2<-read.table("test5.txt", header = TRUE)
# перевод даты
test2$DATE<- as.POSIXct(test2$DATE, format ="%d.%m.%Y")

# блочный бутстрап
# ищем  размер блока
b_open <- b.star(test2$OPEN,round=TRUE)
b_high <- b.star(test2$HIGH,round=TRUE)
b_low <- b.star(test2$LOW,round=TRUE)
b_close <- b.star(test2$CLOSE,round=TRUE)

# размер блока(можно установить любой для теста)
bloc <- 20000

result = tsboot(test2$CLOSE, statistic=alpha, R=10, l = bloc, sim = "fixed", endcorr = TRUE)

# достаем индексы
indexes <- boot.array(result)[2,]
#Делаем перестановку ряда
test2_new <- test2[indexes,]
test2_new$DATE <- test2$DATE

# убираем разрывы
test2_new_diff <- remove_diff(test2_new, bloc)

# переводим в ts
test2_new_diff_ts<-xts(x = test2_new_diff[,c(-1)], order.by = test2_new_diff$DATE)

# строим график
autoplot(test2_new_diff_ts[,-c(1,2,3)])

Как убрать разрыв? Как убрать разрыв


Ответы (0 шт):