2016-04-27 18 views
0

expand.gridを使用して、次のような3つのパラメータのすべての組み合わせを作成しようとしています。私は、Arimaを使ってパラメータの組み合わせのすべてのモデルを作成して適用しようとしています。私は、私がやろうとしていることを概説した疑似コードとその下で行った試みを持っています。試行がエラーを返しました。誰かが私が間違っていることを見ることができれば、コードを修正する方法、または同様の例を指摘すれば、それは非常に高く評価されます。expand.gridから関数を使用して関数にパラメータを渡します。

擬似コード:

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) 

エラー:

アリマ(dataTraiz、オーダー= C(A、B、C))でエラー: 引数 " c "が不足しています。既定値はありません

答えて

0

私は避けることをお勧めしますapplydata.framesオブジェクト(expand.gridから返されたオブジェクトなど)。あなたは、パラメータの異なるセットのための関数を呼び出すMapを使用することができますwith()を使用

mod <- with(dfG, Map(function(a,b,c) { 
    Arima(dataTraiz, order=c(a,b,c)) 
}, Var1, Var2, Var3)) 

値私たちはdfG$Varせずに直接せずにdfGのVarの列にアクセスすることができます。次に、値をMapに渡すだけで、与えられた順番で関数の各パラメータに渡されます。

代わりに、関数をベクトル化してパラメータタプルを繰り返し処理する方法もあります。たとえば、

n <- function(a,b,c) {Arima(dataTraiz, order=c(a,b,c))} 
mod <- do.call(Vectorize(n, SIMPLIFY=FALSE), unname(dfG)) 
+0

ありがとうございます!これは非常に役に立ちます。私は2番目のvectorizeの例で、modの構造は何かを理解しようとしていますか?モデルを作成し、各注文の組み合わせごとに保存しますか?もしそうなら、あなたはどのようにモデルを選択しますか? – user6183069

+0

両方ともモデルのリストを作成します。あなたは 'mod [[1]]'、 'mod [[2]]'などでそれらを抽出します。 – MrFlick

+0

すぐに私に戻ってくれてありがとう。あなたのコードは今朝私のためにうまくいきました。私はちょうど少し前にもう一度それを実行しようとした今、私は以下のエラーが表示されます。今すぐコードを実行すると同じ問題が発生しますか?何が原因なのか考えていますか?エラー:stats :: arimaのエラー(x = x、order = order、seasonal = seasonal、include.mean = include.mean、: CSSの非固定AR部分 – user6183069

関連する問題