我正在尝试模拟参数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);
答案 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
输出的直方图,即您的模拟pdf
用于与模拟进行比较
这只是一个疯狂的猜测,因为这两个数字彼此相似,也是beta-distribution-esque。
如果你想要一个比这更复杂的分析,我恐怕我还不熟练MCMC:)