使用R语言abc包进行ABC参数校准:估计结果不准确求助
ABC参数校准结果偏差问题排查求助
我正尝试使用近似贝叶斯计算(ABC)校准参数,使模型输出变量贴近文献中的观测值,采用R语言的abc包实现。第一步通过cv4abc函数测试容忍率对ABC估计结果的影响,但发现估计值与真实值偏差极大。我已测试rejection、loclinear、neuralnet三种ABC算法,以及none、log两种转换方式,推测代码存在问题,恳请协助排查估计不准确的原因,或推荐更合适的参数校准方法。
相关信息
- 数据集:包含模拟响应值、simulated_RMSE(每行模拟响应值与文献均值1.5的RMSE)、param_1至param_20
- 文献中观测响应变量:最小值0.5,最大值2.5,均值1.5
- 模拟汇总统计量:数据集内的simulated_RMSE
- 待估计参数:param_1至param_20
- 观测汇总统计量:0(即RMSE=0)
- 示例结果图:

代码实现
library(abc) data <- read.csv("C:/Users/Downloads/Test.csv") ## summary(data) ## Observed summary statistics observed_summary_statistics <- 0 ## Simulated summary statistics simulated_summary_statistics <- data[, c("simulated_RMSE")] ## summary(simulated_summary_statistics) ## Simulated parameter values simulated_parameters <- data[, !(colnames(data) %in% c("simulated_response", "simulated_RMSE"))] ## summary(simulated_parameters) ## Run the "cv4abc" function of the "abc" package cv_abc_rejection <- abc::cv4abc(param = simulated_parameters, sumstat = simulated_summary_statistics, nval = 100, tols = c(0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1), method = "rejection", transf = "none") ## plot(cv_abc_rejection) ## summary(cv_abc_rejection) cv_abc_rejection_log <- abc::cv4abc(param = simulated_parameters, sumstat = simulated_summary_statistics, nval = 100, tols = c(0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1), method = "rejection", transf = "log") ## plot(cv_abc_rejection_log) ## summary(cv_abc_rejection_log) cv_abc_loclinear <- abc::cv4abc(param = simulated_parameters, sumstat = simulated_summary_statistics, nval = 100, tols = c(0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1), method = "loclinear", transf = "none") ## plot(cv_abc_loclinear) ## summary(cv_abc_loclinear) cv_abc_loclinear_log <- abc::cv4abc(param = simulated_parameters, sumstat = simulated_summary_statistics, nval = 100, tols = c(0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1), method = "loclinear", transf = "log") ## plot(cv_abc_loclinear_log) ## summary(cv_abc_loclinear_log) cv_abc_neuralnet <- abc::cv4abc(param = simulated_parameters, sumstat = simulated_summary_statistics, nval = 100, tols = c(0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1), method = "neuralnet", transf = "none") ## plot(cv_abc_neuralnet) ## summary(cv_abc_neuralnet) cv_abc_neuralnet_log <- abc::cv4abc(param = simulated_parameters, sumstat = simulated_summary_statistics, nval = 100, tols = c(0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1), method = "neuralnet", transf = "log") ## plot(cv_abc_neuralnet_log) ## summary(cv_abc_neuralnet_log)
内容的提问来源于stack exchange,提问作者Pierre Levoisin
相关产品推荐
相关产品推荐

