2

我正在尝试将带有 fitdist() 函数(包含在 fitdistrplus 包中)的数字向量拟合到几个分布:weibull 2-P、weibull 3-P、gamma、lognormal、exponential、gumbel、normal、loglogistic、logistic 和广义的 lambda。

其中一些包含在与“fitdist()”相同的包中,另一些包含在不同的包中,我创建了 gumbel 发行版。我对其中任何一个都没有问题,只有 GLD。我已经尝试了 fitdist 函数(mle、mme...)的所有方法,以及包“gld”和“GLDEX”来创建分布函数。

fitdist(example$`TTF MIN`, "gl", start=list(12139.06, 0.000434674, 0.2, -1.5), method="mle", control=list(trace=1, REPORT=1))

Error in fitdist(example$`TTF MIN`, "gl", start = list(12139.06, 0.000434674,  : 
  the function mle failed to estimate the parameters, 
                with the error code 100

和...

memp  <-  function(x, order) mean(x^order)

fgl <- fitdist(example$`TTF MIN`, "gl", method="mme",order=c(1, 2, 3, 4), memp="memp", start=c(10, 10), lower=1, upper=Inf)

Error in mmedist(data, distname, start = start, fix.arg = fix.arg, ...) : 
  wrong dimension for the moment order to match

数据基本统计:

min(example$`TTF MIN`)
[1] 1338.149

max(example$`TTF MIN`)
[1] 27485.42

median(example$`TTF MIN`)
[1] 12555.87

mean(example$`TTF MIN`)
[1] 13983.5

sd(example$`TTF MIN`)
[1] 4220.227

skewness(example$`TTF MIN`)
[1] 0.7572039

kurtosis(example$`TTF MIN`)
[1] -0.1358661

quantile(example$`TTF MIN`, probs = c(0.25, 0.5, 0.75, 1))
     25%      50%      75%     100% 
11006.06 12555.87 17037.58 27485.42 
4

1 回答 1

0

您发现的问题fitdist和广义 lambda 分布 (GLD) 似乎是由于命令中实现的优化算法造成的。如果我们使用以下命令
估计 GLD 的参数,我们会得到没有错误的最优值:fit.fkmlgld

library(fitdistrplus)
library(gld)
set.seed(3)
x <- rnorm(100, mean=2, sd=3)

fitGLD <- fit.fkml(x, method = "ML")
print(fitGLD)
########
Maximum Likelihood estimate, gld type: fkml 
lambda1  lambda2  lambda3  lambda4  
 2.2351   0.4406   0.2643   0.4115

下面我们尝试使用fitdist与由 给出的最优值相距不远的参数的初始值来估计 GLD 参数fit.fkml

fitdist(x, "gl", start=list(2.2,0.4,0.3,0.5), method="mle", 
        control=list(trace=1, REPORT=1))
######
  Nelder-Mead direct search function minimizer
<simpleError in optim(par = vstart, fn = fnobj, fix.arg = fix.arg, obs = data,     gr = gradient, ddistnam = ddistname, hessian = TRUE, method = meth,     lower = lower, upper = upper, ...): la funzione non può essere calcalata per i parametri iniziali>
Error in fitdist(x, "gl", start = list(2.0, 0.4, 0.3, 0.5), method = "mle",  : 
  the function mle failed to estimate the parameters, 
                with the error code 100

该算法无法找到解决方案,但如果我们使用更接近最优值的初始值重试,则会fitdist产生一个解决方案:

optGLD  <- fitGLD$optim.results$par
(opt <- round(optGLD ,1))
#######
[1] 2.2 0.4 0.3 0.4

fitdist(x, "gl", start=list(opt[1], opt[2], opt[3], opt[4]), method="mle", 
        control=list(trace=0, REPORT=1))
########
Fitting of the distribution ' gl ' by maximum likelihood 
Parameters:
   estimate Std. Error
1 2.2369295 0.31415154
2 0.4407676 0.05857841
3 0.2639203 0.07714630
4 0.4115397 0.09449990
于 2017-05-07T15:27:12.537 回答