多参数 ABC 推理后的后验预测检查

机器算法验证 贝叶斯 后部 近似贝叶斯计算
2022-04-01 23:02:31

我对贝叶斯统计比较陌生,所以请保持温和。

我刚刚执行了近似贝叶斯计算 (ABC) 来推断多参数模型。现在我正在寻找对已推断的参数进行后验预测检查。

我想知道的是,当从后验抽样以生成后验预测检查的汇总统计数据时,我是独立于每个参数的边际后验抽样,还是应该联合抽样参数值(即样本从产生公认的汇总统计的确切参数组合)。

该模型包含很多参数(超过 6 个),我对每个参数的边际后验感兴趣。我希望这个问题是有道理的。

1个回答

新手的好问题!!!

您的 ABC 算法为您提供了一个样本θ1,,θM来自 ABC 后验分布。对于向量的每个分量θ, 你因此得到一个大小的样本M从边缘 ABC 后部。例如,当使用中值和 mad 作为摘要时,这是一个关于均值方差正态后验的玩具示例:

#normal data with 100 observations 
x=rnorm(100)
#observed summaries
sumx=c(median(x),mad(x))

#normal x gamma prior
priori=function(N){
  return(cbind(rnorm(N,sd=10),1/sqrt(rgamma(N,shape=2,scale=5))))
  }

ABC=function(N){

  prior=priori(N)  #reference table

  #pseudo-data
  summ=matrix(0,N,2)
  for (i in 1:N){
    xi=rnorm(100)*prior[i,2]+prior[i,1]
    summ[i,]=c(median(xi),mad(xi)) #summaries
    }

  #normalisation factor for the distance
  mads=c(mad(summ[,1]),mad(summ[,2]))

  #distance
  dist=(abs(sumx[1]-summ[,1])/mads[1])+(abs(sumx[2]-summ[,2])/mads[2])

  #selection
  posterior=prior[dist<quantile(dist,.05),]

  return(posterior)
  }

如果你绘制

res=ABC(10^5);hist(res[,1])

您将获得正常均值的边际 ABC 后验。

但是,如果您想进行后验预测检查,则无法一次生成一个后验组件来获取伪数据和相应的摘要。您需要均值和方差才能获得新的正态样本!所以我的 R 代码将是

postsample=res[sample(1:length(res[,1]),10^3),]

从 ABC 后验中抽取样本,然后将生成伪数据,如前所述:

  #pseudo-data
  summ=matrix(0,M,2)
  for (i in 1:M){
    xi=rnorm(100)*postsample[i,2]+postsample[i,1]
    summ[i,]=c(median(xi),mad(xi)) #summaries
    }