如何在不按日期排序的情况下使用 R 重新采样 XTS 时间序列?
How can I resample a XTS timeseries with R without sorting by date?
我在 xts 对象中有一个损益表,我将要 运行 进行某种 Monte Carlo 分析,以便通过对原始 xts 时间序列进行多次重采样计算出最大回撤。
# let's say qq is a timeseries of PnL
qq <- xts(1:10, order.by = as.Date('2016-01-01')+0:9)
set.seed(0)
# I create an index vector of 5 random samples without replacing
idx <- sample(1:10, 5)
# with that seed, idx = c(9, 3, 10, 5, 6)
qq[idx] # returns
[,1]
2016-01-03 3
2016-01-05 5
2016-01-06 6
2016-01-09 9
2016-01-10 10
问题是 xts 总是按日期对其元素进行排序,那么有没有办法让 xts 时间序列的子集包含未排序的元素?
[,1]
2016-01-09 9
2016-01-03 3
2016-01-10 10
2016-01-05 5
2016-01-06 6
与其父项 class(动物园)一样,xts 对象必须始终有序。无法创建无序的 xts(或 zoo)对象。
在您的情况下,您不需要指数来计算回撤。所以你可以只使用对象的coredata
。或者,如果您想将索引值保留为名称,则可以使用 as.matrix
。
R> (ss <- coredata(qq)[idx])
[1] 9 3 10 5 6
R> (ss <- as.matrix(qq)[idx,])
2016-01-09 2016-01-03 2016-01-10 2016-01-05 2016-01-06
9 3 10 5 6
然后你可以计算最大回撤。
R> ss-cummax(ss) # drawdown
2016-01-09 2016-01-03 2016-01-10 2016-01-05 2016-01-06
0 -6 0 -5 -4
R> min(ss-cummax(ss)) # max drawdown
[1] -6
我在 xts 对象中有一个损益表,我将要 运行 进行某种 Monte Carlo 分析,以便通过对原始 xts 时间序列进行多次重采样计算出最大回撤。
# let's say qq is a timeseries of PnL
qq <- xts(1:10, order.by = as.Date('2016-01-01')+0:9)
set.seed(0)
# I create an index vector of 5 random samples without replacing
idx <- sample(1:10, 5)
# with that seed, idx = c(9, 3, 10, 5, 6)
qq[idx] # returns
[,1]
2016-01-03 3
2016-01-05 5
2016-01-06 6
2016-01-09 9
2016-01-10 10
问题是 xts 总是按日期对其元素进行排序,那么有没有办法让 xts 时间序列的子集包含未排序的元素?
[,1]
2016-01-09 9
2016-01-03 3
2016-01-10 10
2016-01-05 5
2016-01-06 6
与其父项 class(动物园)一样,xts 对象必须始终有序。无法创建无序的 xts(或 zoo)对象。
在您的情况下,您不需要指数来计算回撤。所以你可以只使用对象的coredata
。或者,如果您想将索引值保留为名称,则可以使用 as.matrix
。
R> (ss <- coredata(qq)[idx])
[1] 9 3 10 5 6
R> (ss <- as.matrix(qq)[idx,])
2016-01-09 2016-01-03 2016-01-10 2016-01-05 2016-01-06
9 3 10 5 6
然后你可以计算最大回撤。
R> ss-cummax(ss) # drawdown
2016-01-09 2016-01-03 2016-01-10 2016-01-05 2016-01-06
0 -6 0 -5 -4
R> min(ss-cummax(ss)) # max drawdown
[1] -6