进化动力学的闪亮应用:模拟错误?

时间:2015-09-27 21:56:18

标签: r shiny simulation probability probability-theory

我是一名刚刚开始学习R的数学专业的学生,​​我真的可以使用任何有文化知识的人的帮助!

我正在构建一个闪亮的应用程序来模拟概率进化行为(作为马尔可夫过程)。 可以看到(在展示模式下):

问题:该应用的模拟部分抛出了2个我没想到的错误。它们如下:

当人口规模N很小(N <10)时,它经常(但并不总是)抛出

Error: in sample.int(length(x), size, replace, prob) : 
  incorrect number of probabilities

当人口规模N很大(N> 100)时,它经常(但并不总是)抛出

Error: in sample.int(length(x), size, replace, prob) : 
  non-positive probability

您可以通过将人口滑块设置为max(200)或min(0)来复制此错误, 然后反复单击“模拟单个人口”(在左侧边栏中),直到出现错误。在收到错误之前,您可能需要多次单击它。

似乎问题可能源于此部分代码:

    MPM.sim <- function(t, MPM, πNought) { 
# The simulation function takes as arguments: duration t, the MPM matrix of transition probabilities, and some initial condition πNought
      sim <- as.numeric(t)
      if (missing(πNought)) { # If the initial state is not specified
        sim[1] <- (sample(1:(N+1),1) - 1) # Then take a random initial state 
      }else{sim[1]<-πNought} # If the initial state is specified, start from that state.
      for(i in 2:t){ # For each step of the simulation after the initial state,
        newstate <- sample(1:(N+1),1,prob=MPM[sim[i-1],]) # The transition to the next state is given by the transition matrix MPM.
        sim[i] <- newstate
      } 
      sim 
    }

我非常感谢有关如何解决此问题的任何帮助或建议!

1 个答案:

答案 0 :(得分:1)

解决方案是:

  1. 对于偶尔发生在大群体中的错误(N> 100) - 转换概率的归一化术语已经消失!更换它解决了这个问题。

  2. 对于偶然发生在小群体中的错误(N <10) - 在采样函数中存在索引误差。我重新标记了用于采样转换概率的转换矩阵的行和列,然后(错误地)认为我可以通过新名称引用行。从0开始计算会计解决问题。

  3. 再次感谢@ eipi10的宝贵帮助。