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)])
