这是一个纯 xts 解决方案。
你如何定义中位数?有几种方法。
在在线时间序列使用中,例如计算移动平均值,您可以计算固定回溯窗口(如下所示)或从原点到现在(锚定窗口计算)的中位数。您将不会知道当前时间步之后中位数计算中的未来值(避免前瞻偏差)。:
library(xts)
library(TTR)
x <- rep(c(1,1,5,1,5,5,1, 5, 5, 5), 10)
y <- xts(x = x, seq(as.Date("2016-01-01"), length = length(x), by = "days"), dimnames = list(NULL, "x"))
# Avoid look ahead bias in an online time series application by computing the median over a rolling fixed time window:
nMedLookback <- 5
y$med <- runPercentRank(y[, "x"], n = nMedLookback)
y$isAboveMed <- y$med > 0.5
nSum <- 2
y$runSum2 <- runSum(y$isAboveMed, n = nSum)
z <- na.omit(y)
prob <- sum(z[,"runSum2"] >= nSum) / NROW(z)
您的中位数在整个数据集上的情况显然是一个更容易修改的情况。