如何在R中实现多个xts残差序列的联合重采样
R xts对象联合重采样实现方法
核心思路
联合重采样的本质是保证三个序列抽取的行索引完全一致,从而让抽样结果的相同位置对应同一原始时间点的取值,不需要找支持多序列输入的重采样函数,只需统一生成一次抽样索引再分别取值即可。
前置检查
首先确认三个xts序列长度一致、时间索引对齐,若未对齐先执行合并对齐:
# 合并三个序列自动对齐时间,缺失值可根据需求自定义处理 combined_res <- merge(residuals1, residuals2, residuals3) # 可选:去除含缺失值的行 combined_res <- na.omit(combined_res)
实现方法
方法1:合并后整体抽样(推荐)
合并为多列xts对象后直接对行抽样,一次操作即可得到同步的三列抽样结果:
# 生成2000个有放回的随机行索引 sample_idx <- sample(nrow(combined_res), size = 2000, replace = TRUE) # 抽取得到同步的联合重采样结果,每一行对应三个序列的同步取值 sampled_joint <- combined_res[sample_idx, ] # 按需拆分出单个序列的抽样结果 sampled1 <- sampled_joint[,1] sampled2 <- sampled_joint[,2] sampled3 <- sampled_joint[,3]
方法2:单独生成索引分别抽样
如果不想合并原序列,可以单独生成一次统一索引后分别对三个序列取值:
# 确认三个序列长度一致后生成统一索引,习惯用resample函数也可以替换sample为resample sample_idx <- sample(seq_along(residuals1), size = 2000, replace = TRUE) # 分别抽取三个序列,取值完全同步 sampled1 <- residuals1[sample_idx] sampled2 <- residuals2[sample_idx] sampled3 <- residuals3[sample_idx]
如果要兼容你之前使用的resample()函数,只需把生成索引的代码替换为:sample_idx <- resample(seq_along(residuals1), 2000, replace = TRUE)
后续取值逻辑完全一致。
内容的提问来源于stack exchange,提问作者Deepak Joshi
相关产品推荐
相关产品推荐

