【问题标题】:Build and expand function for forecasting构建和扩展预测功能
【发布时间】:2019-09-07 17:36:19
【问题描述】:

此代码使用预测包进行预测。此代码的最终输出是使用 snaive 方法预测的三个列表(SNAIVE_PIT、SNAIVE_CIT 和 SNAIVE_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)

      # FOR LOOP
     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))
      }

但是编码并没有以上面的代码结束。即我必须用一些额外的东西来扩展这个代码。

首先,是如何将这一行放在上面的代码中(部分FOR LOOP)?

#NEW CODE 1
SNAIVE_ALL<-mapply(SNAIVE_PIT, SNAIVE_CIT,SNAIVE_VAT, FUN=list, SIMPLIFY=FALSE)

其次,是如何将这一行放在上面的代码中(部分FOR LOOP)?

#NEW CODE 2
   SNAIVE_PIT_ACCURANCY<-accuracy(SNAIVE_PIT)
    SNAIVE_CIT_ACCURANCY<-accuracy(SNAIVE_CIT)
     SNAIVE_VAT_ACCURANCY<-accuracy(SNAIVE_VAT)

  SNAIVE_ACCURANCY<-rbind(SNAIVE_PIT_ACCURANCY,SNAIVE_CIT_ACCURANCY,SNAIVE_VAT_ACCURANCY)

那么任何人都可以帮助我处理这段代码吗?

【问题讨论】:

    标签: r for-loop


    【解决方案1】:

    我个人认为你这样做是完全错误的,R 代码并不是要一直生成和组合列表,你可以以函数的方式完成所有这些操作,首先你需要考虑一下列表结构会的。

    我推荐以下结构

    每个数据集都是一个列表,每个列表接收一个函数,生成两个列表,预测和准确度。

    让我们编码吧。

    # I recommend spliting this function but I am lazy
    
    prediction_funtion <- function(x) {
      x <- ts(x, start=c(2016,1), frequency = 12)
      model <- snaive(x)
      forecasts_results <- forecast(model,5)
      accuracy_results <- accuracy(model)
      return(list(forecast = forecasts_results,accuracy =accuracy_results))
    }
    
    map(list_df,prediction_funtion)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-12
      相关资源
      最近更新 更多