私は以下のタスクをうまく実装しましたが、小さなテストデータセットでしか動作しませんでした。私の実際のデータセットは、永遠に計算し続けます。s1:s400からsnの大きな確率でRの大きなマルコフ遷移行列を得る確率を計算する
私はRで400x400の遷移確率行列を持っています。ユーザーがマルコフウォークを変換すると、「変換」をヒットします。吸収状態は、すべてのユーザーにとって「Null」です。 「スタート」は私の最初の状態です。
2つのことを私は計算する必要があります。
- ヒット状態s_jをランダムウォークの「スタート」から始まる 397の他の状態のそれぞれから始まるランダムウォークの
- ヒット「変換」
第1は、Rで簡単です:私は首尾よく2を実装
v <- numeric(length = ncol(transitionMatrix1))
v[1] <- 1
i <- 2
R0 <- v%*%(transitionMatrix1 %^% 1)
R <- R0
repeat {
R1 <- v%*%(transitionMatrix1 %^% i)
R <- rbind(R, R1)
if (rowSums(R[nrow(R)-1,] - R1) == 0) {
#if (rowSums(R[nrow(R)-1,] - R1) < epsilon) {
break
}
else {
i <- i+1
}
}
visit1 <- colSums(R)
が、私小さな行列でしか動作しませんでした。それは大きなもので永遠にかかる:
w <- i
C1 <- matrix(nrow = w, ncol = ncol(transitionMatrix1))
for (i in 1:ncol(transitionMatrix1)) {
x <- numeric(length = ncol(transitionMatrix1))
x[i] <- 1
for (j in 1:w) {
C1[j,i] <- x%*%(transitionMatrix1 %^% j)[,ncol(transitionMatrix1)-1]
}
}
convert1 <- colSums(C1)
私はおそらくループを使用しないでください。残念ながら、私は上記の操作をベクトル化することに成功しませんでした。 @Forzaaは、あなたのリンクの助けを借りて、私はRに変換されたと、MATLAB(https://de.mathworks.com/matlabcentral/newsreader/view_thread/48984)で解決策を見つけることができた
元のものと入れ替えたものを同時に2つの行列に保存して、それに応じて1つまたは別のものを使用するのに役立つもの –
計算しようとしていることを完全には理解していませんが、繰り返し行列を乗算することなく、あなたが望む表現を得ることができると思います。クイック概要については、https://en.wikipedia.org/wiki/Absorbing_Markov_chainを、完全な分析についてはhttp://www.math.pku.edu.cn/teachers/yaoy/Fall2011/Kemeny-Snell1976.pdfを参照してください。基本的な行列を計算する必要がありますし、すべての種類のパフォーマンス測定値を取得することができます。 – Forzaa