我有一个数据帧,它由三列(PIT,CIT和VAT)组成。我的意图是使用Forecast软件包对这三个时间序列中的每一个进行预测。因此,我将数据帧转换为ts对象。
现在我想使用预报功能(这是Forecast软件包的一部分)进行预报。所以我编写了以下代码行:
SNAIVE_PIT<-snaive(TS_REVENUES[, 'PIT'],h=5)
SNAIVE_CIT<-snaive(TS_REVENUES[, 'CIT'],h=5)
SNAIVE_VAT<-snaive(TS_REVENUES[, 'VAT'],h=5)
但是我的意图是使用某些功能(例如loop,for或其他功能)简化此代码,该功能可以针对这三个时间序列(PIT,CIT和VAT)中的每一个自动计算预测? 我问这个问题是因为这个时间序列只是整个序列的一小部分,我必须简化此预测程序。
#CODE
library(forecast)
# Making data frame
DATA_SET<-data.frame(
PIT=seq(1, 48, by = 2),
CIT=seq(1, 24, by = 1),
VAT=seq(1, 94, by = 4)
)
View(DATA_SET)
# Making TS object
TS_REVENUES<-ts(DATA_SET,start=c(2016,1),frequency = 12)
# Extracting column names from TS object
COL_NAMES_TS<-TS_REVENUES[0:0,]
COL_NAMES_TS
# Making forecasting with Forecast package
SNAIVE_PIT<-snaive(TS_REVENUES[, 'PIT'],h=5)
SNAIVE_CIT<-snaive(TS_REVENUES[, 'CIT'],h=5)
SNAIVE_VAT<-snaive(TS_REVENUES[, 'VAT'],h=5)
答案 0 :(得分:1)
如果我对您的理解正确,那么您想循环浏览数据框中的每一列并从中进行预测。如果是这样,我认为下面的代码会有所帮助。
library(forecast)
# Making data frame
DATA_SET<-data.frame(
PIT=seq(1, 48, by = 2),
CIT=seq(1, 24, by = 1),
VAT=seq(1, 94, by = 4)
)
View(DATA_SET)
for(i in 1:ncol(DATA_SET)){
# Build a ts for this column
timeseries <- ts(DATA_SET[,i], start=c(2016,1), frequency = 12)
# Build a foreacst based on the ts
forecast <- snaive(timeseries,h=5)
# rename the forecast according to the original variable name
colname <- colnames(DATA_SET)[i]
forecastName <- paste("SNAIVE_",colname," <- forecast",sep="")
eval(parse(text = forecastName))
}