这是我第一次开始制作时间序列,因此请原谅我的方法有任何不妥之处。
我有多个群组的月度销售数据。数据是3年,我想实现相同的时间序列分析。我不确定3年的数据是否真的足够好,但是我想更好地理解它。
我目前了解时间序列被分解为趋势,季节性和随机三个部分。
我想将每个组的销售数据拆分为趋势,季节性和随机部分。由于趋势和季节性消失,因此我想只使用随机来更好地理解销售指标。
由于数据是每月,因此我需要使用乘法。 我应该使用STL还是分解?
我有基本的分解代码,但不确定如何将多个组合用于多个组,以识别每个组的趋势,季节性和随机性。
我不是指ARIMA模型。我基本上是指标准的时间序列方法。
以下是我的数据的样子。
Group Date Month Sales
Group1 Jan-15 1 75030
Group1 Feb-15 2 16073
Group1 Mar-15 3 17161
Group1 Apr-15 4 94946
Group1 May-15 5 62999
Group1 Jun-15 6 4698
Group1 Jul-15 7 76743
Group1 Aug-15 8 28800
Group1 Sep-15 9 12225
Group1 Oct-15 10 71793
Group1 Nov-15 11 26686
Group1 Dec-15 12 6252
Group1 Jan-16 13 82698
Group1 Feb-16 14 71201
Group1 Mar-16 15 65798
Group1 Apr-16 16 4407
Group1 May-16 17 7491
Group1 Jun-16 18 24366
Group1 Jul-16 19 99616
Group1 Aug-16 20 74443
Group1 Sep-16 21 54122
Group1 Oct-16 22 20762
Group1 Nov-16 23 91376
Group1 Dec-16 24 18693
Group1 Jan-17 25 30395
Group1 Feb-17 26 82049
Group1 Mar-17 27 79701
Group1 Apr-17 28 38862
Group1 May-17 29 84802
Group1 Jun-17 30 81715
Group1 Jul-17 31 60786
Group1 Aug-17 32 88731
Group1 Sep-17 33 28502
Group1 Oct-17 34 79245
Group1 Nov-17 35 15553
Group1 Dec-17 36 3237
Group2 Jan-15 1 8990
Group2 Feb-15 2 47516
Group2 Mar-15 3 15076
Group2 Apr-15 4 60888
Group2 May-15 5 47111
Group2 Jun-15 6 7770
Group2 Jul-15 7 25080
Group2 Aug-15 8 46586
Group2 Sep-15 9 12595
Group2 Oct-15 10 71883
Group2 Nov-15 11 21634
Group2 Dec-15 12 78799
Group2 Jan-16 13 57596
Group2 Feb-16 14 35685
Group2 Mar-16 15 68518
Group2 Apr-16 16 35661
Group2 May-16 17 65294
Group2 Jun-16 18 62602
Group2 Jul-16 19 13506
Group2 Aug-16 20 49215
Group2 Sep-16 21 32008
Group2 Oct-16 22 27924
Group2 Nov-16 23 56146
Group2 Dec-16 24 23975
Group2 Jan-17 25 18686
Group2 Feb-17 26 77076
Group2 Mar-17 27 63992
Group2 Apr-17 28 38087
Group2 May-17 29 19846
Group2 Jun-17 30 46823
Group2 Jul-17 31 11035
Group2 Aug-17 32 73686
Group2 Sep-17 33 35523
Group2 Oct-17 34 97417
Group2 Nov-17 35 27954
Group2 Dec-17 36 79004
以下是我的代码。
x <- ts(df, start = c(2015, 1), end = c(2017, 12), frequency = 12)
m <- decompose(x)
如果我的方法有问题,请纠正我,因为我不熟悉时间序列建模。
谢谢,
杰
答案 0 :(得分:0)
第一列是factor
,因此您可以使用tapply
函数按组提取时间序列。结果将存储在list
中。您可以将lapply
与agruments list
的时间序列和函数decompose
结合使用。
要访问分解结果,您可以将list
编入索引,例如dcs[[1]]
将为第1组提取分解。
df <- structure(list(Group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L), .Label = c("Group1", "Group2"), class = "factor"), Date = structure(c(13L,
10L, 22L, 1L, 25L, 19L, 16L, 4L, 34L, 31L, 28L, 7L, 14L, 11L,
23L, 2L, 26L, 20L, 17L, 5L, 35L, 32L, 29L, 8L, 15L, 12L, 24L,
3L, 27L, 21L, 18L, 6L, 36L, 33L, 30L, 9L, 13L, 10L, 22L, 1L,
25L, 19L, 16L, 4L, 34L, 31L, 28L, 7L, 14L, 11L, 23L, 2L, 26L,
20L, 17L, 5L, 35L, 32L, 29L, 8L, 15L, 12L, 24L, 3L, 27L, 21L,
18L, 6L, 36L, 33L, 30L, 9L), .Label = c("Apr-15", "Apr-16", "Apr-17",
"Aug-15", "Aug-16", "Aug-17", "Dec-15", "Dec-16", "Dec-17", "Feb-15",
"Feb-16", "Feb-17", "Jan-15", "Jan-16", "Jan-17", "Jul-15", "Jul-16",
"Jul-17", "Jun-15", "Jun-16", "Jun-17", "Mar-15", "Mar-16", "Mar-17",
"May-15", "May-16", "May-17", "Nov-15", "Nov-16", "Nov-17", "Oct-15",
"Oct-16", "Oct-17", "Sep-15", "Sep-16", "Sep-17"), class = "factor"),
Month = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L,
13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L,
25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L,
1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L,
15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L, 26L,
27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L), Sales = c(75030L,
16073L, 17161L, 94946L, 62999L, 4698L, 76743L, 28800L, 12225L,
71793L, 26686L, 6252L, 82698L, 71201L, 65798L, 4407L, 7491L,
24366L, 99616L, 74443L, 54122L, 20762L, 91376L, 18693L, 30395L,
82049L, 79701L, 38862L, 84802L, 81715L, 60786L, 88731L, 28502L,
79245L, 15553L, 3237L, 8990L, 47516L, 15076L, 60888L, 47111L,
7770L, 25080L, 46586L, 12595L, 71883L, 21634L, 78799L, 57596L,
35685L, 68518L, 35661L, 65294L, 62602L, 13506L, 49215L, 32008L,
27924L, 56146L, 23975L, 18686L, 77076L, 63992L, 38087L, 19846L,
46823L, 11035L, 73686L, 35523L, 97417L, 27954L, 79004L)), class = "data.frame", row.names = c(NA,
-72L))
tss <- tapply(df$Sales, df$Group, ts, start = c(2015, 1), frequency = 12)
dcs <- lapply(tss, decompose)