fable-r - 在 tidyverts 包中按键创建时间序列交叉验证切片
问题描述
有没有办法使用 tidyverts 包按键创建时间序列交叉验证集?我似乎无法正确处理。以下是我尝试的代表。
该示例涉及为预测创建时间序列交叉验证(提前 1 步的切片)。键变量有 2 个不同的值,我希望有一个包含两个键的时间序列切片的 tsibble。当我尝试对两个 tsibble 进行行绑定时,出现错误。
library(dplyr)
library(tibble)
library(tsibble)
# helper function
create_cv_slices <- function(data, forecast_horizon) {
data %>%
dplyr::slice(1:(nrow(data) - forecast_horizon)) %>%
tsibble::stretch_tsibble(.init = nrow(data) - 2 * forecast_horizon, .step = 1)
}
# get data
raw_tsbl <- tibble::tribble(
~index, ~key, ~Revenue, ~Claims,
20160101, "series1", 11011836.1, 5386836.696,
20160201, "series1", 11042641.16, 9967325.715,
20160301, "series1", 11445687.52, 10947197.89,
20160401, "series1", 11252943.11, 6980431.415,
20160101, "series2", 12236155, 12526224,
20160201, "series2", 8675364, 9812904,
20160301, "series2", 10081130, 8423497,
20160401, "series2", 14840111, 8079813
) %>%
dplyr::mutate(index = tsibble::yearmonth(as.character(index))) %>%
tsibble::as_tsibble(index = index, key = key)
keys <- unique(raw_tsbl$key)
# split & combine
tbl1 = raw_tsbl %>%
dplyr::filter(key == keys[1]) %>%
create_cv_slices(., forecast_horizon = 1) %>%
tibble::as_tibble()
tbl2 = raw_tsbl %>%
dplyr::filter(key == keys[2]) %>%
create_cv_slices(., forecast_horizon = 1) %>%
tibble::as_tibble()
dplyr::bind_rows(tbl1, tbl2) %>%
tsibble::as_tsibble(index = index, key = key)
#> Error: A valid tsibble must have distinct rows identified by key and index.
#> Please use `duplicates()` to check the duplicated rows.
谢谢你。
解决方案
似乎使用 bind_rows 来组合 tsibbles 是行不通的。使用 bind_rows 并validate = FALSE
在as_tsibble
函数中设置,可以创建一个 tsibble,但它会将 tsibble 显示为每日系列而不是每月(应该是这样)。但是,使用具有相同参数设置的 rbind 会创建所需的 tsibble。
rbind(tbl1, tbl2) %>%
tsibble::as_tsibble(index = index, key = c(key, .id), validate = F)
谢谢。
推荐阅读
- kubernetes - Kubernetes 内部服务 Axios NuxtJS
- java - 带有线程调用并最终返回的Java方法
- css - React Material UI 排版最大行数
- docker - 在树莓派上的 micro8s 集群上部署 Jenkins
- python - 通过python类中的函数检查MySQL中是否存在行
- swift - 在 RealityKit 中将对象放置在相机前面
- sql-server - 在 SQL Server 中使用内部联接
- requirejs - 有没有办法使用 Apache Tomcat 9.0.48 + 减少 requirejs 的请求下载时间?
- python - 根据列表内的日期时间对象排序
- linux - Search, match and copy directories into another based on names in a txt file