'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 个评论
Image Analyst
Image Analyst 2017-9-2
Why are you passing x into distPrior() when you don't even use it?
Abhinav
Abhinav 2017-9-2
编辑:Abhinav 2017-9-2
you are right, I don't need to pass x in this case. But in a general case, I will need x too. Therefore, I kept x in priorDist function. Also, I tried removing x but it gives the same error.

请先登录,再进行评论。

采纳的回答

Walter Roberson
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;
  8 个评论
Abhinav
Abhinav 2017-9-3
I understand. I will test my code again with some of your suggestions and try to find out the problem.
Abhinav
Abhinav 2017-9-3
Walter Roberson, I could figure out the problem finally. mhsample expects two arguments in proposal distribution function: x and y. My proposal distribution was dependent only on one argument so I passed one argument x. But when I pass two argument x and y, it works even though y is not used in my proposal distribution.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 MATLAB 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by