我从2011年的人口普查中获得了意大利城市规模的数据,我想用双Pareto LogNormal来装配它们,但我不能。我尝试定义一个函数句柄,这是以这种方式分发的对数可能性
ln_lik_dpln=@(alpha,beta,mu,sigma) ...
- sum(log(alpha) + log(beta) - log(alpha+beta) + ...
normpdf((pop2011-mu)/sigma) + ...
log(normpdf((alpha*sigma)-((pop2011-mu)/sigma))/normcdf((alpha*sigma)- ...
((pop2011-mu)/sigma)) + ...
normpdf((beta*sigma)-((pop2011-mu)/sigma))/normcdf((beta*sigma) - ...
((pop2011-mu)/sigma))))
然后使用fmincon
和fminunc
将其最小化,但两者都无法识别beta。
答案 0 :(得分:1)
您需要编写匿名函数,以便其参数由单个向量而不是多个标量参数描述。例如,
ln_lik_dpln=@(x) ...
- sum(log(x(1)) + log(x(2)) - log(x(1)+x(2)) + ...
normpdf((pop2011-x(3))/x(4)) + ...
log(normpdf((x(1)*x(4))-((pop2011-x(3))/x(4)))/normcdf((x(1)*x(4))- ...
((pop2011-x(3))/x(4))) + ...
normpdf((x(2)*x(4))-((pop2011-x(3))/x(4)))/normcdf((x(2)*x(4)) ...
((pop2011-x(3))/x(4)))))
然后,您可以将此函数句柄传递给fmincon
或fminunc
,以便从长度为4的初始向量最小化。