2016-10-29 6 views
2

マイマルコフ連鎖シミュレーション1. 4x4の遷移行列は、同一の符号が吸収せずに3x3の遷移行列のために働いている吸収状態0および3マルコフ連鎖は

を有する初期状態を残していない初期状態を残していません状態。なにが問題ですか?

私のコードからのプロット:Plot of Markov chain simulation。そして、うまくいけばよい例:

# Building Markov transition matrix) 
Pc <- matrix(c(1, 0.05, 0, 0, 0, 0.85, 0.05, 0, 0, 0.1, 0.65, 0, 0, 0, 0.3, 1), 
      nrow = 4, ncol = 4) 
rownames(Pc) <- c(0,1,2,3) 
colnames(Pc) <- c(0,1,2,3) 

#Simulating Markov chain 
markovSimulation <- function(matrix, length, initialState) { 
    chain <- array(0,c(length,1)) 
    chain[1] <- initialState 
    for (j in 2:length){ 
     chain[j] <- sample(1:4, size = 1, prob=matrix[chain[length(chain)] + 1, ]) 
    }#for loop 
    return(chain) 
}#markovSimulation 

# Calling simulator and plotting result 
simulatedChain <- markovSimulation(Pc, 10, 1) 
plot(simulatedChain) 
+0

あなたが吸収状態でシミュレーションを開始する場合これは完全に期待されています。 –

+0

私はちょうどそれをしたことを理解すると思う、ありがとう! –

答えて

1

ようこそ!

chain[j] <- sample(1:4, size = 1, prob=matrix[chain[length(chain)] + 1, ]) 

は、あなたが0からあなたのインデックスとしてc(0,1,2,3)から自分の状態をサンプリングする必要があるとの確率はそうprob=matrix[chain[j-1]+1]、以前の状態に依存する必要があります:良い努力が、私はあなたが間違った二つのものを持って参照してください。素敵な最初のポストのための

> markovSimulation(Pc,10,1) 
     [,1] 
[1,] 1 
[2,] 1 
[3,] 2 
[4,] 3 
[5,] 3 
[6,] 3 
[7,] 3 
[8,] 3 
[9,] 3 
[10,] 3 

+1、良い再現性の例:

それから私はこのような合理的な結果を得ています!

+0

ソリューションと親切な言葉に感謝します。私は投稿する前に私の胃の中にかなりのサボテンを持っていました。私は真剣に答えが必要な質問を提示したいと思う: –

+0

インデックスについて:私は1と0から始まる状態でR索引付けの組み合わせが簡単に私の爬虫類の作業メモリを最大限に押し込むと思います。私はまだ '行列[鎖[j - 1] + 1]'に戸惑っています。 –

+1

Hehe、心配しないでください。今はうまくいくと思っています! –

1

遷移行列の文字インデックスを作成してから意図したとおりに使用しなかったため、混乱が起こっていました。 iインデックスとして1を使用すると、最初の行が得られます。 "1"を使用すると2番目の行が得られます。これは状態の文字ベクトルを使用し、文字列の値をPc行列の行インデックスとして使用します。ベターそれはまた、関数名ですので、機能ではなく、名前matrix内TMATを使用することです:

markovSimulation <- function(tmat, length, initialState) { 
    chain <- array(0,c(length,1)) 
    chain[1] <- initialState 
    for (j in 2:length){ 
     chain[j] <- sample(0:3, size = 1, prob=tmat[ chain[j-1], ]) 
    }#for loop 
    return(chain) 
}#markovSimulation 

# Calling simulator and plotting result 
simulatedChain <- markovSimulation(Pc, 100, "1") 
plot(simulatedChain) 
+0

ありがとうございました。私はあなたのコードの変更を実行しようとしましたが、それらを動作させることができませんでした。それは私の理解不足によるものだと確信しています。私は混乱の源泉として州の名前に同意し、私はマトリックスとして行列の名前を停止します:) –

+1

私はちょうどコードをチェックしました。それは正常に動作しています。マトリックス内の余白の文字値による索引付けは、R言語の表現力豊かな機能です。 –