对于我的实验,我需要计算赫斯特指数。部分原因是我需要通过重复减半总样本集来分割数据,直到子集中的元素数量低于某个阈值 - 通常为8或10。
例如:
1: 1 Set of N
2: 2 Sets of N/2
3: 4 Sets of N/4
...
在N/x
创建长度小于阈值的子集后,此过程将停止。
通过while循环有一种明显的方法可以做到这一点。然而,这是丑陋和未经优化的。
是否有可用的功能或功能将数据矢量以这种方式分割成一组子集?还是我坚持用丑陋的未经优化的方式做到这一点?
答案 0 :(得分:1)
一种方法是计算要拆分的数据的行索引,然后使用lapply()
中的那些索引来计算赫斯特指数。
N <- 100 # N must be nrow(data), value 100 indicates total rows in data
split_indices <- lapply( 1:8, function(x) {
unlist( ifelse(test = (x == 1),
yes = N,
no = list( c( 1,
cumsum( floor( rep( x = N/x, times = x-1) ) ),
N ) ) ) )
} )
split_indices
# [[1]]
# [1] 100
#
# [[2]]
# [1] 1 50 100
#
# [[3]]
# [1] 1 33 66 100
#
# [[4]]
# [1] 1 25 50 75 100
#
# [[5]]
# [1] 1 20 40 60 80 100
#
# [[6]]
# [1] 1 16 32 48 64 80 100
#
# [[7]]
# [1] 1 14 28 42 56 70 84 100
#
# [[8]]
# [1] 1 12 24 36 48 60 72 84 100
现在在lapply()
循环中使用hurst exponent函数。
lapply( split_indices, function( x ) --compute-hurst-exponent-- )