如何使用R重新采样XTS时间序列而不按日期排序?

时间:2016-02-16 11:20:34

标签: r time-series xts montecarlo resampling

我在xts对象中有一个Profit and Loss列表,我将运行一种 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

1 个答案:

答案 0 :(得分:1)

与他们的父类(zoo)一样,必须始终对xts对象进行排序。没有办法创建无序的xts(或动物园)对象。

在您的情况下,您不需要索引来计算缩编。所以你可以使用对象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