这些重采样函数专注于各种形式的时间序列重采样。
-
sliding_window()
在计算重采样索引时使用行号。它独立于任何时间索引,但对于完全规则的序列很有用。 -
sliding_index()
计算相对于index
列的重采样索引。这通常是日期或 POSIXct 列,但不是必须如此。这在对不规则序列进行重新采样或使用不规则回溯期(例如带有每日数据的lookback = lubridate::years(1)
(一年中的天数可能会有所不同))时非常有用。 -
sliding_period()
首先根据period
将index
分解为更细粒度的组,然后使用它来构造重采样索引。这对于根据每日数据构建滚动的每月或每年窗口非常有用。
用法
sliding_window(
data,
...,
lookback = 0L,
assess_start = 1L,
assess_stop = 1L,
complete = TRUE,
step = 1L,
skip = 0L
)
sliding_index(
data,
index,
...,
lookback = 0L,
assess_start = 1L,
assess_stop = 1L,
complete = TRUE,
step = 1L,
skip = 0L
)
sliding_period(
data,
index,
period,
...,
lookback = 0L,
assess_start = 1L,
assess_stop = 1L,
complete = TRUE,
step = 1L,
skip = 0L,
every = 1L,
origin = NULL
)
参数
- data
-
一个 DataFrame 。
- ...
-
这些点用于将来的扩展,并且必须为空。
- lookback
-
计算分析集的重采样索引时从当前元素向后查找的元素数量。当前行始终包含在分析集中。
-
对于
sliding_window()
,定义从当前行向后查找的行数的单个整数。 -
对于
sliding_index()
,将从index
中减去的单个对象作为index - lookback
来定义从何处开始搜索要包含在当前重新采样中的行的边界。这通常是一个与要回顾的天数相对应的整数值,或者是一个 lubridate period 对象。 -
对于
sliding_period()
,定义要从当前组回顾的组数的单个整数,其中组是根据period
分解index
来定义的。
在所有情况下,
Inf
也可以强制扩展窗口。 -
- assess_start, assess_stop
-
这些参数的组合决定了构建评估集时要展望多远的未来。它们一起构建
[index + assess_start, index + assess_stop]
范围来搜索要包含在评估集中的行。通常,
assess_start
始终为1
,以指示可能包含在评估集中的第一个值应在当前行之后开始一个元素,但可以将其增加到更大的值以在分析之间创建 "gaps"如果您担心短期预测中的高相关性,请使用评估集。-
对于
sliding_window()
,这些都是单个整数,定义从当前行向前查找的行数。 -
对于
sliding_index()
,这些是将添加到index
的单个对象,以计算搜索要包含在评估集中的行的范围。这通常是与要展望的天数相对应的整数值,或者是 lubridate period 对象。 -
对于
sliding_period()
,这些都是单个整数,定义从当前组向前查找的组数,其中组是根据period
分解index
来定义的。
-
- complete
-
单一逻辑。当使用
lookback
计算分析集时,是否应该只考虑完整的窗口?如果设置为FALSE
,则将使用部分窗口,直到可以创建完整窗口(基于lookback
)。这是一种使用扩展窗口到某个点,然后切换到滑动窗口的方法。 - step
-
单个正整数。计算重采样索引后,
step
用于通过用seq(1L, n_indices, by = step)
子集索引来选择每个step
结果来稀疏结果。step
在skip
之后应用。请注意,step
与使用的任何时间index
无关。 - skip
-
单个正整数或零。计算重采样索引后,将通过用
seq(skip + 1L, n_indices)
子集索引来删除第一个skip
结果。当与lookback = Inf
结合使用时,这会特别有用,它会创建一个从第一行开始的扩展窗口。通过向前跳跃,您可以删除前几个数据点很少的窗口。skip
在step
之前应用。请注意,skip
与使用的任何时间index
无关。 - index
-
计算相对于重采样索引的索引,指定为裸列名称。这必须是
data
中的现有列。-
对于
sliding_index()
,这通常是日期向量,但不是必需的。 -
对于
sliding_period()
,要求这是一个 Date 或 POSIXct 向量。
index
必须是递增向量,但允许重复值。此外,索引不能包含任何缺失值。 -
- period
-
index
分组依据的周期。这被指定为单个字符串,例如"year"
或"month"
。有关选项的完整列表和进一步说明,请参阅slider::slide_period()
的.period
参数。 - every
-
单个正整数。组合在一起的周期数。
例如,如果将
period
设置为"year"
,且every
值为 2,则 1970 年和 1971 年将被放置在同一组中。 - origin
-
参考日期时间值。保留为
NULL
时的默认值是索引时区中1970-01-01 00:00:00
的纪元时间。这通常用于定义开始计数的锚点时间,当
every
值为> 1
时相关。
也可以看看
slider::slide()
、 slider::slide_index()
和 slider::slide_period()
为这些重采样器提供动力。
例子
library(vctrs)
#>
#> Attaching package: ‘vctrs’
#> The following object is masked from ‘package:tibble’:
#>
#> data_frame
#> The following object is masked from ‘package:dplyr’:
#>
#> data_frame
library(tibble)
library(modeldata)
data("Chicago")
index <- new_date(c(1, 3, 4, 7, 8, 9, 13, 15, 16, 17))
df <- tibble(x = 1:10, index = index)
df
#> # A tibble: 10 × 2
#> x index
#> <int> <date>
#> 1 1 1970-01-02
#> 2 2 1970-01-04
#> 3 3 1970-01-05
#> 4 4 1970-01-08
#> 5 5 1970-01-09
#> 6 6 1970-01-10
#> 7 7 1970-01-14
#> 8 8 1970-01-16
#> 9 9 1970-01-17
#> 10 10 1970-01-18
# Look back two rows beyond the current row, for a total of three rows
# in each analysis set. Each assessment set is composed of the two rows after
# the current row.
sliding_window(df, lookback = 2, assess_stop = 2)
#> # Sliding window resampling
#> # A tibble: 6 × 2
#> splits id
#> <list> <chr>
#> 1 <split [3/2]> Slice1
#> 2 <split [3/2]> Slice2
#> 3 <split [3/2]> Slice3
#> 4 <split [3/2]> Slice4
#> 5 <split [3/2]> Slice5
#> 6 <split [3/2]> Slice6
# Same as before, but step forward by 3 rows between each resampling slice,
# rather than just by 1.
rset <- sliding_window(df, lookback = 2, assess_stop = 2, step = 3)
rset
#> # Sliding window resampling
#> # A tibble: 2 × 2
#> splits id
#> <list> <chr>
#> 1 <split [3/2]> Slice1
#> 2 <split [3/2]> Slice2
analysis(rset$splits[[1]])
#> # A tibble: 3 × 2
#> x index
#> <int> <date>
#> 1 1 1970-01-02
#> 2 2 1970-01-04
#> 3 3 1970-01-05
analysis(rset$splits[[2]])
#> # A tibble: 3 × 2
#> x index
#> <int> <date>
#> 1 4 1970-01-08
#> 2 5 1970-01-09
#> 3 6 1970-01-10
# Now slide relative to the `index` column in `df`. This time we look back
# 2 days from the current row's `index` value, and 2 days forward from
# it to construct the assessment set. Note that this series is irregular,
# so it produces different results than `sliding_window()`. Additionally,
# note that it is entirely possible for the assessment set to contain no
# data if you have a highly irregular series and "look forward" into a
# date range where no data points actually exist!
sliding_index(df, index, lookback = 2, assess_stop = 2)
#> # Sliding index resampling
#> # A tibble: 7 × 2
#> splits id
#> <list> <chr>
#> 1 <split [2/1]> Slice1
#> 2 <split [2/0]> Slice2
#> 3 <split [1/2]> Slice3
#> 4 <split [2/1]> Slice4
#> 5 <split [3/0]> Slice5
#> 6 <split [1/1]> Slice6
#> 7 <split [2/2]> Slice7
# With `sliding_period()`, we can break up our date index into less granular
# chunks, and slide over them instead of the index directly. Here we'll use
# the Chicago data, which contains daily data spanning 16 years, and we'll
# break it up into rolling yearly chunks. Three years worth of data will
# be used for the analysis set, and one years worth of data will be held out
# for performance assessment.
sliding_period(
Chicago,
date,
"year",
lookback = 2,
assess_stop = 1
)
#> # Sliding period resampling
#> # A tibble: 13 × 2
#> splits id
#> <list> <chr>
#> 1 <split [1074/366]> Slice01
#> 2 <split [1096/365]> Slice02
#> 3 <split [1096/365]> Slice03
#> 4 <split [1096/365]> Slice04
#> 5 <split [1095/366]> Slice05
#> 6 <split [1096/365]> Slice06
#> 7 <split [1096/365]> Slice07
#> 8 <split [1096/365]> Slice08
#> 9 <split [1095/366]> Slice09
#> 10 <split [1096/365]> Slice10
#> 11 <split [1096/365]> Slice11
#> 12 <split [1096/365]> Slice12
#> 13 <split [1095/241]> Slice13
# Because `lookback = 2`, three years are required to form a "complete"
# window of data. To allow partial windows, set `complete = FALSE`.
# Here that first constructs two expanding windows until a complete three
# year window can be formed, at which point we switch to a sliding window.
sliding_period(
Chicago,
date,
"year",
lookback = 2,
assess_stop = 1,
complete = FALSE
)
#> # Sliding period resampling
#> # A tibble: 15 × 2
#> splits id
#> <list> <chr>
#> 1 <split [344/365]> Slice01
#> 2 <split [709/365]> Slice02
#> 3 <split [1074/366]> Slice03
#> 4 <split [1096/365]> Slice04
#> 5 <split [1096/365]> Slice05
#> 6 <split [1096/365]> Slice06
#> 7 <split [1095/366]> Slice07
#> 8 <split [1096/365]> Slice08
#> 9 <split [1096/365]> Slice09
#> 10 <split [1096/365]> Slice10
#> 11 <split [1095/366]> Slice11
#> 12 <split [1096/365]> Slice12
#> 13 <split [1096/365]> Slice13
#> 14 <split [1096/365]> Slice14
#> 15 <split [1095/241]> Slice15
# Alternatively, you could break the resamples up by month. Here we'll
# use an expanding monthly window by setting `lookback = Inf`, and each
# assessment set will contain two months of data. To ensure that we have
# enough data to fit our models, we'll `skip` the first 4 expanding windows.
# Finally, to thin out the results, we'll `step` forward by 2 between
# each resample.
sliding_period(
Chicago,
date,
"month",
lookback = Inf,
assess_stop = 2,
skip = 4,
step = 2
)
#> # Sliding period resampling
#> # A tibble: 91 × 2
#> splits id
#> <list> <chr>
#> 1 <split [130/61]> Slice01
#> 2 <split [191/61]> Slice02
#> 3 <split [252/61]> Slice03
#> 4 <split [313/62]> Slice04
#> 5 <split [375/59]> Slice05
#> 6 <split [434/61]> Slice06
#> 7 <split [495/61]> Slice07
#> 8 <split [556/61]> Slice08
#> 9 <split [617/61]> Slice09
#> 10 <split [678/62]> Slice10
#> # ℹ 81 more rows
相关用法
- R rsample validation_set 创建验证拆分以进行调整
- R rsample initial_split 简单的训练/测试集分割
- R rsample populate 添加评估指标
- R rsample int_pctl 自举置信区间
- R rsample vfold_cv V 折交叉验证
- R rsample rset_reconstruct 使用新的 rset 子类扩展 rsample
- R rsample group_mc_cv 小组蒙特卡罗交叉验证
- R rsample group_vfold_cv V 组交叉验证
- R rsample rolling_origin 滚动原点预测重采样
- R rsample reverse_splits 反转分析和评估集
- R rsample group_bootstraps 团体自举
- R rsample labels.rset 从 rset 对象中查找标签
- R rsample get_fingerprint 获取重采样的标识符
- R rsample bootstraps 引导抽样
- R rsample validation_split 创建验证集
- R rsample reg_intervals 具有线性参数模型的置信区间的便捷函数
- R rsample clustering_cv 集群交叉验证
- R rsample initial_validation_split 创建初始训练/验证/测试拆分
- R rsample get_rsplit 从 rset 中检索单个 rsplit 对象
- R rsample loo_cv 留一交叉验证
- R rsample complement 确定评估样本
- R rsample as.data.frame.rsplit 将 rsplit 对象转换为 DataFrame
- R rsample labels.rsplit 从 rsplit 对象中查找标签
- R rsample mc_cv 蒙特卡罗交叉验证
- R rsample tidy.rsplit 整洁的重采样对象
注:本文由纯净天空筛选整理自Hannah Frick等大神的英文原创作品 Time-based Resampling。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。