Statistical Programming

時系列解析入門v2 DetrendingとDifferencing

時系列解析入門 - Stats Hack!!

前回の記事では時系列解析の概要、定常性、そして自己相関について触れたから今回はその続きのDetrendingから。そもそもDetrendingとは、時系列データが持っているTrend(傾向)を取り出すことでより定常なデータを入手すること。今回利用するのは回帰分析を利用した単純なアプローチで、時系列データを回帰分析し回帰直線を求め、その後時系列データから回帰直線を差し引いたデータ(残差のデータ)を得る。Trendが除去されている分残差のデータはより定常に近づく。

tsdata=ts(data)

plot(tsdata)

reg=lm(tsdata~time(tsdata))

abline(reg)

f:id:kyu9q:20140217004058p:plain

acf(auto correlaton function)関数で定常性を比べてみる。

residata=resid(reg)

acf(residata)

1つ目が元々の自己相関。2つ目がDetrending後の自己相関。

f:id:kyu9q:20140217004307p:plain

f:id:kyu9q:20140217004321p:plain

明らかに前者より後者の方が定常に近くなっている。ただ、未だ非定常なのでDifferencingによってさらにTrendを除去する。具体的には、すべての値Xtに対してとなりの値Xt-1との差を求めている。

ΔX=Xt-Xt-1

  例えばX=[4,2,4,2,6,7,3]だとするとΔX=[-2,2,-2,4,1,-4]となる。もちろんそれぞれ2つの値の差を求めるわけだからΔX全体の要素数はXの要素数の-1となる。この例で言えばlength(X)=length(ΔX)+1となるわけだ。

difdata=diff(residata)

acf(difdata)

f:id:kyu9q:20140217004555p:plainこの自己相関を見る限りどうやらこの時系列データはLag=1まで自己相関が見られる(=昨日の値と今日の値に相関があるが一昨日の値と今日の値には直接的な相関があるとは言えない)。の解釈でいいのかな。