【问题标题】:Shiny App on Evolutionary Dynamics: Simulation Errors?进化动力学的闪亮应用:模拟错误?
【发布时间】:2015-09-27 21:56:17
【问题描述】:

我是一名刚开始学习 R 的数学研究生,我真的可以从任何 R 识字的人那里得到一些帮助!

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

问题: 应用程序的模拟部分抛出了 2 个我还没弄清楚的错误。它们如下:

当种群大小 N 很小 (N 它经常(但不总是)抛出

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) 来复制此错误, 并反复单击“模拟单一种群”(在左侧边栏中),直到出现错误。在出现错误之前,您可能需要多次单击它。

似乎问题可能出自以下代码

    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 
    }

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

【问题讨论】:

  • 我没有详细查看您的代码,但这可能会让您入门:由于您在此处为示例函数提供了 prob 参数:sample(1:(N+1),1,prob=MPM[sim[i-1],]),因此可能是错误发生的地方.在第一种情况下,prob 向量中的概率数量小于length(x),从而导致错误(因此您需要弄清楚这是如何发生的)。在第二种情况下,看起来MPM[sim[i-1],] 必须至少有一个负值,这对于概率来说是没有意义的,从而导致错误(因此请检查导致MPM[sim[i-1],] 为负的原因)。
  • 更正:在第二个错误中,某些原因导致MPM[sim[i-1],] 的值为非正值,因此请检查是什么导致MPM[sim[i-1],] 的值变为负值或零。
  • @eipi10 谢谢!这是很有帮助的方向。我已经弄清楚了在大量人群(N>100)中发生的错误——有一个标准化项意外丢失了。我仍在努力解决小群体 (N
  • 解决了第二个也是最后一个错误。该错误实际上是采样函数的索引问题;我的一个错误。我重新标记了用于采样转换概率的转换矩阵的行和列,然后(错误地)认为我可以通过它们的新名称来引用这些行。 @eipi10 再次感谢您的帮助。

标签: r shiny simulation probability probability-theory


【解决方案1】:

解决方案是:

  1. 对于大群体 (N>100) 中偶尔发生的错误——转移概率的归一化项丢失了!更换它解决了这个问题。

  2. 对于小群体 (N

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

【讨论】:

    猜你喜欢
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2015-08-24
    • 2019-07-12
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    相关资源
    最近更新 更多