簡體   English   中英

R中的馬爾可夫鏈的手動模擬

[英]Manual simulation of Markov Chain in R

考慮狀態空間為S = {1,2}的馬爾可夫鏈,轉移矩陣

在此處輸入圖片說明

和初始分布α=(1/2,1/2)

  1. 模擬馬爾可夫鏈的5個步驟(即模擬X 0X 1 ,..., X 5 )。 重復模擬100次。 使用模擬結果來解決以下問題。

    • 估計P(X 1 = 1 | X 0 = 1) 將您的結果與確切的可能性進行比較。

我的解決方案:

# returns Xn 
func2 <- function(alpha1, mat1, n1) 
{
  xn <- alpha1 %*% matrixpower(mat1, n1+1)

  return (xn)
}

alpha <- c(0.5, 0.5)
mat <- matrix(c(0.5, 0.5, 0, 1), nrow=2, ncol=2)
n <- 10


for (variable in 1:100) 
{
   print(func2(alpha, mat, n))
}

如果我運行一次或100次此代碼有什么區別(如問題陳述中所述)?

從這里開始如何找到條件概率?

alpha <- c(1, 1) / 2
mat <- matrix(c(1 / 2, 0, 1 / 2, 1), nrow = 2, ncol = 2) # Different than yours

是初始分布和過渡矩陣。 您的func2僅找到第n步分布,這是不需要的,並且不模擬任何東西。 相反,我們可以使用

chainSim <- function(alpha, mat, n) {
  out <- numeric(n)
  out[1] <- sample(1:2, 1, prob = alpha)
  for(i in 2:n)
    out[i] <- sample(1:2, 1, prob = mat[out[i - 1], ])
  out
}

其中, out[1]僅使用初始分布生成,然后對於后續項,我們使用過渡矩陣。

那我們有

set.seed(1)
# Doing once
chainSim(alpha, mat, 1 + 5)
# [1] 2 2 2 2 2 2

因此鏈條從2開始並由於指定的轉移概率而卡在那里。

做一百遍

# Doing 100 times
sim <- replicate(chainSim(alpha, mat, 1 + 5), n = 100)
rowMeans(sim - 1)
# [1] 0.52 0.78 0.87 0.94 0.99 1.00

最后一行顯示了我們在狀態2而不是狀態1中出現的頻率。這給出了一個(為什么)100個重復信息更豐富的原因:我們陷入狀態2只是進行了一次模擬,而重復了100次我們探索了更多可能的途徑。

然后可以找到條件概率

mean(sim[2, sim[1, ] == 1] == 1)
# [1] 0.4583333

而真實概率為0.5(由轉換矩陣的左上角給出)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM