Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用purrr/tidyverse将ets、auto.arima等多个时间序列模型应用于R数据中的组?_R_Tidyverse_Purrr_Forecast_Facebook Prophet - Fatal编程技术网

如何使用purrr/tidyverse将ets、auto.arima等多个时间序列模型应用于R数据中的组?

如何使用purrr/tidyverse将ets、auto.arima等多个时间序列模型应用于R数据中的组?,r,tidyverse,purrr,forecast,facebook-prophet,R,Tidyverse,Purrr,Forecast,Facebook Prophet,我的数据集如下所示。我试图使用ets、auto.arima、Prophet或任何其他模型预测未来2个月的“金额”。但我的问题是,我想根据A、B、C三组预测未来2个月的金额。我不知道在R里怎么做 data = data.frame(Date=c('2017-01-01', '2017-02-01', '2017-03-01', '2017-04-01','2017-05-01','2017-06-01','2017-01-01', '2017-02-01', '2017-03-01', '

我的数据集如下所示。我试图使用ets、auto.arima、Prophet或任何其他模型预测未来2个月的“金额”。但我的问题是,我想根据A、B、C三组预测未来2个月的金额。我不知道在R里怎么做

    data = data.frame(Date=c('2017-01-01', '2017-02-01', '2017-03-01', '2017-04-01','2017-05-01','2017-06-01','2017-01-01', '2017-02-01', '2017-03-01', '2017-04-01','2017-05-01','2017-06-01','2017-01-01', '2017-02-01', '2017-03-01', '2017-04-01','2017-05-01','2017-06-01'),
                  Group=c('A','A','A','A','A','A','B','B','B','B','B','B','C','C','C','C','C','C'),
                  Amount=c('12.1','13','15','10','12','9.0','12.5','13.3','14.8','11','10','12.1','13','12.2','11','10.9','13.4','11.1'))

data

         Date Group Amount
1  2017-01-01     A   12.1
2  2017-02-01     A     13
3  2017-03-01     A     15
4  2017-04-01     A     10
5  2017-05-01     A     12
6  2017-06-01     A    9.0
7  2017-01-01     B   12.5
8  2017-02-01     B   13.3
9  2017-03-01     B   14.8
10 2017-04-01     B     11
11 2017-05-01     B     10
12 2017-06-01     B   12.1
13 2017-01-01     C     13
14 2017-02-01     C   12.2
15 2017-03-01     C     11
16 2017-04-01     C   10.9
17 2017-05-01     C   13.4
18 2017-06-01     C   11.1
我需要按组(A、B、C)预测多个单变量时间序列模型(ets、auto.arima和prophet)。假设各组相互独立。另外,我们如何提取误差指标和预测点(如前2个周期)(在数据框中)并绘制预测图,再次按组分组。此处需要帮助


迭代方法,如使用tidyverse/purrr或sweep等包,可能是一种解决方案

首先将日期转换为
yearmon
类,以使月份间隔规则,因为日期不是由于每个月的天数不同造成的
yearmon
在内部表示日期,1月为+0年,2月为+1/12年,…,12月为+11/12年。如果需要,随后可以使用
as.numeric
将日期从
yearmon>转换为数字,以获得内部表示

calc
表示对单个组执行计算的函数。用你的函数替换它。它的第一个参数应该是带有
日期
金额
列的数据框。附加参数是可选的,仅当需要传递不随组变化的固定参数时才需要。在下面的示例中,我们将一个字符串,
“Hello”
传递给
msg
参数。该函数可以返回任何类型的对象,如普通向量、列表或其他对象

在最后一行中,
by
将调用
calc
,每组一次,返回
calc
返回值列表,每组一个组件

library(zoo)

data2 <- transform(data, 
  Date = as.yearmon(Date), 
  Amount = as.numeric(Amount)
)

calc <- function(dat, msg) {
  print(msg)
  fm <- lm(Amount ~ Date, dat)
  predict(fm, list(Date = tail(dat$Date, 1) + 2/12))
}
by(data2[-2], data2[[2]], calc, msg = "Hello")
图书馆(动物园)
数据2