函数[xxxp,lt,acc]=mtwalk(logTarget,nsamp,x0,xp0)%函数文件从目标分布实现t-walk采样%%[xxp,lt,acc]=twalkparam(logTarget,nsamp,x0,xp0,p)%%输入参数:%logTarget计算目标密度日志的函数的名称。%对于不支持的点,应返回-Inf。%nsamp步骤数%x0,xp0起始值(n乘1列向量,不相等)%输出参数:%xxp 2*n by(nsamp+1)输出样本数组%xxp(1:n,:)是x值链%xxp(n+(1:n),:)是xp值链%对数目标密度值链%每次移动的验收率的acc向量和平均值。%%此新版本不向后兼容:%奥斯卡·阿尔贝托·罗德里格斯-梅伦德斯,2017年10月。%创建了下面的多元正态分布示例%删除了传递给logTarget的附加参数“p”。%安德烈亚斯·尼尔森,2016年7月。%根据Christen和Fox(2010)更改了参数aw和at%引入[phi]仅移动参数的比例%科林·福克斯(Colin Fox),2006年简写本,原版。%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%示例:多元正态分布,平均值为[00]',方差为[1 0;0 1]。%%mu=[00]';σ=眼睛(2);%logTarget=@(x)-0.5*(x-mu)'*(sigma\(x-mu));%nsamp=100000;x0=[1 2]';xp0=[-1 1]';%[xxp,lt,acc]=mtwalk(logTarget,nsamp,x0,xp0);%历史3(xxp(1:2,:)’)%数字%历史3(xxp(3:4,:)')%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%twalk的Matlab实现:函数体mtwalk%初始值x=x0;xp=xp0;ltx=feval(logTarget,x);ltxp=feval(logTarget,xp);if(ltx==-Inf)||(ltxp==-Inf)disp('初始值不受支持:'),eval('x'),eval('xp')返回结束移动比率=[0 60 60 1 1];%移动0的第一个比率--即不移动。MoveProb=累计(移动比率(1:end 1)/总和(移动比率));n1=4;%预期要移动的参数数pphi=最小值(长度(x),n1)/长度(x;prop=零(大小(移动比率));%收集提案数量acc=零(大小(移动比率));%收款接受率xxp=零(2*长度(x),nsamp+1);%存储输出lt=零(2,nsamp+1);%存储对数目标密度值xxp(:,1)=[x;xp];lt(:,1)=[ltx;ltxp];对于iter=1:nsampdir=兰特<0.5;%选择方向kernum=总和(MoveProb<=rand);%选择内核(0到#Moves-1)φ=兰特(长度(x),1)0σ=最大值(abs(xp(φ)-x(φ)));其他的σ=0;结束h=x+phi.*sigma/3.*randn(尺寸(x));%iid标准正态%计算密度比g(x|h,x')/g(h|x,x')的对数lgr=lg3(x,h,xp,phi)-lg3(h,x,xp、phi);%-------------------------------------------------------------------------函数lg=lg3(h,x,xp,phi)%跳跃移动的原木密度,达到不影响比率的常数如果总和(φ)>0σ=最大值(abs(xp(φ)-x(φ)));其他的σ=0;结束nI=总和(φ);lg=-nI*log(sigma)-总和((h-x)^2) /(2*sigma^2);%-------------------------------------------------------------------------函数[h,lgr]=Simh4(x,xp,phi)%[h,lgr]=模拟4(x,xp)%吹核如果总和(φ)>0σ=最大值(abs(xp(φ)-x(φ)));其他的σ=0;结束h=x;h(φ)=xp(φ)+sigma*randn(尺寸(x(φ)));%iid标准正态%评估密度比g(x|h,x')/g(h|x,x')的对数lgr=lg4(x,h,xp,phi)-lg4(h,x,xp、phi);%-------------------------------------------------------------------------函数lg=lg4(h,x,xp,phi)%冲击移动的原木密度,达到不影响比率的恒定值如果总和(φ)>0σ=最大值(abs(xp(φ)-x(φ)));其他的σ=0;结束nI=总和(φ);lg=-nI*log(sigma)-总和((h-xp)^2) /(2*sigma^2);