Как выполнить симуляцию MCMC с использованием алгоритма хастинга Metropolis в Matlab?
Я пытаюсь смоделировать распределение для параметра тета f= theta ^(z_f+n+alpha-1)*(1-theta)^(n+1-z_f-k+ beta-1)
где все параметры, кроме тета, известны. Я использую алгоритм Metro Hasting для моделирования MCMC. Мое предложение плотности - это бета-версия с параметрами альфа и бета. Мой код для симуляции выглядит следующим образом. Для этой цели я использую код Buitlin Matlab, называемый mhsample(). Как узнать, работает ли мой код правильно?
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 ответ
Я не уверен в том, что вы спрашиваете, когда говорите "как я узнаю, что мой код работает правильно" - я предполагаю, что он выполняется? Но для визуального сравнения вашей функции с симуляцией вы можете отобразить как 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
ограничен в [0,1] справа для сравнения с вашим моделированием
Это было просто дикое предположение, потому что эти две фигуры похожи друг на друга и также являются бета-дистрибутивными.
Если вам нужен более сложный анализ, боюсь, я еще не разбираюсь в MCMC:)