'too many input arguments' in mhsample
3 次查看(过去 30 天)
显示 更早的评论
I am having the error 'too many input arguments' during my function call which itself is called by another built-in MatLab function 'mhsample'. I have not been able to figure out any reason for this error. Following is the snippet of the code:
% specification of unnormalized posterior pdf to sample from
pdfPost=@(x)posteriorDist(x,C,artificialNetwork,xPrior);
% specification of proposal distribution
pdfProp=@(x)priorDist(x,xPrior);
% specification of random number generator from proposal distribution
generator = @(x) (xPrior(:,1)+rand(7,1).*(xPrior(:,2)-xPrior(:,1)));
% calculation of posterior of model parameters (lambda)
smpl = mhsample(x0,nsamples,'pdf',pdfPost,'proppdf',pdfProp,'proprnd',generator);
Following is the error message:
Error using mhsample (line 117)
Error occurred while trying to evaluate the user-supplied
proppdf function '@(x)priorDist(x,xPrior)'.
Error in metroPolisHastingSampling (line 33)
smpl =
mhsample(x0,nsamples,'pdf',pdfPost,'proppdf',pdfProp,'proprnd',generator);
Caused by:
Error using @(x)priorDist(x,xPrior)
Too many input arguments.
'metroPolisHastingSampling' is the name of the script I have used for implementing Metropolis-Hastings sampling method.
So, the error is in proposal distribution which only has one input argument? So, why am I getting this error? Any useful comment is appreciated?
The code for priorDist is as follows:
function [p] = priorDist(x,xprior)
p=1/prod(xPrior(:,2)-xPrior(:,1));
end
I have provided all other codes below: Here is the code for 'PosteriorDist':
function ptr = posteriorDist(x,C,artificialNetwork)
lh=likelihoodPost(artificialNetwork,x,C); % likelihood of observation given these parameters
priorParam = priorDist(x); % computation of joint prior of model parameters
ptr=lh*priorParam; % computation of unnormalized posterior
end
rest of the definitions are
x0=5*ones(7,1);
nsamples=10000;
xprior=[zeros(7,1) 15*ones(15,1)];
C=rand(7,7);
I have taken a random just for testing purposes. artificialNetwork contains information and relevant data.
4 个评论
采纳的回答
Walter Roberson
2017-9-2
"proppdf takes two arguments as inputs with the same type and size as start."
"The proposal distribution q(x,y) gives the probability density for choosing x as the next point when y is the current point. It is sometimes written as q(x|y)."
Your line
pdfProp=@(x)priorDist(x,xPrior);
should probably just be
pdfProp = @priorDist;
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!