マルコフ性を持つマルコフ過程で、状態が離散、時間間隔も離散で等間隔の確率過程をマルコフ連鎖という。
時間をtで表し、時間の経過とともに変化する状態X[t]を考える。 時間の間隔は等間隔とし、整数で表す。
X[0], X[1], …, X[t-1],X[t],X[t+1],…は時間の添え字を持つ確率変数の列である。 この確率変数の列は(離散時間)確率過程と呼ばれる。 任意の時点tより昔の確率変数の実現値の列x[0], x[1], …, x[t-1]を時点tより前の履歴(history)といい、H[t-]と記す。
任意の時点tの状態X[t]の、それ以前のすべての時点の履歴を与えた条件付き確率分布Pr[X[t]=i|H[t-]] = Pr[X[t]=i|X[t-1]=x[t-1],X[t-2]=x[t-2],X[t-3]=x[t-3],…]が、直前の1時点のみを与えて定まる、すなわちPr[X[t]=i|H[t-]] = Pr[X[t]=i|X[t-1]=x[t-1]]を満たす時、その確率過程はマルコフ性を持つという。
マルコフ性を持つ確率過程をマルコフ過程という。
以上ではX[t]が離散確率変数の場合を紹介したが、連続確率変数でも条件付き確率密度関数を用いて、同様の議論が展開できる。 それを連続状態離散時間マルコフ過程という。
現在の時点をt、少し先の未来の時点をt+1と置くと、 Pr[X[t+1]=i|H[t]] = Pr[X[t+1]=i|X[t]=x[t]] となり、未来を予測するのに、過去のすべてのデータを参照する必要はなく、現在の状態x[t]が必要なすべての情報である、ということにマルコフ性は等しい。
なお、互いに独立な確率変数の列もマルコフ性は満たす。
マルコフ過程に関する簡単なことはこの資料(東京大学の都市生活学・ネットワーク行動学研究室の勉強会資料)によくまとまっているので、5分から10分ほどかけて、一読しておくといい。
P[i,i]=1という遷移確率を持つ状態iを吸収状態という。
本に目を通す、というマルコフ連鎖を考える。 まずは本を手にとって、カバーを見る。 カバーを見た時点の次には、確率20%(0.2)でカバーを見続けるか、確率70%(0.7)で目次に目を移すか、 あるいは確率10%(0.1)で興味を失って閉じる。
目次を開いた時点の次には、確率40%(0.4)で目次を見続けて内容を把握するか、確率50%(0.5)で第一章に進むか、 あるいは確率10%(0.1)で興味を失って閉じる。
このような目の通し方を確率表で表すと、次のようになる。
カバー | 目次 | 第1章 | 第2章 | 第3章 | 第4章 | 第5章 | 第6章 | 索引 | 閉じる | |
カバー | 0.2 | 0.7 | 0.1 | |||||||
目次 | 0.4 | 0.5 | 0.1 | |||||||
第1章 | 0.5 | 0.3 | 0.1 | 0.1 | ||||||
第2章 | 0.5 | 0.3 | 0.1 | 0.1 | ||||||
第3章 | 0.5 | 0.3 | 0.1 | 0.1 | ||||||
第4章 | 0.5 | 0.3 | 0.1 | 0.1 | ||||||
第5章 | 0.5 | 0.3 | 0.1 | 0.1 | ||||||
第6章 | 0.5 | 0.1 | 0.3 | |||||||
索引 | 0 | 0.2 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 |
閉じる | 1 |
確率0は空欄とした。
この行列は水平方向(行)の和が100%(確率1)になる。 各行は、ある時点でその行に居たときの、次の時点の状態の条件付き確率分布である。 これを行列で表したものを状態推移確率行列といい、またマルコフ行列と呼ばれることもある。
Rの行列として定義すると、次のようになる。
P = matrix(c( 0.2,0.7,0,0,0,0,0,0,0,0.1, 0,0.4,0.5,0,0,0,0,0,0,0.1, 0,0,0.5,0.3,0,0,0,0,0.1,0.1, 0,0,0,0.5,0.3,0,0,0,0.1,0.1, 0,0,0,0,0.5,0.3,0,0,0.1,0.1, 0,0,0,0,0,0.5,0.3,0,0.1,0.1, 0,0,0,0,0,0,0.5,0.3,0.1,0.1, 0,0,0,0,0,0,0,0.5,0.1,0.4, 0,0.2,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1, 0,0,0,0,0,0,0,0,0,1),ncol=10,byrow=TRUE)
> P [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 0.2 0.7 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.1 [2,] 0.0 0.4 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.1 [3,] 0.0 0.0 0.5 0.3 0.0 0.0 0.0 0.0 0.1 0.1 [4,] 0.0 0.0 0.0 0.5 0.3 0.0 0.0 0.0 0.1 0.1 [5,] 0.0 0.0 0.0 0.0 0.5 0.3 0.0 0.0 0.1 0.1 [6,] 0.0 0.0 0.0 0.0 0.0 0.5 0.3 0.0 0.1 0.1 [7,] 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.3 0.1 0.1 [8,] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.1 0.4 [9,] 0.0 0.2 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 [10,] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0
たとえばある時点で表紙にいるとは、次のベクトルで表す。
x = matrix(c(1,0,0,0,0,0,0,0,0,0),nrow=1,ncol=10)
実行してみると、表紙に1、他の状態は0という行ベクトルが表示去れる。
> x [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 1 0 0 0 0 0 0 0 0 0
この次の時点にいる状態の確率分布は
x %*% P
で得られる。ここで%*%は、ベクトルとベクトル、ベクトルと行列、あるいは行列と行列の掛け算である。
> x %*% P [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 0.2 0.7 0 0 0 0 0 0 0 0.1
これは別名、確率ベクトルと呼ばれる。総和が1は、条件付き確率分布の全確率が1であることに符号する。
2時点先にいる状態の確率分布は
x %*% P %*% P
で与えられる。
> x %*% P %*% P [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 0.04 0.42 0.35 0 0 0 0 0 0 0.19
マルコフ連鎖では、Pをかけた回数分だけ未来の確率分布が、簡単に得られる。この計算をチェインルールと呼ぶこともある。 本を手に取ってから10時点先は
round(x %*% P %*% P %*% P %*% P %*% P %*% P %*% P %*% P %*% P %*% P,3) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 0 0.015 0.034 0.051 0.063 0.059 0.042 0.028 0.036 0.673
となる。時点の間隔が1時間ならば、10時間後には読み終えているか、飽きるかして、67.3%の確率で本を閉じている。
markovchainパッケージは、離散状態離散時間マルコフ過程(通称は離散マルコフ過程、あるいはマルコフ連鎖)をRで扱うのに便利な機能を提供する。
install.packages(c(“dplyr”,“stringr”,“DiagrammeR”,“networkD3”))
MDPtoolboxパッケージは、マルコフ過程を少し拡張した、マルコフ決定過程をRで扱うのに便利な機能を提供する。
パネルデータのための多状態モデル。
モンテカルロマルコフ連鎖。
共変量を持つ隠れマルコフモデル。
生存解析のためのマルコフ連鎖の上の多状態モデルの推定。