gunosy2015 07-07
TRANSCRIPT
北川源四郎「時系列解析入門」 第 9章
柏野 雄太
バクフー株式会社
July 8, 2015
注意
この本は名著ではありますが,役割的に「時系列解析のチートシート」的な存在で,全体的に記述があっさりしすぎています.特に 9章,10章の状態空間モデルの部分は記述が少なすぎますので,以下の書籍等で足りない部分を補う必要があります.カルマンフィルタは通常工学部の大学 4年生から修士 1年のときに,半期の講義+演習でガッツリやるようなレベルです.状態空間モデル:樋口知之「予測にいかす統計モデリングの基礎」樋口知之+「データ同化入門」カルマンフィルタ:足立修一・丸田一郎「カルマンフィルタの基礎」Rのパッケージ dlm:Petris+「Rによるベイジアン動的線型モデル」状態空間モデルの古典的入門書:コマンダー&クープマン「状態空間時系列分析入門」
2 / 1
状態空間モデル
状態空間モデル
xn = Fnxn−1 +Gnvn (9.1)yn = Hnxn + wn (9.2)
yn: 観測される時系列 次元 l
xn: 状態 (state) 次元 k
vn: システムノイズ(状態ノイズ) 平均ベクトル 0, 分散共分散行列 Qn
に従うm次元の正規白色ノイズwn: 観測ノイズ 平均ベクトル 0, 分散共分散行列 Rn に従う l次元の正規白色ノイズFn: k × k 次元Gn: k ×m次元Hn: l × k 次元
3 / 1
状態空間モデルの解釈
状態空間モデル
xn = Fnxn−1 +Gnvn (9.1)yn = Hnxn + wn (9.2)
回帰モデルとしての解釈:観測モデルは観測 yn を表現する回帰モデルで,xn が回帰係数,システムモデルはその時間発展信号理論としての解釈:システムモデルは信号発生メカニズム,観測モデルはノイズが付加される様子を記述.
4 / 1
状態空間モデルの例: ARモデル
ARモデル
yn =
m∑i=1
aiyn−i + vn (9.3)
xn = Fxn−1 +Gvn (9.4)
xn = (yn, yn−1, . . . , yn−m+1)T
F =
a1 a2 · · · am1
. . .1 0
, G =
10...0
(9.5)
H =(1 0 · · · 0
)5 / 1
カルマンフィルタによる状態の推定
観測値 Yj =⇒ xn の推定Yj が与えられたときの xn の条件付き分布 p(xn|Yj)を求める問題
j < n: 予測 (prediction)j = n: フィルタ (filtering)j > n: 平滑 (smooting)
6 / 1
カルマンフィルタ Kalman filter
[条件付き平均と共分散]xn|j ≡ E(xn|Yj)Vn|j ≡ E
((xn − xn|j)(xn − xn|j)
T)
(9.11)
[一期先予測]xn|n−1 = Fnxn−1|n−1
Vn|n−1 = FnVn−1|n−1FTn +GnQnG
Tn (9.12)
[フィルタ]
Kn = Vn|n−1HTn (HnVn|n−1H
Tn +Rn)
−1
xn|n = xn|n−1 +Kn(yn −Hnxn|n−1)
Vn|n = (I −KnHn)Vn|n−1 (9.13)
7 / 1
カルマンフィルタの逐次計算
x1|0 −→ x2|0 −→ x3|0 −→ x4|0 −→ x5|0 −→⇓x1|1 =⇒ x2|1 −→ x3|1 −→ x4|1 −→ x5|1 −→
⇓x1|2 ←− x2|2 =⇒ x3|2 −→ x4|2 −→ x5|2 −→
⇓x1|3 ←− x2|3 ←− x3|3 =⇒ x4|3 −→ x5|3 −→
⇓x1|4 ←− x2|4 ←− x3|4 ←− x4|4 =⇒ x5|4 −→
⇓
[ノーテーション] ⇓: フィルタ, =⇒: 予測, ←−: 平滑化, −→: 長期予測
8 / 1
9.3 平滑化のアルゴリズム
YN = y1, · · · , yN が与えられたとき,途中状態の xn を推定する.
[固定区間平滑化]
An = Vn|nFTn+1V
−1n+1|n
xn|N = xn|n +An(xn+1|N − xn+1|n)
Vn|N = Vn|n +An(Vn+1|N − Vn+1|n)ATn (9.14)
9 / 1
9.4 状態の長期予測
Yn = {y1, · · · , yn} に基づいて,1期先予想をクリア消し,j 期先の状態 xn+j(j > 1)を推定する.カルマンフィルタにより一期先の xn+1|n と xn+1|n を求める.yn+1 は得られないが,Yn+1 = Yn と仮定する =⇒xn+1|n+1 = xn+1|n, Vn+1|n+1 = Vn+1|nカルマンフィルタの n+ 1期に対する 1期先アルゴリズムから 2期先予測が得られる.
xn+2|n = Fn+2xn+1|n
Vn2|n = Fn+2Vn+1|nFTn+2 +Gn+2Qn+2G
Tn+2 (9.15)
[長期予測]xn+i|n = Fn+ixn+i−1|n
Vni|n = Fn+iVn+i−1|nFTn+i +Gn+iQn+iG
Tn+i (9.16)
10 / 1
9.5 時系列の予測
Yn が与えられたときの yn+j の平均,分散共分散行列をyn+j ≡ E(yn+j |Yn), dn+j|n ≡ Cov(yn+j |Yn) とすると,
yn+j|n = E(Hn+jxn+j + wn+j |Yn)= Hn+jxn+j|n (9.17)
dn+j|n = Cov(Hn+jxn+j + wn+j |Yn)= Hn+jCov(xn+j |Yn)HT
n+j +Hn+jCov(xn+j , wn+j |Yn)+ Cov(xn+j , wn+j |Yn)HT
n+j +Cov(wn+j |Yn)= Hn+jVn+j|nH
Tn+j +Rn+j (9.18)
注: yn|n−1, dn|n−1 はカルマンフィルタ (9.13)ですでにもとめられている
11 / 1
9.5 時系列の予測 BLSALLFOODの例
Figure: ARモデルの長期予測分布 12 / 1
9.6 時系列モデルの尤度計算とパラメータ推定
時系列モデルの尤度
l(θ) = −1
2
{lN log2π +
N∑n=1
log|dn|n−1|
+
N∑n=1
(yn − yn|n−1)Td−1
n|n−1(yn − yn|n−1)}
(9.23)
ただし,このままでは計算が大変.データに欠損がない ARの場合はユール・ウォーカー,最小二乗法,PARCOR法などのほうがいい.仕方なく (9.23)を計算する場合でも,次元圧縮を考える.
13 / 1
9.6 時系列モデルの尤度計算とパラメータ推定次元圧縮の方法: 時系列の次元が l = 1で wn の分散が Rn = σ2 で一定の場合
1 R = 1としてカルマンフィルタ (カルマンゲインを計算すると R = σ2
でも R = 1でも同じ)2 以下の式により σ̂2 を求める
σ̂2 =1
N
N∑n=1
(yn − yn|n−1)2
d̃n|n−1
(9.28)
3 以下の式により対数尤度 l(θ∗)を求める
l(θ∗) = −1
2
{N log2πσ̂2 +
N∑n=1
logd̃n|n−1+N
}(9.29)
4 1, 2, 3のステップを繰り返して,対数尤度 l(θ∗)を最大化して,最尤推定値 θ∗ を求める
14 / 1
9.7 欠損値の補間
時系列の状態空間モデルを用いると欠測値があっても厳密に尤度計算ができ,パラメータの最尤推定値を求めることができる.
l(θ) = −1
2
∑n∈I(N)
{llog2π + log|dn|n−1+N |
+ (yn − yn|n−1)Td−1
n|n−1+N (yn − yn|n−1)}
(9.31)
パラメータが決まりモデルが与えられたら,カルマンフィルタの予測分布 {xn|n−1, Vn|n−1},フィルタ分布 {xn|n, Vn|n}が求まり,その後で平滑値 xn|N から欠測値 yn|N = Hnxn|n を求める.推定誤差分散は dn|N = HnVn|NHT
n +Rn
15 / 1
9.7 欠損値の補間: BLSALLFOODの例
Figure: 欠測値の補間 16 / 1
Python版 カルマンフィルター
Python版 カルマンフィルターの更新式from␣numpy␣import␣dot
x␣=␣dot(F,␣x)␣+␣dot(B,␣u)
P␣=␣dot(F,␣P).dot(F.T)␣+␣Q
y␣=␣z␣-␣dot(H,␣x)
S␣=␣dot(H,␣P).dot(H.T)␣+␣R
K␣=␣dot(P,␣H.T).dot(np.linalg.inv(S))
x␣=␣x␣+␣dot(K,y)
P␣=␣(I␣-␣dot(K,␣H)).dot(P)
17 / 1
MATLAB版 カルマンフィルター
MATLAB版 カルマンフィルターの更新関数function␣[xhat_new,P_new,␣G]␣=␣kf(A,␣B,␣Bu,␣C,␣Q,␣R,␣u,␣y,␣xhat,␣P)
␣␣xhat␣=␣xhat(:);
␣␣u␣=␣u(:);
␣␣y␣=␣y(:);
␣␣xhatm␣=␣A*xhat␣+␣Bu*u;
␣␣Pm␣=␣A*P*A’␣+␣B*Q*B’;
␣␣G␣=␣Pm*C/(C’*Pm*C␣+␣R);
␣␣xhat_new␣=␣xhatm␣+␣G*(y␣-␣C’*xhatm);
␣␣P_new␣=␣(eye(size(A))␣-␣G*C’)*Pm;
end
18 / 1