差分
このページの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, | ||
| + | </ | ||