R引导时间序列

3

我希望能从时间序列数据集中生成四个bootstrap样本,并将每个新的bootstrap样本变成一个新的列表元素。样本大小需要与原始数据集的长度相同。请问有人能帮忙吗?这是我目前为止想到的全部。

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

看一下 bootstrap 包。 - cryo111
1
请不要将答案编辑到原始帖子中。 - Simon O'Hanlon
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 ) , ] ) )

谢谢您的回答。但是我想要的是四个不同的数据框,每个都看起来像原始数据框,并包含所有三个序列。换句话说,我想通过从原始数据框中随机抽样行来构建新的数据框。如果可以在不将ts转换为data.frame的情况下完成,那就更好了。再次感谢您。 - user1491868
1
@user1491868 好的,我明白了。抱歉,从你的原始帖子中并不清楚。现在应该符合你的要求了。干杯。 - Simon O'Hanlon
@user1491868 很好!由于您在这里相对较新,您可能想阅读有关SO工作方式的关于常见问题解答。如果您收到解决问题的答案,请通过单击小绿色复选标记接受它或点赞有用的答案来使StackOverflow对每个人都更有价值。您绝对没有义务做任何一件事,但如果确实解决了您的问题,这是向网站“回馈”的好方法。谢谢! - Simon O'Hanlon
实际上,我有点过早了。我需要一次对整行进行采样。很高兴能够勾选绿色的勾号并点赞!谢谢你的帮助! - user1491868

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接