差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
r:markovchain [2018/12/12 08:48] – watalu | r:markovchain [2018/12/17 11:47] (現在) – watalu | ||
---|---|---|---|
行 7: | 行 7: | ||
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
+ | |||
+ | このパッケージはR 3.5.0以上を必要とする。各自でダウンロードしてインストールする必要があるかもしれない。 | ||
=== マルコフ解析 === | === マルコフ解析 === | ||
行 41: | 行 43: | ||
</ | </ | ||
- | < | ||
- | mcList <- new(" | ||
- | name = "A list of Markov chains" | ||
- | </ | ||
=== markovchainのメソッド === | === markovchainのメソッド === | ||
行 136: | 行 134: | ||
</ | </ | ||
+ | 関数statesはマルコフ連鎖のオブジェクトmcWeatherの中の状態の一覧を表示させる。 | ||
< | < | ||
states(mcWeather) | states(mcWeather) | ||
</ | </ | ||
+ | 関数namesもstatesと同じ動作をする。 | ||
< | < | ||
names(mcWeather) | names(mcWeather) | ||
</ | </ | ||
+ | 関数dimは状態数を返す。 | ||
< | < | ||
dim(mcWeather) | dim(mcWeather) | ||
</ | </ | ||
+ | 関数nameはマルコフ連鎖の名前を返す。これはnewで作成するときにつけている。 | ||
< | < | ||
- | name(mcWeather) | + | name(mcWeather) |
</ | </ | ||
行 265: | 行 264: | ||
|predict|Method to calculate predictions from markovchain or markovchainList objects.| | |predict|Method to calculate predictions from markovchain or markovchainList objects.| | ||
|rmarkovchain|Function to sample from markovchain or markovchainList objects.| | |rmarkovchain|Function to sample from markovchain or markovchainList objects.| | ||
+ | |||
+ | 状態遷移のデータがあるとする。 | ||
+ | |||
+ | Alofi島の1日あたりの降雨のデータがある。 | ||
+ | |||
+ | < | ||
+ | data(rain) | ||
+ | </ | ||
+ | |||
+ | このデータは、2つのフィールドV1とrainを持つ。使うのは rain の方。 | ||
+ | 一日ごとの推移を集計してみる。 | ||
+ | |||
+ | < | ||
+ | table(data.frame(before=rain$rain[-1], | ||
+ | </ | ||
+ | |||
+ | 出力は次の通り。 | ||
+ | |||
+ | < | ||
+ | after | ||
+ | before | ||
+ | | ||
+ | 1-5 126 90 79 | ||
+ | | ||
+ | </ | ||
+ | |||
+ | この推移をグラフに表してみる。Gmiscパッケージの中の関数transitionPlotを使うために、準備をする。 | ||
+ | |||
+ | < | ||
+ | install.packages(c(" | ||
+ | reps = c(" | ||
+ | install.packages(" | ||
+ | </ | ||
+ | |||
+ | そして、使ってみる。 | ||
+ | |||
+ | < | ||
+ | require(Gmisc) | ||
+ | transitionPlot(table(data.frame(r1=rain$rain[-1], | ||
+ | overlap_add_width=1.2, | ||
+ | min_lwd = unit(2, " | ||
+ | </ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | library(dplyr) | ||
+ | library(stringr) | ||
+ | library(DiagrammeR) | ||
+ | library(networkD3) | ||
+ | </ | ||
+ | |||
+ | この準備で頑張ると、[[https:// | ||
+ | |||
+ | この推移から、遷移行列を推定する。 | ||
+ | |||
+ | < | ||
+ | markovchainFit(rain$rain, | ||
+ | </ | ||
+ | |||
+ | 次の推定値などが表示される。 | ||
+ | |||
+ | < | ||
+ | $estimate | ||
+ | 0 | ||
+ | 0 | ||
+ | 1-5 0.4625850 0.3061224 0.2312925 | ||
+ | 6+ 0.1976285 0.3122530 0.4901186 | ||
+ | |||
+ | |||
+ | $standardError | ||
+ | | ||
+ | 0 | ||
+ | 1-5 0.03966634 0.03226814 0.02804834 | ||
+ | 6+ 0.02794888 0.03513120 0.04401395 | ||
+ | |||
+ | $confidenceLevel | ||
+ | [1] 0.95 | ||
+ | |||
+ | $lowerEndpointMatrix | ||
+ | 0 | ||
+ | 0 | ||
+ | 1-5 0.3973397 0.2530461 0.18515711 | ||
+ | 6+ 0.1516566 0.2544673 0.41772208 | ||
+ | |||
+ | $upperEndpointMatrix | ||
+ | 0 | ||
+ | 0 | ||
+ | 1-5 0.5278304 0.3591988 0.2774279 | ||
+ | 6+ 0.2436003 0.3700387 0.5625151 | ||
+ | |||
+ | $logLikelihood | ||
+ | [1] -1040.419 | ||
+ | </ | ||
+ | |||
+ | rain.MCに代入しておく。 | ||
+ | |||
+ | < | ||
+ | rain.mcfit <- markovchainFit(rain$rain, | ||
+ | </ | ||
+ | |||
+ | 返して貰った内容を見てみる。 | ||
+ | |||
+ | < | ||
+ | str(rain.mcfit) | ||
+ | </ | ||
+ | |||
+ | rain.MCはS3オブジェクトのリストだが、rain.MC$estimateはS4オブジェクトとややこしい。 | ||
+ | 遷移行列を行列として取り出すには、次のようにリストの名前とその中のスロットを指定する。 | ||
+ | |||
+ | < | ||
+ | rain.mcfit$estimate@transitionMatrix | ||
+ | </ | ||
+ | |||
+ | これによって新たなマルコフ連鎖を定義するには、次のように書く。 | ||
+ | |||
+ | < | ||
+ | mcrain = new(" | ||
+ | byrow = TRUE, | ||
+ | transitionMatrix = rain.mcfit$estimate@transitionMatrix, | ||
+ | </ | ||
+ | |||
+ | 関数markovchainFitは、markovchainオブジェクトをリストの要素として出力しているので、そちらを使うのも良い。 | ||
+ | |||
+ | < | ||
+ | mcrain = rain.mcfit$estimate | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | rain.mcfit <- markovchainFit(rain$rain, | ||
+ | </ | ||