我对贝叶斯统计比较陌生,所以请保持温和。
我刚刚执行了近似贝叶斯计算 (ABC) 来推断多参数模型。现在我正在寻找对已推断的参数进行后验预测检查。
我想知道的是,当从后验抽样以生成后验预测检查的汇总统计数据时,我是独立于每个参数的边际后验抽样,还是应该联合抽样参数值(即样本从产生公认的汇总统计的确切参数组合)。
该模型包含很多参数(超过 6 个),我对每个参数的边际后验感兴趣。我希望这个问题是有道理的。
我对贝叶斯统计比较陌生,所以请保持温和。
我刚刚执行了近似贝叶斯计算 (ABC) 来推断多参数模型。现在我正在寻找对已推断的参数进行后验预测检查。
我想知道的是,当从后验抽样以生成后验预测检查的汇总统计数据时,我是独立于每个参数的边际后验抽样,还是应该联合抽样参数值(即样本从产生公认的汇总统计的确切参数组合)。
该模型包含很多参数(超过 6 个),我对每个参数的边际后验感兴趣。我希望这个问题是有道理的。
新手的好问题!!!
您的 ABC 算法为您提供了一个样本来自 ABC 后验分布。对于向量的每个分量, 你因此得到一个大小的样本从边缘 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
}