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

Shiny App on Evolutionary Dynamics: Simulation Errors?

我是一名刚开始学习 R 的数学研究生,我真的需要任何懂 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

您可以通过将人口滑块设置为最大 (200) 或最小 (0) 来重现此错误, 并重复点击“Simulate Single Population”(在左侧边栏中)直到出现错误。在出现错误之前,您可能需要点击它多次。

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

    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. 对于偶尔出现在大量人群 (N>100) 中的错误——转移概率的归一化项丢失了!更换它解决了问题。

  2. 对于小群体(N<10)偶尔出现的误差——抽样函数存在索引误差。我重新标记了用于抽样转移概率的转移矩阵的行和列,然后(错误地)认为我可以用新名称引用这些行。从 0 开始计数的会计解决了这个问题。

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