0

我有一个很长的金融时间序列信息、价格和数量的向量。我根据交易量向量扩展了价格向量,因此我基本上得到了每股交易价格,因此只分析了一个向量。我想将此向量拆分为每个长度为 100(可以是任意数字)的长度,并对这些新向量中的每一个应用 Mann-Kendall 趋势分析。下面是我为此编写的代码。

我从 Mann Kendall 测试中得到一个错误,因为这种拆分方法将输出作为列表生成。

有没有办法创建一个新向量并在每个向量上运行 Mann Kendall 测试,并且每个测试的输出都可以轻松访问?

library(Kendall)

priceexp <- rep(price, volume)

max <- 100
xx <- seq_along(priceexp)
d1 <- split(priceexp, ceiling(xx/max))

for(i in (1:length(d1))) {
    MannKendall(d1[i])
}

输入的两个向量的样本:

"price","volume"
125,4020
125,1100
125,191
124.8,329
125.5,400
125.6,100
125.7,600
125.2,686
125.2,898
125.2,1416
125.6,150
125.6,500
125.6,200
125.6,41
125.5,400
125.7,300
125.7,14
125.7,1200
125.7,300
125.7,686
125.8,1000
125.8,1700
125.8,144
125.8,225
125.9,500
125.9,446
126,500
126,225
126,500
126,250
126,28
126,340
126,600
125.9,275
125.9,323
125.9,152
125.8,1931
125.9,196
125.9,571
125.8,214
125.8,300
125.7,353
125.8,432
125.8,1356
126,400
126,2133
126,300
126,190
126,376
125.8,186
126,750
126,431
126,1403
126,39
125.9,259
126.1,900
126.1,307
126.1,124
126.1,750
126.2,100
126.2,117
126,200
126,94
126,453
126,149
126,661
126,600
126,549
126,315
126,318
126,297
125.9,300
125.9,454
125.9,370
125.8,114
125.8,1100
125.8,7344
125.8,2656
125.8,333
126,120
125.9,878
125.9,462
125.9,899
125.9,45
125.7,2000
125.7,889
125.7,4611
125.7,2500
125.9,652
125.9,1610
125.9,332
125.9,750
125.9,627
125.9,473
125.9,182
125.9,32
125.9,1305
125.9,98
125.9,330
125.9,373
125.9,636
125.9,1291
125.9,1675
125.9,1029
125.9,314
125.9,400
125.9,699
125.9,300
125.8,300
125.8,7
126,659
125.9,750
126,441
126,2000
126,86
126,300
126,1300
125.9,243
125.9,456
125.9,64
126,400
126,2000
125.9,319
125.9,423
125.8,447
125.8,387
125.8,352
125.8,200
125.8,1123
125.8,379
125.8,300
125.8,600
125.8,61
125.8,340
125.8,200
4

1 回答 1

1

例如lapply,在这里我只对前 5 个元素执行此操作。

   lapply(d1[1:5],MannKendall)
WARNING: Error exit, tauk2. IFAULT =  12
WARNING: Error exit, tauk2. IFAULT =  12
WARNING: Error exit, tauk2. IFAULT =  12
WARNING: Error exit, tauk2. IFAULT =  12
WARNING: Error exit, tauk2. IFAULT =  12
$`1`
tau = 1, 2-sided pvalue =1

$`2`
tau = 1, 2-sided pvalue =1

$`3`
tau = 1, 2-sided pvalue =1

$`4`
tau = 1, 2-sided pvalue =1

$`5`
tau = 1, 2-sided pvalue =1

编辑

结果MannKendall是一个列表,你可以取消它,

   do.call(rbind,lapply(d1[1:5],function(x)unlist(MannKendall(x))))

  tau sl S D varS
1   1  1 0 0    0
2   1  1 0 0    0
3   1  1 0 0    0
4   1  1 0 0    0
5   1  1 0 0    0
于 2013-02-11T21:16:36.467 回答