【问题标题】:Obtaining results as a matrix in a self created r function在自行创建的 r 函数中以矩阵形式获取结果
【发布时间】:2016-11-01 23:33:01
【问题描述】:

以下代码运行,但 返回(950 个数值)我所期望的(想要的)。在下面的代码中,result 是一个 72 行 3 列的矩阵。 作为输出,我想要一个包含 72 列和 length(spots) 的矩阵。我尝试初始化fcasts<- matrix(0, nrow=length(spots), ncol=72),但随后代码无法运行。

y<- ts(rnorm(1000),start = 1850, frequency=1)

library(forecast)

#Searching for the best models
order.matrix<-matrix(0,nrow = 3, ncol = 6 * 2 * 6)
 aic.vec<- numeric(6 * 2 * 6)
 k<-1

 for(p in 0:5) for(d in 0:1) for(q in 0:5){
    order.matrix[,k]<-c(p,d,q)
    aic.vec[k]<- AIC(Arima(y, order=c(p,d,q)))
    k<-k+1
 }
 ind<- order(aic.vec,decreasing=F)
 aic.vec<- aic.vec[ind]
 order.matrix<- order.matrix[,ind]
order.matrix<- t(order.matrix)
result<- cbind(order.matrix,aic.vec)


SlideFunction<- function(data, window, step){

    total<- length(data)
    spots<- seq(from=1, to=(total-window), by=step)
    fit<- vector(mode="list",length=72)
    #fcasts<- matrix(0,nrow=length(spots),ncol=72)
    fcasts<- numeric(length(spots))
    for(i in 1:length(spots)){
    for(j in 1:72){

    p<- result[j,1]
    d<- result[j,2]
    q<- result[j,3]

   #Note I am using Arima(in forecast package) not arima
        fit[[j]]<- Arima(data[spots[i]:(spots[i]+window)], order=c(p,d,q), method="CSS")

        fcasts[i]<- forecast(fit[[j]], h=step)$mean 
#I expected(would like to have) 72 one-step ahead prediction for each fcasts i.e, store values for each arima model.

        }

    }
        return(fcasts)
}
SlideFunction(y,50,1)

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 我添加了缺少的库语句,但上面的代码仍然给出Error: object 'result' not found 错误。我只是想确保我们在同一个页面上,然后再花时间讨论这个,因为你说它运行。你是否也遇到同样的错误?
  • 我也为结果添加了代码。我希望这个问题现在更清楚了。
  • 是否有可能让程序更快,从而可以在更短的时间内获得非常大的数据的结果?

标签: r function loops matrix time-series


【解决方案1】:

我想这就是你想要的:

SlideFunction<- function(data, window, step) {
  total<- length(data)
  spots<- seq(from=1, to=(total-window), by=step)
  fcasts<- matrix(0,nrow=length(spots),ncol=72)
  for(i in 1:length(spots)) {
    for(j in 1:72){
      p<- result[j,1]
      d<- result[j,2]
      q<- result[j,3]
      fit <- Arima(data[spots[i]:(spots[i]+window)], order=c(p,d,q), method="CSS")
      fcasts[i, j] <- forecast(fit, h=step)$mean 
      }
    }
  return(fcasts)
  }

SlideFunction(y,50,1)

但是完成需要相当长的时间,我没有耐心等待。我尝试使用较小的数据集:

y<- ts(rnorm(100),start = 1850, frequency=1)

和5而不是72,知道结果是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-20
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多