【问题标题】:Fitting a distribution with Matlab?用 Matlab 拟合分布?
【发布时间】:2015-08-01 22:00:21
【问题描述】:

我有 2011 年人口普查的意大利城市规模数据,我想用 Double 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))))

然后使用 fminconfminunc 将其最小化,但两者都无法识别 beta。

【问题讨论】:

  • 欢迎堆栈溢出!很难帮助您提供您提供的信息。请发布更多您的代码,以便您提供的小样本可以在上下文中考虑。还请提供有关尝试运行代码时发生的情况的更多信息。当你只说“两者都不识别 beta”时,很难知道到底发生了什么。此外,重新格式化您提供的代码示例以使其占用多行(此处和您自己的文件中)是一个好主意,因为它更具可读性,更易于调试等。

标签: matlab optimization parameters distribution curve-fitting


【解决方案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)))))​

然后您可以将此函数句柄传递给fminconfminunc,以便从某个长度为 4 的初始向量中最小化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-06
    • 2012-05-17
    • 2012-10-11
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    相关资源
    最近更新 更多