3

我想从时间序列数据集中生成四个引导样本,并让每个新的引导样本成为一个新的列表元素。样本大小需要与原始数据集的长度相同。有人可以帮帮我吗?到目前为止,这就是我所能想到的。

data <- ts(matrix(rnorm(36), 12, 3), start=c(2012, 1), frequency=12)
data
replicate(4, apply(data, 1, sample, replace=TRUE))
4

1 回答 1

2

你快到了。起初您的描述并不完全清楚,但评论清除了它。您需要apply跨列,并使用list使每个复制一个列表元素:

boot <- replicate( 4 , list( apply(data , 2 , function(x) sample( x , replace=TRUE ) ) ) )

class(boot)
#[1] "list"

length( boot )
#[1] 4

head(boot[[1]])

#       Series 1    Series 2   Series 3
#[1,]  0.4652513 -0.02065698  0.3328945
#[2,]  0.6649865  0.08845410  0.2032134
#[3,]  0.5975473 -1.64571306  1.6516726
#[4,]  0.5975473 -0.23359075 -0.3255437
#[5,]  0.4008458  0.42180633  1.8402009
#[6,] -0.5436319  1.17034910  0.3456304

编辑

由于您需要一次完成整行,这更加容易!

boot <- replicate( 4 , list( data[ sample( nrow(data) , replace = TRUE ) , ] ) )
于 2013-07-15T15:21:33.630 回答