建立滚动平均预测
Building a rolling mean forecast
我有一系列称为零件的间歇性需求(下面的示例),我想开发训练集和测试集的滚动平均预测。我的代码也在下面。系列 fitmean 计算滚动平均值,但有两个问题:
- 当我真正想要的是获得 12 的滚动平均值时,它添加了第 13 个元素;并且,
- 日期从 2016 年 6 月到 2017 年 6 月,所以当我减去 testparts 时,我只得到 2017 年 1 月到 6 月的 6 个值。
有没有办法 (1) 删除 fitmean 末尾的第 13 个元素,以及 (2) 更改日期以便它们与 testparts 匹配?
谢谢。
library(forecast,zoo)
parts<-matrix(c(0,0,0,0,0,0,2,0,0,0,0,0,3,0,0,0,0,0,1,0,0,7,0,0),nrow=24,ncol=1)
parts<-ts(parts,f=12,start=c(2016,1))
maemean<-matrix(NA,nrow=12,ncol=1)
trainparts<-window(parts,end=c(2016,12))
testparts<-window(parts,start=c(2017,1),end=c(2017,12))
fitmean<-round(rollapply(parts, width=12, by = 1, FUN = mean))
maemean<-abs(fitmean-testparts)
Jan-16 0
Feb-16 0
Mar-16 0
Apr-16 0
May-16 0
Jun-16 0
Jul-16 2
Aug-16 0
Sep-16 0
Oct-16 0
Nov-16 0
Dec-16 0
Jan-17 3
Feb-17 0
Mar-17 0
Apr-17 0
May-17 0
Jun-17 0
Jul-17 1
Aug-17 0
Sep-17 0
Oct-17 7
Nov-17 0
Dec-17 0
澄清:
上面的列表应该分解为从 1 月 16 日到 12 月 16 日的训练集和从 1 月 17 日到 12 月 17 日的测试集。我想做的是使用滚动平均值,因此 Jan-16 到 Dec-16 的平均值(四舍五入,即 0)成为 Jan-17 的预测,依此类推,即 Feb-16 到 Jan-17,等等。输出应该是这样的
Jan-17 0
Feb-17 0
Mar-17 0
Apr-17 0
May-17 0
Jun-17 0
Jul-17 0
Aug-17 0
Sep-17 0
Oct-17 0
Nov-17 1
Dec-17 1
不幸的是,我用 13 副 12 元素得到这个。
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2016 0 0 0 0 0 0 0
2017 0 0 0 1 1 1
1) width = list(...) 从问题中删除所有不相关的代码并更改 rollapply
行我们有这个 -seq(12)
是一个偏移向量,指示 rollapply
通过第一个先验值、第二个先验值、...第十二个先验值来表示每个点。
library(zoo)
# test data
parts <- matrix(c(0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 0, 0, 7, 0, 0),
nrow = 24, ncol = 1)
parts <- ts(parts, freq = 12, start = c(2016, 1))
round(rollapply(parts, list(-seq(12)), FUN = mean))
给予:
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2017 0 0 0 0 0 0 0 0 0 0 1 1
2) rollsumr 另一种方法是取宽度为 13 的滚动总和,然后减去当前值并除以 12:
round((rollsumr(parts, 13) - parts) / 12)
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2017 0 0 0 0 0 0 0 0 0 0 1 1
我有一系列称为零件的间歇性需求(下面的示例),我想开发训练集和测试集的滚动平均预测。我的代码也在下面。系列 fitmean 计算滚动平均值,但有两个问题:
- 当我真正想要的是获得 12 的滚动平均值时,它添加了第 13 个元素;并且,
- 日期从 2016 年 6 月到 2017 年 6 月,所以当我减去 testparts 时,我只得到 2017 年 1 月到 6 月的 6 个值。
有没有办法 (1) 删除 fitmean 末尾的第 13 个元素,以及 (2) 更改日期以便它们与 testparts 匹配?
谢谢。
library(forecast,zoo)
parts<-matrix(c(0,0,0,0,0,0,2,0,0,0,0,0,3,0,0,0,0,0,1,0,0,7,0,0),nrow=24,ncol=1)
parts<-ts(parts,f=12,start=c(2016,1))
maemean<-matrix(NA,nrow=12,ncol=1)
trainparts<-window(parts,end=c(2016,12))
testparts<-window(parts,start=c(2017,1),end=c(2017,12))
fitmean<-round(rollapply(parts, width=12, by = 1, FUN = mean))
maemean<-abs(fitmean-testparts)
Jan-16 0
Feb-16 0
Mar-16 0
Apr-16 0
May-16 0
Jun-16 0
Jul-16 2
Aug-16 0
Sep-16 0
Oct-16 0
Nov-16 0
Dec-16 0
Jan-17 3
Feb-17 0
Mar-17 0
Apr-17 0
May-17 0
Jun-17 0
Jul-17 1
Aug-17 0
Sep-17 0
Oct-17 7
Nov-17 0
Dec-17 0
澄清:
上面的列表应该分解为从 1 月 16 日到 12 月 16 日的训练集和从 1 月 17 日到 12 月 17 日的测试集。我想做的是使用滚动平均值,因此 Jan-16 到 Dec-16 的平均值(四舍五入,即 0)成为 Jan-17 的预测,依此类推,即 Feb-16 到 Jan-17,等等。输出应该是这样的
Jan-17 0
Feb-17 0
Mar-17 0
Apr-17 0
May-17 0
Jun-17 0
Jul-17 0
Aug-17 0
Sep-17 0
Oct-17 0
Nov-17 1
Dec-17 1
不幸的是,我用 13 副 12 元素得到这个。
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2016 0 0 0 0 0 0 0
2017 0 0 0 1 1 1
1) width = list(...) 从问题中删除所有不相关的代码并更改 rollapply
行我们有这个 -seq(12)
是一个偏移向量,指示 rollapply
通过第一个先验值、第二个先验值、...第十二个先验值来表示每个点。
library(zoo)
# test data
parts <- matrix(c(0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 0, 0, 7, 0, 0),
nrow = 24, ncol = 1)
parts <- ts(parts, freq = 12, start = c(2016, 1))
round(rollapply(parts, list(-seq(12)), FUN = mean))
给予:
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2017 0 0 0 0 0 0 0 0 0 0 1 1
2) rollsumr 另一种方法是取宽度为 13 的滚动总和,然后减去当前值并除以 12:
round((rollsumr(parts, 13) - parts) / 12)
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2017 0 0 0 0 0 0 0 0 0 0 1 1