ARIMAXモデルをRに適合させる方法は?

毎時測定の4つの異なる時系列があります:

  1. 家の中の熱消費量
  2. 家の外の温度
  3. 日射量
  4. 風速

家の中の熱消費量を予測できるようにしたい。年間ベースと日ベースの両方で、明確な季節的傾向があります。異なるシリーズの間には明確な相関関係があるので、ARIMAXモデルを使用してそれらを適合させたいと思います。これは、パッケージTSAの関数arimaxを使用して、Rで実行できます。

この関数のドキュメントを読み、伝達関数を読み込もうとしましたが、これまでのところ、私のコードは次のとおりです。

regParams = ts.union(ts(dayy)) transferParams = ts.union(ts(temp)) model10 = arimax(heat,order=c(2,1,1),seasonal=list(order=c(0,1,1),period=24),xreg=regParams,xtransf=transferParams,transfer=list(c(1,1)) pred10 = predict(model10, newxreg=regParams) 

表示:ここに画像の説明を入力

黒い線が実際の場所測定データであり、緑色の線は比較して私の適合モデルです。良いモデルではないだけでなく、明らかに何かが間違っています。

ARIMAXモデルと伝達関数に関する私の知識は限られていることを認めます。関数arimax()では、(私が理解している限り)xtransfは、(伝達関数を使用して)メインの時系列を予測するために使用したい外因性の時系列です。しかし、xregとxtransfの実際の違いは何ですか?

より一般的には、私は何を間違えたのでしょうか。 lm(heat〜temp radi wind * time)から得られるものよりも良いフィット感を得られるようにしたいと思います。

編集:いくつかのコメントに基づいて、転送を削除し、代わりにxregを追加しました:

regParams = ts.union(ts(dayy), ts(temp), ts(time)) model10 = arimax(heat,order=c(2,1,1),seasonal=list(order=c(0,1,1),period=24),xreg=regParams) 

ここで、dayyは「その年の数日」であり、timeはその日の時間です。温度は再び外気温です。これにより、次の結果が得られます。

ここに画像の説明を入力してください

これは優れていますが、期待したほどではありません。

回答

ARIMAモデルを使用して2レベルの季節性を持つシリーズをモデル化するのに少し問題が発生します。これを正しく行うには、正しく設定する必要があります。単純な線形モデルを検討しましたか?それらはARIMAモデルよりもはるかに高速で簡単に適合でき、さまざまな季節性レベルにダミー変数を使用すると、次のようになります。多くの場合、非常に正確です。

  1. 1時間ごとのデータがあると想定しているため、TSオブジェクトが24の頻度で設定されていることを確認してください。
  2. 他のレベルのモデルを作成できます。ダミー変数を使用した季節性。たとえば、年の月を表す0/1ダミーのセットが必要な場合があります。
  3. xregにダミー変数を含めます。引数、および共変量(temperatuなど) re)。
  4. ベースRのarima関数をモデルに適合させます。この関数は、xreg引数を使用してARMAXモデルを処理できます。
  5. 予測パッケージの Arima 関数と auto.arima 関数を試してください。 auto.arimaは、arimaモデルに適したパラメーターを自動的に見つけるので便利です。ただし、データセットに収まるにはFOREVERが必要です。
  6. 季節性のレベルごとにダミー変数を使用して、arimaパッケージのtslm関数を試してください。これは有馬モデルよりもはるかに速く適合し、状況によってはさらにうまく機能する可能性があります。
  7. 4/5/6が機能しない場合は、伝達関数について心配し始めます。前にクロールする必要があります。歩くことができます。
  8. 将来の予測を計画している場合は、最初にxreg変数を予測する必要があります。これは季節のダミーにとっては簡単ですが、作成方法を考える必要があります。良い天気予報。履歴データの中央値を使用する可能性がありますか?

これにアプローチする方法の例を次に示します:

#Setup a fake time series set.seed(1) library(lubridate) index <- ISOdatetime(2010,1,1,0,0,0)+1:8759*60*60 month <- month(index) hour <- hour(index) usage <- 1000+10*rnorm(length(index))-25*(month-6)^2-(hour-12)^2 usage <- ts(usage,frequency=24) #Create monthly dummies. Add other xvars to this matrix xreg <- model.matrix(~as.factor(month))[,2:12] colnames(xreg) <- c("Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec") #Fit a model library(forecast) model <- Arima(usage, order=c(0,0,0), seasonal=list(order=c(1,0,0), period=24), xreg=xreg) plot(usage) lines(fitted(model),col=2) #Benchmark against other models model2 <- tslm(usage~as.factor(month)+as.factor(hour)) model3 <- tslm(usage~as.factor(month)) model4 <- rep(mean(usage),length(usage)) #Compare the 4 models library(plyr) #for rbind.fill ACC <- rbind.fill( data.frame(t(accuracy(model))), data.frame(t(accuracy(model2))), data.frame(t(accuracy(model3))), data.frame(t(accuracy(model4,usage))) ) ACC <- round(ACC,2) ACC <- cbind(Type=c("Arima","LM1","Monthly Mean","Mean"),ACC) ACC[order(ACC$MAE),] 

コメント

  • fited()関数とは何ですか。これを使用すると、predict(model10、newxreg = regParams)よりもはるかに良い結果が得られます。
  • @utdiscant:predict()は予測に使用されますが、fitted()は、過去の期間にわたるモデルの適合を返します。より具体的なヘルプが必要な場合は、再現可能な例をいくつかのコードとともに投稿する必要があります。
  • @utdiscant:また、dayyをxregとして使用すると、24の観測値しかないため、過剰適合のリスクがあります。 1日あたり。月を使用すると、より良い予測結果が得られる可能性があります。
  • @utdiscant:さらに、時間ベースのxregはダミー変数である必要があります。現在モデル化している方法は、heatが時間とともに直線的に増加し、時間が1に戻ったときに下にジャンプすることを期待することです。ダミー変数を使用する場合、それぞれ1日の時間帯には、'独自の効果があります。サンプルコードを実行し、xregオブジェクトの作成方法に注意を払ってください。
  • statsおよびforecastパッケージのARIMA関数の欠点の1つは、プローバー伝達関数に適合しないことです。 。 stats::arima関数のドキュメントには、次のように記載されています。 xreg項が含まれている場合、線形回帰(include.meanがtrueであり、差異がない場合は定数項を使用) )は誤差項のARMAモデルに適合しています。したがって、実際に伝達関数を適合させる必要がある場合は、TSA::arimax関数がTSA::arimax関数を使用する方法のようです。 div id = “c6e3299f5b”>

回答

私はRを使用してしばらくの間負荷予測を行い、forecastパッケージとその貴重な機能(auto.arimaなど)を使用することをお勧めします。

次のコマンドを使用してARIMAモデルを構築できます:

model = arima(y, order, xreg = exogenous_data) 

yを使用して予測(I dayy)、orderモデルの順序(季節性を考慮)、およびexogenous_dataを想定します。温度、太陽放射など。関数auto.arimaは、最適なモデルの順序を見つけるのに役立ちます。 「予測」パッケージに関する簡単なチュートリアルは、ここにあります。

コメント

  • 予測されるのは熱(家の熱消費量)です。

回答

I個人的には伝達関数を理解していませんが、xtransfxregが逆になっていると思います。少なくともRのベースarimaでは、外因性変数が含まれているのはxregです。伝達関数がarimaを記述しているという印象があります。 ではなくem>どのように(遅れたデータが将来の値に影響する)。

xregを使用してみますarimaxが伝達関数を必要とする場合は、おそらくarimaを使用して、外因性変数を使用します。問題は、モデルが毎日であるが、データに両方があることです。毎日および毎年の季節性であり、最初の違い(order=(*, 1, *))がそれを処理するかどうかは今のところわかりません。 (確かに、毎日の季節性のみを考慮したモデルから、魔法のような年間予測を取得することはできません。)

PS使用するtimeとは何ですか。あなたのlm?リテラルの時計の時刻または1アップの観測数?混合効果モデル(lmer lme4パッケージ)。ただし、これを行うと、時系列で発生する自己相関が正しく説明されるかどうかはわかりません。 lmが考慮していない場合、興味深い適合が得られる可能性がありますが、予測がどれほど正確であるかという概念は楽観的すぎます。

コメント

  • 測定時間と"曜日の両方があります"測定値。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です