我正在处理时间序列数据,并且当比例数据遵循滚动窗口时,该模型似乎可以改善10%左右。为了计算滚动比例,我对跟踪函数进行了编码:
library(data.table)
d <- data.table(index = 1:100, x = rnorm(100))
roll_scale <- function(x, n = 3, ...) {
xout <- frollapply(x, n , FUN = function(z) c( scale(z)[n, 1]), ... )
return(xout)
}
d[, sData := roll_scale(x)]
基于评论how can I use rollapply with scale
在对数据建模之后,我想预测最近的时间点并将结果恢复到原始比例。但是,这似乎比我预期的要复杂。这是我通过DMwR :: unscale进行的尝试:
roll_UNscale <- function(scaled, Ref_values, n = 3, ...) {
xout <- frollapply(scaled, n , FUN = function(z, Ref_values) {
c(DMwR::unscale(scaled, scale(Ref_values))[ n,])
}, ..., Ref_values = Ref_values)
return(xout)
}
d[, roll_UNscale(sData, x)]
我希望你能帮我
答案 0 :(得分:0)
经过一天的思考,我提出了解决方案。简而言之,我只需要参考向量即可。在这里:
roll_UNscale <- function(scaled, Ref_values, n = 3, align = "right", ...) {
means <- frollmean(Ref_values, n = n)
stds <- frollapply(x = Ref_values, n = n, FUN = sd)
unscaled <- scaled * stds + means
return(unscaled)
}
我希望这可以帮助某人。