Как я могу сделать поворотное окно/цикл (обратный период 30 дней/точек данных) при ранжировании данных с помощью base::rank
? Ниже показано, что функция apply.rolling
, похоже, не работает.apply.rolling window/loop с функцией ранжирования
Смотрите пример ниже:
# example data
require(xts)
set.seed(3)
A <- matrix(runif(900, max=30), ncol=3)
Data <- xts(A, Sys.Date()-300:1)
names(Data) <- c("C1", "C2", "C3")
Это приводит (только последние 7 дней/точек данных показаны):
2016-06-20 16.71131510 12.80074552 19.27525535
2016-06-21 22.92512330 25.11613536 17.45237229
2016-06-22 20.09403965 17.20945809 28.06481040
2016-06-23 28.68593738 4.84698272 18.36108782
2016-06-24 15.52956209 25.54946621 3.97892474
2016-06-25 25.76582707 18.14117193 8.17883282
2016-06-26 25.23925100 16.07418907 15.35118717
я выбираю только последние 30 точек данных:
rolldata30 <- tail(Data[,2:3], 30)
rollindex30 <- tail(Data[,1], 30)
Я ранжирую данные (последние 30 точек данных) вектора C2
и C3
base d по их первоначальным значениям. Таким образом, это период 2016-05-28 до 2016-6-26. Затем я создаю новый вектор, который вычисляет среднее значение из двух. factorx
показывает результат я заинтересован в
rank30 <- as.xts(apply(-rolldata30, 2, rank, na.last= "keep"))
factor <- cbind(rollindex30, global = rowMeans(rank30))
factorx <- last(factor)
Какие результаты в:.
2016-06-20 16.711315 14.5
2016-06-21 22.925123 9.5
2016-06-22 20.094040 9.0
2016-06-23 28.685937 19.0
2016-06-24 15.529562 15.0
2016-06-25 25.765827 18.5
2016-06-26 25.239251 17.0
с данными в последний день:
C1 global
2016-06-26 25.23925 17
Как я могу сделать расчет прокатки в для получения точного расчета по 2016-5-27 по 2016-06-26, 2016-05-26 до 2016-06-25 и т. Д.?
PerformanceAnalytics::apply.rolling
Использование дает ошибку:
Ошибка в XTS (х, order.by = order.by, частота = частота, .class = "двойной",: order.by требует соответствующего по времени на основе объекта
require(PerformanceAnalytics)
test1 <- apply.rolling(Data, width=30, gap=30, by=1, FUN=function(x) as.xts(-x, 2, rank))
Я сделал следующую функцию. factorz
дает тот же результат. Возможно, функция помогает сделать его прокатки?
rollrank <- function(x)
{
a <- tail(x, 30)
b <- as.xts(apply(-a, 2, rank, na.last= "keep"))
c <- cbind(a, global = rowMeans(b))
d <- last(c)
return(d)
}
factorz <- rollrank(Data[,2:3])
Спасибо, это то, что я искал! –