我想在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/01到31/12)内的所有销售数字叠加起来,用不同的颜色表示每年的移动平均值。这样,我就可以快速查看是否存在季节性效应和趋势。
我知道我可以计算数据集的移动平均值,但由于边界原因,必须在按年拆分之前完成,这有点违背了简单几何图形的目的。除此之外,我未能找到一个明显的函数来完成此操作。
您将如何解决这个问题?谢谢
2条答案
按热度按时间w1e3prcc1#
调整Hugues评论:
当然,由于
geom_ma()
是基于SMA()
函数的,因此可以在绘图之前计算移动平均值,而这个新的rolling_mean
将允许您保留以前的年终日期以保持平均值继续,绘制rolling_mean
而不是sales
。只要使用geom_line()
,因为你正在做geom_ma()
在其他情况下会做的事情,使用SMA。SMA()
函数的n参数和geom_ma()
的设置完全一样。所以你只需要修改那里的n。---因主要是均线问题而离职----
有点古怪,但是这个:1.使年成为因子,2.将新年值分配给同一(闰年)(例如,2020)的每个日期,3.按年绘制仅示出月/日标签和颜色的新假日期以发现季节趋势。
jgwigjjp2#
使用
feasts
包中的gg_season
:创建于2023年3月16日,使用reprex v2.0.2