建立自己的预测功能

时间:2019-04-17 09:58:34

标签: r for-loop

我有一个数据帧,它由三列(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) 

1 个答案:

答案 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))
}