如何在Matlab中使用Metropolis hasting算法进行MCMC仿真?

时间:2014-08-26 16:06:00

标签: matlab montecarlo markov-chains beta-distribution

我正在尝试模拟参数theta f= theta ^(z_f+n+alpha-1)*(1-theta)^(n+1-z_f-k+ beta-1)的分布,其中除了theta之外的所有参数都是已知的。我正在使用Metro polish hasting算法来进行MCMC模拟。我的提案密度是带有参数alpha和beta的beta分布。我的模拟代码如下。我为此目的使用了一个名为mhsample()的buitlin Matlab代码,如何知道我的代码是否正常工作?

clear
clc
alpha=2;
beta=2;
z_f=1;
n=6;
k=5;

nsamples = 3000;
pdf= @(x) x^(z_f+n+alpha-1)*(1-x)^(n+1-z_f-k+beta-1); % here x acts as theta
proppdf= @(x,y) betapdf(x, alpha, beta);
proprnd =@(x) betarnd(alpha,beta,1);

smpl = mhsample(0.1,nsamples,'pdf',pdf,'proprnd',proprnd,'proppdf',proppdf);

1 个答案:

答案 0 :(得分:0)

当你说“我怎么知道我的代码是否正常工作”时,我不确定你在问什么? - 我假设它执行了吗?但是,为了对您的功能与模拟进行直观比较,您可以绘制PDF和您从mhsample获得的数据,如下所示:

% i'm assuming you ran the code above so that smpl and @pdf are both defined...

fplot(pdf,[0 1]); % fplot takes your function and plots it between x-limit [0,1]
figure % new figure
hist(smpl,30); % 30 here is bin size, change it to your preference

下图:

  • 左侧smpl输出的直方图,即您的模拟
  • 右侧[0,1]中的函数pdf用于与模拟进行比较

output of smpl on left, pdf bounded in [0,1] on right

这只是一个疯狂的猜测,因为这两个数字彼此相似,也是beta-distribution-esque。

如果你想要一个比这更复杂的分析,我恐怕我还不熟练MCMC:)