【问题标题】:Markov Chain Probability using simulations query使用模拟查询的马尔可夫链概率
【发布时间】:2018-03-25 05:02:36
【问题描述】:

我正在尝试在 R 中绘制一个图表,该图表绘制了在马尔可夫链中针对不同 k 值的最终状态之前达到第一个状态的概率。但是在绘制时,如果我只得到 k 的最终值,而不是 1 到 17 的所有 k。

这是问题:

对于 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

}

【问题讨论】:

  • 它是一个真正的语言代码。它是一个 R 代码。不好意思,忘记放了

标签: r probability markov-chains markov


【解决方案1】:

我认为你的主要错误可能是陈述

i <- 1 #no. of steps

您将 i 的值设置为 1,即使您在前一行中告诉它循环 1:trials 也是如此。

此外,此代码不完整,因为您在将 X 设置为任何内容之前使用了 X[i],这会导致错误。

另外,P矩阵有错误吗?我不认为你的最后一行加起来是 1——当 i == k 和 j == k-1 时,你需要做一个单独的“else if”案例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多