首页 > 解决方案 > 在easyABC R包中设置一个长的汇总统计向量

问题描述

我正在使用 easyABC 运行基于 R 的模拟。

这些模拟通过输入脚本包含在几个不同的程序(dadi、SPLATCHE3 - 人口统计模拟器)中,所有这些都不会产生错误并且会创建正确的输出文件。它包含要模拟的 4 个个体。

作为easyABC拒绝算法的一部分,我必须为算法设置一个向量先验汇总统计信息,以测试其自身的结果。在玩具模型中,我设置了 4 个汇总统计数据,每个人一个,即:

sum_stat_obs = c(8, 8, 6, 4)

现在对于真实模型,我想设置一个更长的汇总统计向量(选择的汇总统计是站点频谱),即:

sum_stat_obs = c(0.002,0.0003,0.000566,0.007,0.0002,0.0005,0.0002,0.0005,0.0007,0.0008,0.0009,0.0005,0.0003,0.0005,0.00022,0.00055,0.000099)

但是,当我运行命令时:

abc_sim2 = ABC_rejection(
  model = binary_model('~/run_sim4.sh'),
  prior = prior, #the model priors
  nb_simul = 13000, #number of simulations
  summary_stat_target = sum_stat_obs, #summary statistics
  tol = 0.5 #how many simulations should be saved
# verbose = T
)

它运行模拟,无论我运行多少都结束,并产生错误:

Error in abc(summary_stat_target, rejection$param, rejection$stats, tol,  : 
  
Number of summary statistics in 'target' has to be the same as in 'sumstat'

当我将它切换回 4sum_stat_obs时,没有产生这个错误,所以我认为它与模拟的目标人数有关。上述命令中无法访问参数“目标”。

此外,在此错误中调用了“abc”包,即使它没有在原始命令中调用。但是,“easyABC”和“abc”包可以相互结合使用。

有什么办法可以绕过这个错误,这样我就可以在sum_stat_obs不增加模拟人数的情况下获得更长的向量?

标签: rsimulationbioinformaticsbayesian

解决方案


推荐阅读