私は時系列分析の初心者です。 2009年1月から12月20013年までの60か月の月間売上データを取得し、ARIMAモデルを使用して今後6か月の売上を予測しようとしています。データを読み取り、次のように時系列オブジェクトに変換します。
data <- read.csv(file="monthlySalesData.csv", header=TRUE)
dataInTimeSeris <- ts(data, frequency = 12, start=c(2009,1), end=c(2013,12))
決定するためにacf()プロットを描画しようとすると自己相関がゼロにまで低下した後、X軸の小数のスケールを取得します。画像を投稿するのに十分な権限がありませんが、X軸のラグ値は10進数で、最大ラグは1.5です。 plot = FALSEのacf値も奇妙になります(自己相関を計算したラグは表示されません)。私はこれを解釈することができず、自己相関がゼロに死ぬまでのラグの数を見つけることができません。
acf(dataInTimeSeries, plot=FALSE)
Autocorrelations of series ‘dataInTimeSeries’, by lag
0.0000 0.0833 0.1667 0.2500 0.3333 0.4167 0.5000 0.5833 0.6667 0.7500 0.8333
1.000 0.642 0.588 0.490 0.401 0.320 0.311 0.269 0.178 0.198 0.229
0.9167 1.0000 1.0833 1.1667 1.2500 1.3333 1.4167
0.271 0.358 0.240 0.210 0.092 0.135 0.098
問題は何ですか-Rの設定、データのインポート、またはts()関数に問題はありますか?そして、これがacfプロットが毎月のデータに対してどのように表示されるか、それを解釈する方法ですか?
前もって感謝します!!
回答:
回答№1は4表示される小数は、たとえば年です。 0.0833 = 1/12年、0.1667 = 2/12年阿蘇。
ラグを月としてACFプロットを取得するには、次のようなものを試すことができます。
## Lacking reproducible example, I use simulated monthly data
tt <- ts(arima.sim(list(order=c(1,0,0), ar=0.4),60), start=2001, deltat=1/12)
## Calculate, but not plot, acf
acfpl <- acf(tt, plot=FALSE)
## Transform the lags from years to months
acfpl$lag <- acfpl$lag * 12
## Plot the acf
plot(acfpl, xlab="Lag (months)")
私はあなたの問題を理解しているので、あなたは対処していますARMAの注文を特定しています。そのためには、ACFプロットとPACFプロットの両方が必要です。 「死にかけている」と言うとき、少し遅れて値がゼロに等しくなることを期待すべきではありません。 95%信頼区間(破線の青い線)内の値は統計的に有意ではありません(以下の注記も確認してください) ?plot.acf
)。
ARIMAモデルの次数を特定することができますトリッキーですが、従うことができるいくつかのルールがあります。例えば。プロセスAR(p)モデルには、減衰指数関数/正弦関数のようなACFと、pの有意な遅れを持つPACFがあります。例えば。 MA(q)プロセスは逆です。
これら2つの単純なケースのように見えるように、私は arima.sim
2つの時系列ARIMA(1,0,0)とARIMA(0,0,1)をシミュレートします。
set.seed(1234)
arima100 <- arima.sim(list(order=c(1,0,0), ar=0.9), n=500)
arima001 <- arima.sim(list(order=c(0,0,1), ma=0.9), n=500)
par(mfrow=c(2,2), bycol=TRUE)
acf(arima100); acf(arima001)
pacf(arima100); pacf(arima001)
これにより、次のプロットが生成されます。
ARIMA(1,0,0):ACFはゼロに向かって減衰し、PACFには1つの大きな遅れがあります。 ARIMA(0,0,1):ACFには1つの大きなラグがあり(lag-0は常に1)、PACFは減衰サイン関数のように見えます。
さて、あなたのACFを見るだけで、私は2つのことを敢えて言うでしょう:
- プロセスにはおそらくAR用語があります(PACFもチェックする必要があります)
- 12番目のラグ、つまり1年でのスパイクのために、データに季節性がある可能性があります(データのプロットを見ると確認できます)
あなたが従うことができるいくつかのステップ:
- データに傾向が明らかな場合は、違いをとってください
- 年ごとの季節性がある場合は、ラグ12の差を取る
- 差異のないデータと差異のあるデータのACFおよびPACFをプロットする
- 適合モデル
arima
そして、残差を確認します - 複数の候補モデルがある場合、それらのAICまたはBIC値を比較します。
また、良い本(私はHenrik Madsenによる時系列分析を使用しました)または講義ノート(これらはよく見える)あなたを大いに助けることができます。
回答№2の場合は-1
使用 coredata()
トリックも行います:
acf(coredata(dataInTimeSeries))