我正在尝试使用expand.grid创建3个订单参数的所有组合,范围如下所示。然后我尝试使用Arima创建参数组合的所有模型并应用。我在下面有伪代码,概述了我正在尝试做的事情以及我在下面做的尝试。该尝试返回错误。如果有人能够看到我做错了什么,请指出如何修复代码,或类似的例子,我们将不胜感激。
伪代码:
library("fpp")
h <- 5
dataTraiz <- window(hsales,end=1989.99)
##Create models for all combinations of p 10 to 0, d 2 to 0, q 5 to 0
Mod1 <- Arima(dataTraiz, order=c(10,2,5)
Mod2 <- Arima(dataTraiz, order=c(9,2,5)
Mod3 <- Arima(dataTraiz, order=c(8,2,5)
.
.
.
Mod5 <- Arima(dataTraiz, order=c(10,2,0)
尝试:
x<-1:10
y<-1:2
z<-1:5
dfG<-expand.grid(x,y,z)
n <-function(a,b,c,dat){
m=Arima(dataTraiz, order=c(a,b,c))
return(m)
}
mod<-apply(dfG,1,n)
错误:
Arima中的错误(dataTraiz,order = c(a,b,c)): 参数“c”缺失,没有默认值
答案 0 :(得分:1)
我建议使用apply
对象(例如从data.frames
返回的对象)避免使用expand.grid
。您可以使用Map
为不同的参数值集调用函数< / p>
mod <- with(dfG, Map(function(a,b,c) {
Arima(dataTraiz, order=c(a,b,c))
}, Var1, Var2, Var3))
使用with()
,我们可以在没有dfG
的情况下直接访问dfG$Var
的Var列。然后我们将值传递给Map
,它将它们传递给我们按给定顺序提供的函数中的每个参数。
另一种方法是对函数进行向量化,以便迭代参数元组。例如
n <- function(a,b,c) {Arima(dataTraiz, order=c(a,b,c))}
mod <- do.call(Vectorize(n, SIMPLIFY=FALSE), unname(dfG))