我想要 R 中的一种简单方法来可视化移动平均数据并比较多年来的演变。
例如,假设我有一个超过 5 年的时间序列,我绘制了移动平均线:
library(tidyverse)
library(tidyquant)
days <- seq(as.Date("2018-01-01"), as.Date("2023-03-15"), by = "days")
# let's generate a series roughly linear with time with random noise and a seasonal effect
sales <- 2 * as.double(days) /1000 - sin(as.double(days) /365 *2 *3.14) + rnorm(1900)
data <- tibble(days, sales)
data %>%
ggplot(aes(days, sales)) +
geom_point(color = "grey") +
geom_ma(ma_fun = SMA,linetype = 1, size = 1 , n = 14,color = "orange")
tidyquant:geom_ma 非常方便,我可以摆弄 n 来找到移动平均线的正确跨度并使其平滑。然而,很难区分季节性影响和趋势。
我想要的是具有相同的图形,但覆盖一年(从 1 月 1 日到 31 月 12 日)的所有销售数据,每年的移动平均线使用不同的颜色。然后我可以快速查看是否存在季节性影响和趋势。
我知道我可以计算数据集中的 moving_average,但由于边界原因,它必须在按年拆分之前完成,这有点违背了拥有简单 geom_ma 图的目的。最重要的是,我没能找到一个明显的功能来做到这一点。
你会如何解决这个问题? 谢谢
使用
gg_season
包中的 feasts
:
library(fpp3)
#> ── Attaching packages ────────────────────────────────────────────── fpp3 0.5 ──
#> ✔ tibble 3.2.0 ✔ tsibble 1.1.3
#> ✔ dplyr 1.1.0 ✔ tsibbledata 0.4.1
#> ✔ tidyr 1.3.0 ✔ feasts 0.3.0
#> ✔ lubridate 1.9.2 ✔ fable 0.3.2
#> ✔ ggplot2 3.4.1 ✔ fabletools 0.3.2
#> ── Conflicts ───────────────────────────────────────────────── fpp3_conflicts ──
#> ✖ lubridate::date() masks base::date()
#> ✖ dplyr::filter() masks stats::filter()
#> ✖ tsibble::intersect() masks base::intersect()
#> ✖ tsibble::interval() masks lubridate::interval()
#> ✖ dplyr::lag() masks stats::lag()
#> ✖ tsibble::setdiff() masks base::setdiff()
#> ✖ tsibble::union() masks base::union()
days <- seq(as.Date("2018-01-01"), as.Date("2023-03-15"), by = "days")
# let's generate a series roughly linear with time with random noise and a seasonal effect
sales <- 2 * as.double(days) /1000 - sin(as.double(days) /365 *2 *3.14) + rnorm(1900)
data <- tibble(days, sales)
data %>%
as_tsibble(index = days) %>%
gg_season(sales, labels = 'both')
创建于 2023-03-16 与 reprex v2.0.2