全部, 我有一个看似基本的问题,但我很挣扎。我正在尝试跨两组数据使用Auto.Arima功能。有两个标签:
GO.DIBTWS003_BATT_VOLT and GO.MIPLES004_BATT_AVE
数据是:
tag time value
1 GO.DIBTWS003_BATT_VOLT 2015-08-05 04:00:00 8.51
2 GO.DIBTWS003_BATT_VOLT 2015-08-05 08:00:00 8.51
3 GO.DIBTWS003_BATT_VOLT 2015-08-05 08:15:00 8.46
4 GO.DIBTWS003_BATT_VOLT 2015-08-05 08:30:00 8.51
5 GO.MIPLES004_BATT_AVE 2015-08-05 07:00:00 7.70
6 GO.MIPLES004_BATT_AVE 2015-08-05 08:30:00 7.70
7 GO.MIPLES004_BATT_AVE 2015-08-05 08:45:00 7.59
8 GO.MIPLES004_BATT_AVE 2015-08-05 09:00:00 7.66
9 GO.MIPLES004_BATT_AVE 2015-08-05 09:15:00 7.72
10 GO.MIPLES004_BATT_AVE 2015-08-05 09:30:00 7.72
11 GO.MIPLES004_BATT_AVE 2015-08-05 09:45:00 7.73
我想运行一个脚本来为每个模型找到最佳的Arima模型,然后绘制他们的预测。打破这两个数据集的最佳方法是什么,运行auto.arima和预测?
答案 0 :(得分:0)
鉴于没有足够的信息来推断您的预测意图的详细信息,并假设有关arima的知识,我将提供您可能必须适应您的数据和需求的示例代码:
library(dplyr)
preds <- data %>%
group_by(tag) %>%
do( {
xt <- ts( .[,3], frequency=12)
fit <- arima(xt ,
order= c(3,0,0),
method="ML"
)
pred <- forecast(fit, h=12)
data.frame(.,pred)
})
您实际上在做的是使用dplyr的链接运算符%&gt;%来链接操作。您可以参考Stackoverflow线程:Accessing grouped data in dplyr以更好地理解do()函数如何工作,但实质上,您将每个数据子集传递给do()函数。 do函数将数据转换为timeseries对象(您必须根据需要定义频率),适合arima模型(如果需要,可以将auto.arima()置于此处),然后预测(再次适应您的需求) ,最后返回预测。玩得更好理解。