|
PROC GEN_SIG;
local ystarr,ystar,xstar,v,psi,c,accept,psi_g,root,rootmod,nn,d,t2,
sig2_v_g,coef,tstar,SIG2,Y_TMP;
Y_TMP=YTT-MU0TT*ONES(T,1)-MU1TT*STT;
TSTAR=ROWS(Y_tmp);
nn = tstar + v0_;
d = d0_ + (Y_tmp)'(Y_tmp);
c = rndc(nn);
t2 = c/d;
SIG2=1/t2;
RETP(SIG2);
ENDP;
这是第一次引用的地方,这里的目的是生成IG inverted gamma 分布
IG(v/2, 1/2)=G(v/2, 2) = Chi-square(k)
所以作者用卡方分布来生成IG分布 其他都是scale的问题
再来看引用RG的2小段:
proc rndc(a); /* chisquare */ 作者在这里提到了 这是为了生成卡方分布
local x,w;
a = a/2;
w= rg1(a);
x = w * 2;
retp(x);
endp;
proc rndb(a,b); /* beta */ 这段用来生成beta分布 Beta(a,b)
local x,a1n,a1d;
a1n = rg1(a);
a1d = rg1(b);
x = a1n / (a1n + a1d); Gamma(a, t)/G(a,t)+G(b,t) = Beta(a,b)
retp(x);
endp;
RG1 RG2 事实上是用来生成Gamma分布或者说Chi2(k)=Gamma(k/2, 1/2)
RG2 用的是acceptance-rejection method 具体细节得查查课本了,但基本意思就是这样了
|