拆分矢量并应用Mann Kendall测试

时间:2013-02-11 21:01:00

标签: r split

我有很长的财务时间序列信息,价格和数量。我根据体积向量扩展价格向量,因此我基本上得到每股交易价格,因此只分析了一个向量。 我想将这个向量分成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

1 个答案:

答案 0 :(得分: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