[英]Given a tsibble with more than one key, is tidyverts able to box_cox() each time series using a respective lambda_guerrero value per time series?
我的問題是:如果我有一個包含多個鍵(n_keys > 1)和一個或多個鍵變量(key_vars >= 1)的 tsibble,tidyverts 套件是否能夠對每個時間序列執行 box_cox 轉換(一個每個時間序列的 box_cox 轉換)使用每個時間序列的相應 lambda_guerrero 值? 下面是我(第一次)嘗試一個最小可重現的例子。
例如:我想知道“步驟 5”是否可以使用 tidyverts 套件而不會收到錯誤。 與其將 lambda1=0.36 應用於優惠、一般和聚合,如“步驟 4”中所見,沒有錯誤,我想將 0.25 應用於優惠,0.66 應用於一般,0.36 應用於聚合,如果可能的話。
謝謝!
library(tidyverse)
library(lubridate)
library(tsibble)
library(tsibbledata)
library(fabletools)
library(fable)
library(feasts)
library(distributional)
tsibbledata::PBS %>% summarize(Cost = sum(Cost)) %>% autoplot(Cost)
類似於 FPP3 第 3.1 章中的示例。 供參考: https://otexts.com/fpp3/transformations.html
lambda1 <- tsibbledata::PBS %>%
summarize(Cost = sum(Cost)) %>%
features(Cost, features = guerrero) %>%
pull(lambda_guerrero) # [1] 0.3642197
tsibbledata::PBS %>% summarize(Cost = sum(Cost)) %>% autoplot(box_cox(Cost,lambda1))
tsibbledata::PBS %>% aggregate_key(Concession, Cost = sum(Cost)) %>% autoplot(Cost)
tsibbledata::PBS %>%
aggregate_key(Concession, Cost = sum(Cost)) %>%
autoplot(box_cox(Cost,lambda1))
lambda2 <- tsibbledata::PBS %>%
aggregate_key(Concession, Cost = sum(Cost)) %>%
features(Cost, features = guerrero) %>%
pull(lambda_guerrero) # [1] 0.2518823 0.6577645 0.3642197
lambda2
A tibble: 3 x 2
Concession lambda_guerrero
<chr*> <dbl>
1 Concessional 0.252
2 General 0.658
3 <aggregated> 0.364
tsibbledata::PBS %>%
aggregate_key(Concession, Cost = sum(Cost)) %>%
autoplot(box_cox(Cost,lambda2)) # caused an error
您上次嘗試的問題與輸入到box_cox(Cost, lambda2)
的值的長度有關。 Cost
的長度為 612(3 個系列的 204 個觀測值),而lambda2
的長度為 3。因此 R 將嘗試復制 lambda2 中的值以使長度匹配(稱為“回收”)。
但是,在這種情況下它做錯了。 它匹配Cost[1]
和lambda2[1]
(正確), Cost[2]
和lambda2[2]
(不正確), Cost[3]
和lambda2[3]
(不正確), Cost[3]
和lambda2[1]
(正確)等。正確回收參數是Cost[1:204]
使用lambda2[1]
, Cost[205:408]
使用lambda2[2]
, Cost[409:612]
使用lambda2[3]
,所以我們需要確保這一點。
這可以通過rep(lambda2, each = 204)
來完成,但是最好/最安全的方法是使用連接操作。 這可確保參數與正確的系列匹配(並防止出現行排序問題)。 下面的代碼顯示了如何使用left_join()
完成此操作,它將 lambda 值與基於 Concession 列的數據相匹配。 請注意,plot 看起來不太好,因為轉換(和數據)在非常不同的尺度上產生值。 為了解決這個問題,我建議為每個系列生成不同的 y 軸刻度(如下所示)。
library(fpp3)
lambda2 <- tsibbledata::PBS %>%
aggregate_key(Concession, Cost = sum(Cost)) %>%
features(Cost, features = guerrero)
lambda2
#> # A tibble: 3 x 2
#> Concession lambda_guerrero
#> <chr*> <dbl>
#> 1 Concessional 0.252
#> 2 General 0.658
#> 3 <aggregated> 0.364
tsibbledata::PBS %>%
aggregate_key(Concession, Cost = sum(Cost)) %>%
# Add lambda to the dataset, matching based on the key variable
left_join(lambda2, by = "Concession") %>%
autoplot(box_cox(Cost, lambda_guerrero))
tsibbledata::PBS %>%
aggregate_key(Concession, Cost = sum(Cost)) %>%
# Add lambda to the dataset, matching based on the key variable
left_join(lambda2, by = "Concession") %>%
autoplot(box_cox(Cost, lambda_guerrero)) +
facet_grid(rows = vars(Concession), scales = "free_y")
由代表 package (v0.3.0) 於 2021 年 1 月 9 日創建
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.