拟合beta分布时出错:函数mle无法使用错误代码100估计参数

时间:2017-06-12 19:46:30

标签: r distribution fitdistrplus

我尝试使用fitdist ()包中的fitdistrplus函数来使我的数据适合不同的发行版。让我们说我的数据如下:

x = c (1.300000, 1.220000, 1.160000, 1.300000, 1.380000, 1.240000,
1.150000, 1.180000, 1.350000, 1.290000, 1.150000, 1.240000,
1.150000, 1.120000, 1.260000, 1.120000, 1.460000, 1.310000,
1.270000, 1.260000, 1.270000, 1.180000, 1.290000, 1.120000,
1.310000, 1.120000, 1.220000, 1.160000, 1.460000, 1.410000,
1.250000, 1.200000, 1.180000, 1.830000, 1.670000, 1.130000,
1.150000, 1.170000, 1.190000, 1.380000, 1.160000, 1.120000,
1.280000, 1.180000, 1.170000, 1.410000, 1.550000, 1.170000,
1.298701, 1.123595, 1.098901, 1.123595, 1.110000, 1.420000,
1.360000, 1.290000, 1.230000, 1.270000, 1.190000, 1.180000,
1.298701, 1.136364, 1.098901, 1.123595, 1.316900, 1.281800,
1.239400, 1.216989, 1.785077, 1.250800, 1.370000)

接下来,如果我运行fitdist (x, "gamma")一切都很好,但如果我使用fitdist (x, "beta"),我会收到以下错误:

Error in start.arg.default(data10, distr = distname) : 
  values must be in [0-1] to fit a beta distribution

好的,所以我不是英语,但据我所知,这种方法要求数据在[0,1]范围内,所以我使用x_scaled = (x-min(x))/max(x)来缩放它。这给了我一个矢量,其值在该范围内,与原始矢量x完全相关。

由于x_scaled属于class matrix,我使用as.numeric()转换为数字向量。然后使用fitdist(x_scale,"beta")拟合模型。

这次我收到以下错误:

Error in fitdist(x_scale, "beta") : 
  the function mle failed to estimate the parameters, with the error code 100

所以在那之后我一直在做一些搜索引擎查询,但我找不到任何有用的东西。有没有人知道这里出错了什么?谢谢

1 个答案:

答案 0 :(得分:6)

通过阅读源代码,可以发现fitdist的默认估算方法是mle,它将从同一个包中调用mledist,这将构造一个负数您选择的分发的对数可能性,并使用optimconstrOptim以数字方式最小化它。如果数值优化过程有任何问题,您将收到错误消息。

似乎发生错误是因为当x_scaled包含0或1时,在计算β分布的负对数似然性时会出现一些问题,因此数值优化方法将会破坏。一个肮脏的伎俩是x_scaled <- (x - min(x) + 0.001) / (max(x) - min(x) + 0.002),所以x_scaled中没有0和1,fitdist也可以。