Argh, bạn tìm thấy giải pháp trong khi tôi đang viết nó lên cho bạn. Dưới đây là một ví dụ đơn giản mà tôi đã đưa ra:
run = function()
{
# The probability transition matrix
trans = matrix(c(1/3,1/3,1/3,
0,2/3,1/3,
2/3,0,1/3), ncol=3, byrow=TRUE);
# The state that we're starting in
state = ceiling(3 * runif(1, 0, 1));
cat("Starting state:", state, "\n");
# Make twenty steps through the markov chain
for (i in 1:20)
{
p = 0;
u = runif(1, 0, 1);
cat("> Dist:", paste(round(c(trans[state,]), 2)), "\n");
cat("> Prob:", u, "\n");
newState = state;
for (j in 1:ncol(trans))
{
p = p + trans[state, j];
if (p >= u)
{
newState = j;
break;
}
}
cat("*", state, "->", newState, "\n");
state = newState;
}
}
run();
Lưu ý rằng ma trận chuyển đổi xác suất của bạn không cộng lại thành 1 trong mỗi hàng. Ví dụ của tôi có ma trận chuyển đổi xác suất hơi thay đổi tuân thủ quy tắc này.
NVM: Tìm thấy câu trả lời http://books.google.com/books?id=AALhk_mt7SYC&lpg=PA116&dq=r%20markov%20chain&pg=PA119#v=onepage&q=r%20markov%20chain&f=false – stevejb