使用 mle() 估计自定义分布的参数

Posted

技术标签:

【中文标题】使用 mle() 估计自定义分布的参数【英文标题】:Estimating the parameters of a custom distribution using mle() 【发布时间】:2019-06-17 05:46:56 【问题描述】:

我有以下代码,希望估计自定义分布的参数。 For more details on the distribution。然后使用估计的参数,我想看看估计的 PDF 是否类似于给定数据的分布(它应该与给定数据的分布相匹配)。

[编辑]:“x”现在包含数据样本,而不是 PDF

主要代码是:

x           = [0.0320000000000000   0.0280000000000000  0.0280000000000000  0.0270000000000000  0.0320000000000000  0.0320000000000000  0.0480000000000000  0.0890000000000000  0.0500000000000000  0.0620000000000000  0.0480000000000000  0.0300000000000000  0.0520000000000000  0.0460000000000000  0.0540000000000000  0.0520000000000000  0.0510000000000000  0.0310000000000000  0.0330000000000000  0.0330000000000000  0.0380000000000000  0.0850000000000000  0.102000000000000   0.0290000000000000  0.0530000000000000  0.0590000000000000  0.0320000000000000  0.0800000000000000  0.0410000000000000  0.0280000000000000  0.0670000000000000  0.0350000000000000  0.0420000000000000  0.0280000000000000  0.0370000000000000  0.0480000000000000  0.0330000000000000  0.101000000000000   0.0420000000000000  0.0840000000000000  0.0340000000000000  0.0900000000000000  0.0900000000000000  0.0460000000000000  0.0290000000000000  0.0330000000000000  0.0350000000000000  0.0330000000000000  0.0320000000000000  0.0420000000000000  0.0600000000000000  0.0500000000000000  0.0390000000000000  0.0480000000000000  0.0680000000000000  0.0330000000000000  0.0510000000000000  0.0430000000000000  0.0270000000000000  0.0330000000000000  0.0590000000000000  0.0380000000000000  0.0270000000000000  0.0600000000000000  0.0310000000000000  0.0520000000000000  0.0350000000000000  0.0640000000000000  0.0570000000000000  0.0520000000000000  0.0330000000000000  0.0480000000000000  0.0530000000000000  0.0380000000000000  0.0320000000000000  0.0340000000000000  0.0380000000000000  0.0470000000000000  0.0950000000000000  0.0510000000000000  0.0280000000000000  0.124000000000000   0.0360000000000000  0.0670000000000000  0.0380000000000000  0.0760000000000000  0.0440000000000000  0.0390000000000000  0.0500000000000000  0.0500000000000000  0.0370000000000000  0.0350000000000000  0.0490000000000000  0.0570000000000000  0.0560000000000000  0.0500000000000000  0.0350000000000000  0.0390000000000000  0.0390000000000000  0.0310000000000000  0.0260000000000000  0.0350000000000000  0.0610000000000000  0.0280000000000000  0.0480000000000000  0.0560000000000000  0.0650000000000000  0.0400000000000000  0.131000000000000   0.0600000000000000  0.0310000000000000  0.0620000000000000  0.0320000000000000  0.0510000000000000  0.0510000000000000  0.0480000000000000  0.0420000000000000  0.0470000000000000  0.0690000000000000  0.0590000000000000  0.0550000000000000  0.0580000000000000  0.0410000000000000  0.0320000000000000  0.0440000000000000  0.0370000000000000  0.0390000000000000  0.0620000000000000  0.0290000000000000  0.0340000000000000  0.0490000000000000  0.0300000000000000  0.0540000000000000  0.0420000000000000  0.0610000000000000  0.159000000000000   0.0520000000000000  0.0450000000000000  0.0670000000000000  0.0590000000000000  0.111000000000000   0.0250000000000000  0.0660000000000000  0.0210000000000000  0.0370000000000000  0.0330000000000000  0.0510000000000000  0.0330000000000000  0.0450000000000000  0.0530000000000000  0.0600000000000000  0.0400000000000000  0.0510000000000000  0.0680000000000000  0.0410000000000000  0.0490000000000000  0.0280000000000000  0.0520000000000000  0.0610000000000000  0.0390000000000000  0.0630000000000000  0.0360000000000000  0.0620000000000000  0.0550000000000000  0.0640000000000000  0.0650000000000000  0.0550000000000000  0.0480000000000000  0.0640000000000000  0.0850000000000000  0.0800000000000000  0.0390000000000000  0.0430000000000000  0.0380000000000000  0.0770000000000000  0.0620000000000000  0.0430000000000000  0.0490000000000000  0.0450000000000000  0.0510000000000000  0.0290000000000000  0.0440000000000000  0.0220000000000000  0.0400000000000000  0.0760000000000000  0.0290000000000000  0.0460000000000000  0.0450000000000000  0.0430000000000000  0.0790000000000000  0.0730000000000000  0.0660000000000000  0.0740000000000000  0.0330000000000000  0.0430000000000000  0.0450000000000000  0.0390000000000000  0.0610000000000000  0.0330000000000000  0.0480000000000000  0.0540000000000000  0.0400000000000000  0.0370000000000000  0.0350000000000000  0.0660000000000000  0.0280000000000000  0.0350000000000000  0.0500000000000000  0.0530000000000000  0.0370000000000000  0.0550000000000000  0.0390000000000000  0.0580000000000000  0.0220000000000000  0.0560000000000000  0.0440000000000000  0.0470000000000000  0.0390000000000000  0.0490000000000000  0.0640000000000000  0.0710000000000000  0.0510000000000000  0.0380000000000000  0.0480000000000000  0.0840000000000000  0.0430000000000000  0.0450000000000000  0.0370000000000000  0.0490000000000000  0.0390000000000000  0.0410000000000000  0.0440000000000000  0.0650000000000000  0.0470000000000000  0.0490000000000000  0.0480000000000000  0.0540000000000000  0.0680000000000000  0.0740000000000000  0.0350000000000000  0.0300000000000000  0.0450000000000000  0.0350000000000000  0.0370000000000000  0.0710000000000000  0.0360000000000000  0.0660000000000000  0.0380000000000000  0.0440000000000000  0.0320000000000000  0.0590000000000000  0.0390000000000000  0.0640000000000000  0.0630000000000000  0.0310000000000000  0.0570000000000000  0.0630000000000000  0.0280000000000000  0.0560000000000000  0.0910000000000000  0.0580000000000000  0.0680000000000000  0.0420000000000000  0.0810000000000000  0.0380000000000000  0.0250000000000000  0.0340000000000000  0.0450000000000000  0.0370000000000000  0.0390000000000000  0.0300000000000000  0.0410000000000000  0.0580000000000000  0.0300000000000000  0.0830000000000000  0.0380000000000000  0.0300000000000000  0.0530000000000000  0.0610000000000000  0.0370000000000000  0.0390000000000000  0.0340000000000000  0.0280000000000000  0.0420000000000000  0.0620000000000000  0.0520000000000000  0.0310000000000000  0.0590000000000000  0.0520000000000000  0.0420000000000000  0.0430000000000000  0.0410000000000000  0.0250000000000000  0.0570000000000000  0.0370000000000000  0.0270000000000000  0.0860000000000000  0.0660000000000000  0.0470000000000000  0.0270000000000000  0.0830000000000000  0.0440000000000000  0.0680000000000000  0.0500000000000000  0.0480000000000000  0.0520000000000000  0.0510000000000000  0.0290000000000000  0.0360000000000000  0.0290000000000000  0.0390000000000000  0.0290000000000000  0.0600000000000000  0.0310000000000000  0.0440000000000000  0.0410000000000000  0.0350000000000000  0.0510000000000000  0.0660000000000000  0.0450000000000000  0.0520000000000000  0.0530000000000000  0.0260000000000000  0.0690000000000000  0.0590000000000000  0.0760000000000000  0.118000000000000   0.0500000000000000  0.0480000000000000  0.0300000000000000  0.0300000000000000  0.0390000000000000  0.0340000000000000  0.0500000000000000  0.0280000000000000  0.0410000000000000  0.0490000000000000  0.0390000000000000  0.0390000000000000  0.0420000000000000  0.0520000000000000  0.0300000000000000  0.0320000000000000  0.0650000000000000  0.0650000000000000  0.0600000000000000  0.0450000000000000  0.0680000000000000  0.0350000000000000  0.0340000000000000  0.0260000000000000  0.0600000000000000  0.0920000000000000  0.0460000000000000  0.0560000000000000  0.0440000000000000  0.0450000000000000  0.0520000000000000  0.0480000000000000  0.0420000000000000  0.0990000000000000  0.0480000000000000  0.0360000000000000  0.0470000000000000  0.0390000000000000  0.0290000000000000  0.0270000000000000  0.0370000000000000  0.0580000000000000  0.0640000000000000  0.0300000000000000  0.0380000000000000  0.0240000000000000  0.0380000000000000  0.0830000000000000  0.0400000000000000  0.0990000000000000  0.0600000000000000  0.0580000000000000  0.0430000000000000  0.0840000000000000  0.0390000000000000  0.0370000000000000  0.0850000000000000  0.0590000000000000  0.0530000000000000  0.0560000000000000  0.0320000000000000  0.0340000000000000  0.0250000000000000  0.0520000000000000  0.0490000000000000  0.0270000000000000  0.0470000000000000  0.0520000000000000  0.0530000000000000  0.0410000000000000  0.0260000000000000  0.0290000000000000  0.0470000000000000  0.0550000000000000  0.0710000000000000  0.0520000000000000  0.0650000000000000  0.0440000000000000  0.0710000000000000  0.0550000000000000  0.0410000000000000  0.0640000000000000  0.0350000000000000  0.0930000000000000  0.0310000000000000  0.0480000000000000  0.0370000000000000  0.0380000000000000  0.0520000000000000  0.0370000000000000  0.0350000000000000  0.0280000000000000  0.0340000000000000  0.0400000000000000  0.0370000000000000  0.0570000000000000  0.0610000000000000  0.0440000000000000  0.0680000000000000  0.0470000000000000  0.0400000000000000  0.0270000000000000  0.0470000000000000  0.0350000000000000  0.0290000000000000  0.0280000000000000  0.0300000000000000  0.0770000000000000  0.0310000000000000  0.0560000000000000  0.0640000000000000  0.0420000000000000  0.0340000000000000  0.0290000000000000  0.0520000000000000  0.0260000000000000  0.0460000000000000  0.0380000000000000  0.0720000000000000  0.0750000000000000  0.0510000000000000  0.0560000000000000  0.0440000000000000  0.0390000000000000  0.0470000000000000  0.0450000000000000  0.0400000000000000  0.0880000000000000  0.0300000000000000  0.0440000000000000  0.0610000000000000  0.0370000000000000  0.0350000000000000  0.0490000000000000  0.0510000000000000  0.0820000000000000  0.0390000000000000  0.0440000000000000  0.0600000000000000  0.0310000000000000  0.0720000000000000  0.0460000000000000  0.0530000000000000  0.0500000000000000  0.0550000000000000  0.0390000000000000  0.0570000000000000  0.0460000000000000  0.0410000000000000  0.0470000000000000  0.0310000000000000  0.0720000000000000  0.0440000000000000  0.0610000000000000  0.0470000000000000  0.0420000000000000  0.0620000000000000  0.0790000000000000  0.0360000000000000  0.0450000000000000  0.0400000000000000  0.0540000000000000  0.0500000000000000  0.0430000000000000  0.0670000000000000  0.0230000000000000  0.0290000000000000  0.0450000000000000  0.0270000000000000  0.0470000000000000  0.0360000000000000  0.0600000000000000  0.0440000000000000  0.0290000000000000  0.0280000000000000  0.0350000000000000  0.0840000000000000  0.0660000000000000  0.0410000000000000  0.0300000000000000  0.0440000000000000  0.0450000000000000  0.0470000000000000  0.0620000000000000  0.0420000000000000  0.0300000000000000  0.0330000000000000  0.0320000000000000  0.0440000000000000  0.0700000000000000  0.0340000000000000  0.0420000000000000  0.0480000000000000  0.0360000000000000  0.0590000000000000  0.106000000000000   0.0280000000000000  0.0540000000000000  0.0870000000000000  0.0300000000000000  0.0300000000000000  0.0370000000000000  0.0210000000000000  0.0360000000000000  0.0910000000000000  0.126000000000000   0.0780000000000000  0.0510000000000000  0.0500000000000000  0.0370000000000000  0.0540000000000000  0.0380000000000000  0.0350000000000000  0.0480000000000000  0.0300000000000000  0.0340000000000000  0.133000000000000   0.0330000000000000  0.0340000000000000  0.0480000000000000  0.0590000000000000  0.0460000000000000  0.0650000000000000  0.0360000000000000  0.0650000000000000  0.0860000000000000  0.0290000000000000  0.0800000000000000  0.0430000000000000  0.0360000000000000  0.0490000000000000  0.0580000000000000  0.0310000000000000  0.0300000000000000  0.0330000000000000  0.0390000000000000  0.0330000000000000  0.0620000000000000  0.0330000000000000  0.0940000000000000  0.0270000000000000  0.0410000000000000  0.0570000000000000  0.0540000000000000  0.0390000000000000  0.0270000000000000  0.0590000000000000  0.0320000000000000  0.0390000000000000  0.0400000000000000  0.0720000000000000  0.0480000000000000  0.0480000000000000  0.0560000000000000  0.0730000000000000  0.0410000000000000  0.0520000000000000  0.0840000000000000  0.0590000000000000  0.0690000000000000  0.0330000000000000  0.0400000000000000  0.0320000000000000  0.0320000000000000  0.0310000000000000  0.0520000000000000  0.0760000000000000  0.0420000000000000  0.0370000000000000  0.0360000000000000  0.0780000000000000  0.0590000000000000  0.0390000000000000  0.0590000000000000  0.0880000000000000  0.0410000000000000  0.0640000000000000  0.0350000000000000  0.0350000000000000  0.0530000000000000  0.0490000000000000  0.0330000000000000  0.0640000000000000  0.0320000000000000  0.0880000000000000  0.0310000000000000  0.0980000000000000  0.0380000000000000  0.0270000000000000  0.0690000000000000  0.0530000000000000  0.0610000000000000  0.0380000000000000  0.0470000000000000  0.0620000000000000  0.0400000000000000  0.0400000000000000  0.0310000000000000  0.0740000000000000  0.0280000000000000  0.0310000000000000  0.0330000000000000  0.115000000000000   0.0890000000000000  0.0770000000000000  0.0490000000000000  0.0640000000000000  0.0580000000000000  0.0540000000000000  0.0330000000000000  0.0490000000000000  0.0230000000000000  0.0330000000000000  0.0490000000000000  0.0370000000000000  0.0330000000000000  0.0490000000000000  0.0460000000000000  0.0750000000000000  0.0420000000000000  0.0610000000000000  0.0340000000000000  0.0870000000000000  0.0390000000000000  0.0410000000000000  0.0430000000000000  0.0810000000000000  0.0570000000000000  0.0440000000000000  0.0470000000000000  0.0470000000000000  0.0320000000000000  0.0730000000000000  0.0590000000000000  0.0290000000000000  0.0450000000000000  0.0310000000000000  0.0450000000000000  0.0490000000000000  0.0880000000000000  0.0220000000000000  0.0330000000000000  0.0360000000000000  0.0350000000000000  0.0540000000000000  0.0470000000000000  0.0390000000000000  0.0300000000000000  0.0450000000000000  0.0740000000000000  0.0270000000000000  0.0320000000000000  0.0640000000000000  0.0750000000000000  0.0320000000000000  0.0300000000000000  0.0310000000000000  0.0470000000000000  0.0510000000000000  0.0520000000000000  0.0680000000000000  0.0700000000000000  0.0630000000000000  0.0410000000000000  0.0510000000000000  0.0460000000000000  0.0280000000000000  0.0780000000000000  0.0420000000000000  0.0390000000000000  0.0540000000000000  0.0310000000000000  0.0380000000000000  0.0320000000000000  0.0370000000000000  0.0260000000000000  0.0450000000000000  0.0610000000000000  0.0510000000000000  0.0240000000000000  0.0660000000000000  0.0380000000000000  0.0370000000000000  0.0450000000000000  0.0430000000000000  0.0710000000000000  0.0490000000000000  0.147000000000000   0.0340000000000000  0.0600000000000000  0.0400000000000000  0.0280000000000000  0.0350000000000000  0.0320000000000000  0.0410000000000000  0.0380000000000000  0.0380000000000000  0.0410000000000000  0.0600000000000000  0.0740000000000000  0.0350000000000000  0.0800000000000000  0.0370000000000000  0.0650000000000000  0.0300000000000000  0.0590000000000000  0.0620000000000000  0.0690000000000000  0.0540000000000000  0.0560000000000000  0.0230000000000000  0.0420000000000000  0.0560000000000000  0.0620000000000000  0.0460000000000000  0.0490000000000000  0.0690000000000000  0.0370000000000000  0.0400000000000000  0.0580000000000000  0.0340000000000000  0.0480000000000000  0.0300000000000000  0.0430000000000000  0.0270000000000000  0.0500000000000000  0.0550000000000000  0.0790000000000000  0.0380000000000000  0.0410000000000000  0.0450000000000000  0.0310000000000000  0.0430000000000000  0.0410000000000000  0.0480000000000000  0.0390000000000000  0.0650000000000000  0.0500000000000000  0.0500000000000000  0.0560000000000000  0.0690000000000000  0.0470000000000000  0.0790000000000000  0.0400000000000000  0.0540000000000000  0.0680000000000000  0.0660000000000000  0.0290000000000000  0.0520000000000000  0.0440000000000000  0.0570000000000000  0.0360000000000000  0.0610000000000000  0.0430000000000000  0.0470000000000000  0.0470000000000000  0.0500000000000000  0.0410000000000000  0.0690000000000000  0.0480000000000000  0.0480000000000000  0.0900000000000000  0.0590000000000000  0.0400000000000000  0.0340000000000000  0.0350000000000000  0.0520000000000000  0.0970000000000000  0.0350000000000000  0.0650000000000000  0.0320000000000000  0.0480000000000000  0.102000000000000   0.0410000000000000  0.0580000000000000  0.0260000000000000  0.0280000000000000  0.0660000000000000  0.0320000000000000  0.0390000000000000  0.0580000000000000  0.0450000000000000  0.0390000000000000  0.0610000000000000  0.0540000000000000  0.0490000000000000  0.0420000000000000  0.0490000000000000  0.0510000000000000  0.0350000000000000  0.0600000000000000  0.0920000000000000  0.0750000000000000  0.0360000000000000  0.0540000000000000  0.0850000000000000  0.0630000000000000  0.0330000000000000  0.0620000000000000  0.0370000000000000  0.0570000000000000  0.0280000000000000  0.0420000000000000  0.0510000000000000  0.0370000000000000  0.0480000000000000  0.125000000000000   0.0570000000000000  0.0870000000000000  0.0450000000000000  0.0310000000000000  0.0370000000000000  0.0650000000000000  0.0380000000000000  0.0590000000000000  0.0570000000000000  0.0540000000000000  0.0390000000000000  0.0500000000000000  0.0430000000000000  0.0360000000000000  0.0330000000000000  0.0280000000000000  0.0650000000000000  0.0440000000000000  0.0210000000000000  0.0410000000000000  0.0330000000000000  0.0600000000000000  0.0810000000000000  0.0370000000000000  0.0510000000000000  0.0370000000000000  0.0940000000000000  0.0440000000000000  0.0320000000000000  0.0590000000000000  0.0400000000000000  0.0570000000000000  0.0720000000000000  0.0640000000000000  0.0610000000000000  0.0500000000000000  0.0590000000000000  0.0520000000000000  0.0510000000000000  0.0910000000000000  0.0590000000000000  0.0370000000000000  0.0320000000000000  0.0740000000000000  0.0560000000000000  0.0310000000000000  0.0390000000000000  0.112000000000000   0.0580000000000000  0.0420000000000000  0.0280000000000000  0.0340000000000000  0.0360000000000000  0.0240000000000000  0.0380000000000000  0.0640000000000000  0.0320000000000000  0.0650000000000000  0.0300000000000000  0.0270000000000000  0.0530000000000000  0.0290000000000000  0.0380000000000000  0.0360000000000000  0.0510000000000000  0.0380000000000000  0.0340000000000000  0.0410000000000000  0.0630000000000000  0.0740000000000000  0.0760000000000000  0.0450000000000000  0.0630000000000000  0.0270000000000000  0.0660000000000000  0.0380000000000000  0.0540000000000000  0.0880000000000000  0.0450000000000000  0.0440000000000000  0.0460000000000000  0.0520000000000000  0.0380000000000000  0.0360000000000000  0.0500000000000000  0.0330000000000000  0.0610000000000000  0.0480000000000000  0.0480000000000000  0.0470000000000000  0.113000000000000   0.0470000000000000  0.0630000000000000  0.0800000000000000  0.0410000000000000  0.0630000000000000  0.0540000000000000  0.0450000000000000  0.0960000000000000  0.0500000000000000  0.0430000000000000  0.0340000000000000  0.0430000000000000  0.0440000000000000  0.0690000000000000  0.0580000000000000  0.0520000000000000  0.0640000000000000  0.0820000000000000  0.0390000000000000  0.0350000000000000  0.0700000000000000  0.0430000000000000  0.0340000000000000  0.0540000000000000  0.0580000000000000  0.0540000000000000  0.0430000000000000  0.0530000000000000  0.0590000000000000  0.0520000000000000  0.0730000000000000  0.0440000000000000  0.0970000000000000  0.0520000000000000  0.0510000000000000  0.0750000000000000  0.0320000000000000  0.0480000000000000  0.0410000000000000  0.0390000000000000  0.0380000000000000  0.0430000000000000  0.0440000000000000  0.0360000000000000  0.0400000000000000  0.0480000000000000  0.0430000000000000  0.0610000000000000  0.0610000000000000  0.0370000000000000  0.0520000000000000  0.0820000000000000  0.0480000000000000  0.0330000000000000  0.0460000000000000  0.0530000000000000  0.0690000000000000  0.0370000000000000  0.0330000000000000  0.0840000000000000  0.0860000000000000  0.0470000000000000  0.102000000000000   0.0350000000000000  0.0370000000000000  0.0630000000000000  0.0760000000000000  0.0830000000000000  0.0360000000000000  0.0590000000000000  0.0430000000000000  0.0790000000000000  0.0330000000000000  0.0520000000000000  0.0530000000000000];

Censored    =  ones(1,size(x,2));% 
custpdf     =  @eval_custpdf;
custcdf     =  @eval_custcdf;
options     =  statset('Display','iter','MaxFunEvals',1000,'MaxIter',1000,...
                'FunValCheck','off','TolX',1.0e-10,'TolFun',1.0e-10);
phat        =  mle(x,'pdf', custpdf,'cdf', custcdf,...
               'start',[0.6,0.02,1.01,2,4,-10],...
               'lowerbound',[0 0 0 0 0 -inf],...
               'upperbound',[inf inf inf inf inf inf],...
               'Censoring',Censored,...
               'Options',options);;

% Checking how close the estimated PDF and CDF match with those from the data x
figure();
h        =  histogram(x,'Normalization','probability');hold on
x_times  =  h.BinEdges(1:end-1) + h.BinWidth/2 ;
y_vals   =  custpdf(x_times,  phat(1), phat(2), phat(3), phat(4), phat(5), phat(6))./...
           sum(custpdf(x_times,  phat(1), phat(2), phat(3), phat(4), phat(5), phat(6)),'omitnan');
plot(x_times,y_vals,'linewidth',2)
legend('Data','Estimated PDF')

功能有:

function out = eval_custpdf(x,myalpha,mytheta,mybeta,a,b,c)
  first_integral      =  integral(@(x) eval_K(x,a,b,c),0,1).^-1;
  theta_t_ratio       =  (mytheta./x);
  incomplete_gamma    =  igamma(myalpha,theta_t_ratio.^mybeta);
  n_gamma             =  gamma(myalpha);
  exponent_term       =  exp(-theta_t_ratio.^mybeta-(c.*(incomplete_gamma./n_gamma)));


  numerator   =  first_integral.* mybeta.*incomplete_gamma.^(a-1).*...
               theta_t_ratio.^(myalpha*mybeta+1).*exponent_term;
  denominator =  mytheta.* n_gamma.^(a+b-1).* (n_gamma-incomplete_gamma.^mybeta).^(1-b);

  out         =  numerator./denominator;
end

function out = eval_custcdf(x,myalpha,mytheta,mybeta,a,b,c)
 out = zeros(size(x));
   for i = 1: length(x)
     first_integral      =  integral(@(x) eval_K(x,a,b,c),0,1).^-1;
     theta_t_ratio       =  mytheta./x(i);
     incomplete_gamma    =  igamma(myalpha,theta_t_ratio.^mybeta);
     n_gamma             =  gamma(myalpha);
     second_integral     =  integral(@(x) eval_K(x,a,b,c),0,...
                            incomplete_gamma.^mybeta./n_gamma);
    %  second_integral     =  integral(@(x) eval_K(x,a,b,c),0,2);
     out(i)     =  first_integral*second_integral;
   end
end 

function out = eval_K(x,a,b,c)

  out =  x.^(a-1).*(1-x).^(b-1).*exp(-c.*x);

end

但是,我没有成功获得所需的 PDF。如图所示,估计的 PDF(橙色线)不跟踪“x”(蓝色条)的直方图。

[更新]归一化直方图

请注意,我已经改变了参数的初始值。但这非常耗时。我还增加了迭代次数并最小化了容差,但还没有运气。除了mle之外,还有更好的方法来估计参数吗?

任何帮助将不胜感激。

提前致谢。

【问题讨论】:

你得到了什么输出,它与你想要的有什么不同? MLE 需要样本数据。看起来你给它一个PDF?如果您想适应 PDF 而不是样本,那么 MLE 是错误的工具。您正在寻找的是曲线拟合而不是分布拟合。 @John 你是对的。我提供的是 PDF 而不是样本。我会改变它,看看是否提供样品。非常感谢您指出这一点。 @John 我用示例数据更新了“x”。我运行了代码,但仍然无法得到想要的结果。 你现在得到了什么结果?您是否通过比较 PDF 和直方图来评估成功?如果是这样,它们是否以相同的方式归一化? @John 该图显示了我现在得到的结果。是的,我将 PDF 与直方图进行比较以评估成功。我相信它们以同样的方式被规范化。 【参考方案1】:

从帮助中注意到这一点

如果“审查”名称/值对不是 现在,您可以省略 'cdf' 名称/值对。

为我们提供了第一个调试建议。所以从输入列表中删除审查部分和 CDF 并运行

phat =  mle(x,'pdf', @eval_custpdf,'start',[0.6,0.02,1.01,2,4,-10]);
phat =  mle(x,'pdf', @eval_custpdf,'start',phat); %Restart for better result

生成图形

告诉我们问题可能出在 CDF 函数中。与问题中给出的链接相比,我们看到这一行

second_integral     =  integral(@(x) eval_K(x,a,b,c),0,incomplete_gamma.^mybeta./n_gamma);

应该是

second_integral =  integral(@(x) eval_K(x,a,b,c),0,incomplete_gamma./n_gamma);

【讨论】:

这太棒了,尼基,我喜欢你分解解释的方式。现在可以了。非常感谢你。我还发现在PDF函数中denominator = mytheta.* n_gamma.^(a+b-1).* (n_gamma-incomplete_gamma.^mybeta).^(1-b);应该是denominator = mytheta.* n_gamma.^(a+b-1).* (n_gamma-incomplete_gamma).^(1-b);

以上是关于使用 mle() 估计自定义分布的参数的主要内容,如果未能解决你的问题,请参考以下文章

最大似然估计 (MLE) 最大后验概率(MAP)

频率学派 极大似然估计MLE,贝叶斯学派 最大后验估计MAP 2021-05-11

似然估计与后验概率

MLE最大似然估计Maximum Likelihood Estimation

最大似然估计和最大后验概率估计(MLE&MAP)

用 MLE 和 Newton-Raphson 估计 Weibull