function lnprior = priordens(para, pshape, p1, p2, p3, p4) % function lnprior = priordens(para, pshape, p1, p2, p3, p4) % computes a prior density for the structural parameters of DSGE models % % INPUTS % para: parameter value % pshape: 0 is point mass, both para and p2 are ignored % 1 is BETA(mean,stdd) % 2 is GAMMA(mean,stdd) % 3 is NORMAL(mean,stdd) % 4 is INVGAMMA(s^2,nu) % 5 is UNIFORM [p3,p4] % p1: mean % p2: standard deviation % p3: lower bound % p4: upper bound % % OUTPUTS % lnprior: log of the prior density % % SPECIAL REQUIREMENTS % none % % part of DYNARE, copyright Dynare Team (2003-2008) % Gnu Public License. lnprior = 0; nprio = length(pshape); i = 1; while i <= nprio; a = 0; b = 0; if pshape(i) == 1; % (generalized) BETA Prior mu = (p1(i)-p3(i))/(p4(i)-p3(i)); stdd = p2(i)/(p4(i)-p3(i)); a = (1-mu)*mu^2/stdd^2 - mu; b = a*(1/mu - 1); lnprior = lnprior + lpdfgbeta(para(i),a,b,p3(i),p4(i)) ; elseif pshape(i) == 2; % GAMMA PRIOR b = p2(i)^2/(p1(i)-p3(i)); a = (p1(i)-p3(i))/b; lnprior = lnprior + lpdfgam(para(i)-p3(i),a,b); elseif pshape(i) == 3; % GAUSSIAN PRIOR lnprior = lnprior + lpdfnorm(para(i),p1(i),p2(i)); elseif pshape(i) == 4; % INVGAMMA1 PRIOR lnprior = lnprior + lpdfig1(para(i),p1(i),p2(i)); elseif pshape(i) == 5; % UNIFORM PRIOR lnprior = lnprior + log(1/(p2(i)-p1(i))); elseif pshape(i) == 6; % INVGAMMA2 PRIOR lnprior = lnprior + lpdfig2(para(i),p1(i),p2(i)); end; i = i+1; end; % 10/11/03 MJ adapted from an earlier version in GAUSS by F. Schorfheide % and translated to Matlab by R. Wouters % 11/18/03 MJ adopted M.Ratto's suggestion for inverse gamma % changed order of input parameters % 01/16/04 MJ added invgamma2 % for invgamma p2 is now standard error % 16/02/04 SA changed beta prior call