毎時測定の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時間ごとのデータがあると想定しているため、TSオブジェクトが24の頻度で設定されていることを確認してください。
- 他のレベルのモデルを作成できます。ダミー変数を使用した季節性。たとえば、年の月を表す0/1ダミーのセットが必要な場合があります。
-
xreg
にダミー変数を含めます。引数、および共変量(temperatuなど) re)。 - ベースRのarima関数をモデルに適合させます。この関数は、
xreg
引数を使用してARMAXモデルを処理できます。 - 予測パッケージの Arima 関数と auto.arima 関数を試してください。 auto.arimaは、arimaモデルに適したパラメーターを自動的に見つけるので便利です。ただし、データセットに収まるにはFOREVERが必要です。
- 季節性のレベルごとにダミー変数を使用して、arimaパッケージのtslm関数を試してください。これは有馬モデルよりもはるかに速く適合し、状況によってはさらにうまく機能する可能性があります。
- 4/5/6が機能しない場合は、伝達関数について心配し始めます。前にクロールする必要があります。歩くことができます。
- 将来の予測を計画している場合は、最初に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),]
コメント
。
回答
私はRを使用してしばらくの間負荷予測を行い、forecast
パッケージとその貴重な機能(auto.arima
など)を使用することをお勧めします。
次のコマンドを使用してARIMAモデルを構築できます:
model = arima(y, order, xreg = exogenous_data)
y
を使用して予測(I dayy
)、order
モデルの順序(季節性を考慮)、およびexogenous_data
を想定します。温度、太陽放射など。関数auto.arima
は、最適なモデルの順序を見つけるのに役立ちます。 「予測」パッケージに関する簡単なチュートリアルは、ここにあります。
コメント
- 予測されるのは熱(家の熱消費量)です。
回答
I個人的には伝達関数を理解していませんが、xtransf
とxreg
が逆になっていると思います。少なくともRのベースarima
では、外因性変数が含まれているのはxreg
です。伝達関数がarima
を記述しているという印象があります。 何ではなくem>どのように(遅れたデータが将来の値に影響する)。
xreg
を使用してみますarimax
が伝達関数を必要とする場合は、おそらくarima
を使用して、外因性変数を使用します。問題は、モデルが毎日であるが、データに両方があることです。毎日および毎年の季節性であり、最初の違い(order=(*, 1, *)
)がそれを処理するかどうかは今のところわかりません。 (確かに、毎日の季節性のみを考慮したモデルから、魔法のような年間予測を取得することはできません。)
PS使用するtime
とは何ですか。あなたのlm
?リテラルの時計の時刻または1アップの観測数?混合効果モデル(lmer
lme4
パッケージ)。ただし、これを行うと、時系列で発生する自己相関が正しく説明されるかどうかはわかりません。 lm
が考慮していない場合、興味深い適合が得られる可能性がありますが、予測がどれほど正確であるかという概念は楽観的すぎます。
コメント
- 測定時間と"曜日の両方があります"測定値。
predict()
は予測に使用されますが、fitted()
は、過去の期間にわたるモデルの適合を返します。より具体的なヘルプが必要な場合は、再現可能な例をいくつかのコードとともに投稿する必要があります。heat
が時間とともに直線的に増加し、時間が1に戻ったときに下にジャンプすることを期待することです。ダミー変数を使用する場合、それぞれ1日の時間帯には、'独自の効果があります。サンプルコードを実行し、xregオブジェクトの作成方法に注意を払ってください。stats
およびforecast
パッケージのARIMA関数の欠点の1つは、プローバー伝達関数に適合しないことです。 。stats::arima
関数のドキュメントには、次のように記載されています。 xreg項が含まれている場合、線形回帰(include.meanがtrueであり、差異がない場合は定数項を使用) )は誤差項のARMAモデルに適合しています。したがって、実際に伝達関数を適合させる必要がある場合は、TSA::arimax
関数がTSA::arimax
関数を使用する方法のようです。 div id = “c6e3299f5b”>