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

elc*_*ano 4 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)
Run Code Online (Sandbox Code Playgroud)

接下来,如果我运行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
Run Code Online (Sandbox Code Playgroud)

好的,所以我不是英语母语人士,但是据我了解,此方法要求数据的范围为[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
Run Code Online (Sandbox Code Playgroud)

因此,在那之后,我一直在进行一些搜索引擎查询,但没有发现任何有用的信息。有人对这里出了什么问题有个想法吗?谢谢

Con*_*ncy 7

通过阅读源代码,可以发现的默认估算方法fitdistmle,它将mledist从同一个包中调用,这将为您选择和使用的分布构造负对数似然性,optim或者constrOptim对它进行数值最小化。如果数值优化过程有任何问题,您将得到错误消息。

似乎出现错误是因为当x_scaled包含0或1时,在计算beta分布的负对数似然时会遇到一些问题,因此数值优化方法将被破坏。一个肮脏的把戏是让x_scaled <- (x - min(x) + 0.001) / (max(x) - min(x) + 0.002),所以in中没有0或1 x_scaled,并且fitdist可以工作。