2017-10-13 87 views
1

我想在R中繪製一個圖,它繪製了對於不同k值的馬爾可夫鏈中的最終狀態之前擊中第一個狀態的概率。但是打印時,如果我只得到k的最終值,而不是對於所有的k爲1〜17使用模擬查詢的馬爾可夫鏈概率

這是一個問題:

對於p = 0.5,Q = 0.1,產生的代碼來估計概率在最終狀態之前擊中狀態1,對於k = 1,...,15。產生對k的估計圖。其中k =過渡維數

任何人都可以發現我的錯誤嗎?

for(k in 1:17) 
{ p <- 0.5 
    q <- 0.1 
    P <- matrix (0, nrow = k, ncol = k, byrow = TRUE) 
for (i in 1:k) 
{ for (j in 1:k) 
    { if (i == 1 && i == j) 
     { P[i,j] <- 1 
     } 
     else if (i == k && i == j) 
     { P[i,j] <- 1 
     } 
     else if (i == j) 
     { P[i,j] <- p*(1-q) 
     } 
     else if (j == k && i != 1) 
     { P[i,j] <- q 
     } 
     else if (i == j+1 && i != k) 
     { P[i,j] <- (1-p)*(1-q) 
     } 
    } 
} 
P 

trials <- 1000 
hits <- 0 #counter for no. of hits 
for (i in 1:trials) 
{ i <- 1 #no. of steps 
    while(X[i] > 1 && X[i] < k) 
    { Y <- runif(1) #uniform samples 
     p1 <- P[X[i],] #calculating the p-value 
     p1 <- cumsum(p1) 
     # changes in the chain 
     if(Y <= p1[1]) 
      { X[i+1] = 1} 
     else if(Y <= p1[2]) 
      { X[i+1] = 2} 
     else if(Y <= p1[3]) 
      { X[i+1] = 3} 
     else if(Y <= p1[4]) 
      { X[i+1] = 4} 
     else if(Y <= p1[5]) 
      { X[i+1] = 5} 
     else if(Y <= p1[6]) 
      { X[i+1] = 6} 
     else if(Y <= p1[7]) 
      { X[i+1] = 7} 
     else if(Y <= p1[8]) 
      { X[i+1] = 8} 
     else if(Y <= p1[9]) 
      { X[i+1] = 9} 
     else if(Y <= p1[10]) 
      { X[i+1] = 10} 
     else if(Y <= p1[11]) 
      { X[i+1] = 11} 
     else if(Y <= p1[12]) 
      { X[i+1] = 12} 
     else if(Y <= p1[13]) 
      { X[i+1] = 13} 
     else if(Y <= p1[14]) 
      { X[i+1] = 14} 
     else if(Y <= p1[15]) 
      { X[i+1] = 15} 
     else if(Y <= p1[16]) 
      { X[i+1] = 16} 
     else if(Y <= p1[17]) 
      { X[i+1] = 17} 
     i <- i+1 
    } 
    if(X[i]==1) 
    { hits <- hits+1} 
    else 
    { hits <- hits+0} 
} 
Probability <- hits/trials 

}

+0

它是一個真正的語言代碼。它的一個R代碼。對不起,忘了說吧 –

回答

0

我認爲您的主要錯誤可能是

i <- 1 #no. of steps 

在其中設置的我到1值的語句,即使你告訴它遍歷1:試驗在前面的行中。

此外,此代碼不完整,因爲您在將X設置爲任何內容之前使用X [i],這會導致錯誤。

此外,P矩陣中是否有錯誤?我不認爲你的最後一行加起來爲1 - 你需要爲i == k和j == k-1做一個單獨的「else if」情況。