我想从时间序列数据集中生成四个引导样本,并让每个新的引导样本成为一个新的列表元素。样本大小需要与原始数据集的长度相同。有人可以帮帮我吗?到目前为止,这就是我所能想到的。
data <- ts(matrix(rnorm(36), 12, 3), start=c(2012, 1), frequency=12)
data
replicate(4, apply(data, 1, sample, replace=TRUE))
我想从时间序列数据集中生成四个引导样本,并让每个新的引导样本成为一个新的列表元素。样本大小需要与原始数据集的长度相同。有人可以帮帮我吗?到目前为止,这就是我所能想到的。
data <- ts(matrix(rnorm(36), 12, 3), start=c(2012, 1), frequency=12)
data
replicate(4, apply(data, 1, sample, replace=TRUE))
你快到了。起初您的描述并不完全清楚,但评论清除了它。您需要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 ) , ] ) )