2

因子データの束を読み取り、そこから遷移行列を作成して、うまく視覚化したいと考えています。「heemod」と呼ばれる非常に優れたパッケージを見つけました。これは、「diagram」と一緒に使用するとうまく機能します。

私の最初の簡単なアプローチでは、Python コードを実行してマトリックスを取得し、この R スニペットを使用してグラフを描画しました。遷移確率は、非公開で重要度の低い Python コードから得られたものですが、私が紙の上で計算したと仮定することもできます。

library('heemod')
library('diagram')
mat_dim <- define_transition(
  state_names = c('State_A', 'State_B', 'State_C'),
  .18, .73, .09, 
  .22, .0, .78,
  .58, .08, .33);
plot(mat_dim)

ただし、すべてを R に統合し、遷移行列とグラフを R 内でシーケンス データから直接生成したいと考えています。

これは私がこれまでに持っているものです:

library(markovchain)
library('heemod')
library('diagram')

# the data --- this is normally read from a file
data = c(1,2,1,1,1,2,3,1,3,1,2,3,1,2,1,2,3,3,3,1,2,3,2,3,1,2,3,3,1,2,3,3,1)
fdata = factor(data)
rdata = factor(data,labels=c("State_A","State_B","State_C"))

# create transition matrix
dimMatrix = createSequenceMatrix(rdata, toRowProbs = TRUE)
dimMatrix

質問: define_transition が処理できるように、dimMatrix を転送するにはどうすればよいですか?

mat_dim <- define_transition( ??? );
plot(mat_dim)

何か案は?より良い/より簡単な解決策はありますか?

4

1 に答える 1

2

への入力はdefine_transitionかなりぎこちないようです。おそらく、これはheemodパッケージの経験が浅いためですが、トランジションを入力する唯一の方法は要素ごとにあるようです。

ここに回避策があります

library(heemod)
library(diagram)

最初に遷移行列をリストに変換します。オプションの数字の丸めを使用しました。これは...define_transition

lis <- as.list(round(dimMatrix, 3))

必要な他のすべての名前付き引数をリストに追加します。

lis$state_names = colnames(dimMatrix)

これらの引数をdefine_transitionusingに渡しdo.callます。

plot(do.call(define_transition, lis))

ここに画像の説明を入力

更新:コメントの質問に:

lis <- as.list(t(round(dimMatrix, 3)))
lis$state_names = colnames(dimMatrix)
plot(do.call(define_transition, lis))

ここに画像の説明を入力

背後にある理由do.call

最も明白な方法 (ここでは機能しません) は、次のようにすることです。

define_transition(dimMatrix, state_names = colnames(dimMatrix))

define_transitionただし、は各遷移が行列やリストとしてではなく、引数として提供されることを期待しているため、これはエラーをスローします。入力を避けるために:

define_transition(0.182, 0.222,..., state_names = colnames(dimMatrix))

私が行ったように、すべての引数をリストに入れて、そのリストを呼び出すdo.callことができます。

于 2018-09-01T11:11:58.043 に答える