进化动力学的闪亮应用程序:模拟错误?
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
}
非常感谢任何有关如何解决此问题的帮助或建议!
解决方案是:
对于偶尔出现在大量人群 (N>100) 中的错误——转移概率的归一化项丢失了!更换它解决了问题。
对于小群体(N<10)偶尔出现的误差——抽样函数存在索引误差。我重新标记了用于抽样转移概率的转移矩阵的行和列,然后(错误地)认为我可以用新名称引用这些行。从 0 开始计数的会计解决了这个问题。
再次感谢@eipi10 的宝贵帮助。
我是一名刚开始学习 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
}
非常感谢任何有关如何解决此问题的帮助或建议!
解决方案是:
对于偶尔出现在大量人群 (N>100) 中的错误——转移概率的归一化项丢失了!更换它解决了问题。
对于小群体(N<10)偶尔出现的误差——抽样函数存在索引误差。我重新标记了用于抽样转移概率的转移矩阵的行和列,然后(错误地)认为我可以用新名称引用这些行。从 0 开始计数的会计解决了这个问题。
再次感谢@eipi10 的宝贵帮助。