R: вращающийся квантиль с переменной шириной - PullRequest
0 голосов
/ 13 мая 2018

В основном у меня есть следующие данные

x <- structure(c(0.609973095295898, 0.731967714355078, 0.243989238118359, 
1.46393542871016, 0.609973095295898, 0.243989238118359, 0.12199461905918, 
1.34194080965098, 1.82991928588769, 0.609973095295898, 2.92787085742031, 
0.243989238118359, 0.12199461905918, 0.365983857177539, 0.243989238118359, 
0.365983857177539, 0.243989238118359, 0.243989238118359, 0.609973095295898, 
0.243989238118359, 3.41584933365703, 1.09795157153262, 2.19590314306523, 
1.95191390494687, 0.975956952473437, 0.487978476236719, 0.975956952473437, 
0.243989238118359, 0, 0.243989238118359, 0.731967714355078, 0.12199461905918, 
0.365983857177539, 0.487978476236719, 0.365983857177539, 0.609973095295898, 
0.487978476236719, 0, 0.365983857177539, 1.46393542871016, 5.00177938142637, 
1.58593004776934, 0.975956952473437, 0.731967714355078, 0.12199461905918, 
1.09795157153262, 0.609973095295898, 0.12199461905918, 1.09795157153262, 
0), .Dim = c(50L, 1L), .indexCLASS = c("POSIXct", "POSIXt"), .indexTZ = "", tclass = c("POSIXct", 
"POSIXt"), tzone = "", class = c("xts", "zoo"), index = structure(c(1519867559.7265, 
1519867560.9555, 1519867561.9165, 1519867562.9545, 1519867563.9795, 
1519867564.7125, 1519867565.7165, 1519867566.8635, 1519867567.9235, 
1519867568.8315, 1519867569.9905, 1519867570.7575, 1519867572.3225, 
1519867573.8155, 1519867574.9315, 1519867575.4905, 1519867576.2835, 
1519867577.8485, 1519867578.8205, 1519867579.8385, 1519867580.7705, 
1519867581.8485, 1519867582.9695, 1519867583.9445, 1519867584.7765, 
1519867585.9805, 1519867586.8755, 1519867587.7145, 1519867588.6735, 
1519867589.8995, 1519867590.8525, 1519867591.8665, 1519867592.7175, 
1519867593.9575, 1519867594.7415, 1519867595.9385, 1519867596.8065, 
1519867597.9895, 1519867598.7925, 1519867599.8625, 1519867600.9995, 
1519867601.9075, 1519867602.9505, 1519867603.9515, 1519867604.9975, 
1519867605.8405, 1519867606.8505, 1519867607.9255, 1519867608.9765, 
1519867609.5645), tzone = "", tclass = c("POSIXct", "POSIXt")), .Dimnames = list(
    NULL, "random"))

Это просто объект xts столбца.

Теперь я пытаюсь составить скользящий квантиль так, чтобы начальная точка ширины всегда была row 1, то есть диапазон окна всегда начинался с 1. Итак, если я смотрю на строку 35, тогда диапазон скользящего окна квантиля для строки 35 будет от 1 до 35. И если я смотрю на строку 49, то диапазон скользящего окна квантиля для строки 49 будет от 1 до 49.

rollapply(x[,"random"],width="from row 1 to current row",FUN="quantile",probs=0.95))

Но я не могу понять, как написать код, чтобы сделать это эффективно?

Ответы [ 3 ]

0 голосов
/ 13 мая 2018

Использование rollapply будет примерно таким:

library(xts)

rollapply(x[, "random"], width = list(seq(-length(x[, "random"]), 0)), FUN = quantile, probs = 0.95, partial = 0)
0 голосов
/ 14 мая 2018

Преобразование в зоопарк, в этом случае rollapplyr.zoo может обрабатывать векторные ширины:

rollapplyr(as.zoo(x), seq_along(x), quantile, probs = 0.95)

Другой подход - использовать ширину length(x) и указать partial=TRUE:

rollapplyr(as.zoo(x), length(x), quantile, probs = 0.95, partial = TRUE)
0 голосов
/ 13 мая 2018

Скорее всего, вы ищете:

lapply(seq_along(x), function(i){
  quantile(x[1:i], probs = 0.95)
})

для каждого индекса i в x, подмножество x от 1 до i и возврат quantile.

На выходе будет список, вы можете преобразовать его в вектор:

unlist(lapply(seq_along(x), function(i){
  quantile(x[1:i], probs=0.95)
}))

или лучше (как @Rui Barradas предложил в комментариях) используйте sapply:

sapply(seq_along(x), function(i){
  quantile(x[1:i], probs=0.95)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...