在 R 中以设定的增长率显示多个位置的未来值

Show future values for multiple locations with set growth rate in R

如果我已经为多个位置设置了数据(例如销售额)并且知道它们每周增加 10%,我将如何将其扩展到说 - 52 周后(显示每个位置的值)周)?

我以前会在 excel 中使用公式将日期增加 7 天,然后将每个位置的前一周增加 10%。我在猜测时间序列分析的一些东西 - 我确实看过 tsibble 和其他一些预测包 - 但找不到任何可以为每周增加的数据提供额外数据的东西。

我在下面提供了一个示例,说明现有几周的数据。

期望的结果将与下面的现有数据相同,但只是将每个位置再延长 52 周,而不是仅仅延长 3 周。

library(dplyr)
#> Warning: package 'dplyr' was built under R version 3.4.4
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(reprex)
#> Warning: package 'reprex' was built under R version 3.4.4

ex_data <- 
tibble::tribble(
  ~location,       ~date, ~sales,
         1L, "5/11/2019",     50,
         2L, "5/11/2019",     45,
         3L, "5/11/2019",     35,
         4L, "5/11/2019",     20,
         5L, "5/11/2019",     15,
         1L, "5/18/2019",     55,
         2L, "5/18/2019",   49.5,
         3L, "5/18/2019",   38.5,
         4L, "5/18/2019",     22,
         5L, "5/18/2019",   16.5,
         1L, "5/25/2019",   60.5,
         2L, "5/25/2019",  54.45,
         3L, "5/25/2019",  42.35,
         4L, "5/25/2019",   24.2,
         5L, "5/25/2019",  18.15
  )

使用 dplyr,您可以首先使用 expand.grid 创建整个数据框,包括 repseq 的日期,然后计算预测值。

df <- expand.grid(location = c("a", "b", "c", "d"), 
                  week = seq(0, 51, 1)) %>%
  mutate(date = rep(seq(as.Date("5/11/2019", "%m/%d/%Y"), 
                        as.Date("5/06/2020", "%m/%d/%Y"), 
                        by = "1 week" ), each = 4)) %>%
  mutate(value = c(5, 10, 15, 20)) %>%
  mutate(fc_value = value*(1.1) ^ week)