【问题标题】:gamma distribution lower limit in RR中的伽马分布下限
【发布时间】:2016-12-26 17:23:00
【问题描述】:

我想将伽玛分布拟合到由 338 个元素组成的数据集,具有固定的低阈值(我正在使用 R)。 为了表示我认为使用具有三个参数的伽玛的下限,添加位置。这是我的代码:

library(FAdist)
library(fitdistrplus)
fit <- fitdist(mydata,"gamma3",start=list(1,1,mythreshold))

每次我运行代码时,都会遇到同样的错误:

<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, ...): non-finite finite-difference value [3]>
Error in fitdist(Hs, "gamma3", start = list(1, 1, 3)) : 
  the function mle failed to estimate the parameters, 
                with the error code 100

所以我尝试更改起始值,使用通过带有两个参数的 gamma 拟合获得的值,结果如下:

fit <- fitdist(mydata,"gamma")
fit
Fitting of the distribution ' gamma ' by maximum likelihood 
Parameters:
       estimate Std. Error
shape 21.417503  1.6348313
rate   5.352422  0.4133735

但它仍然不起作用..如果即使带有两个参数的 gamma 不起作用,我会理解它,但事实并非如此,我无法给自己一个解释。此外,带有两个参数的 gamma 的 QQ 图和 ecdf 并不是那么好……但如果我在原始数据集上拟合了相对于低阈值缩放的分布,则拟合看起来很完美:

fit <- fitdist(mydata-mythreshold,"gamma")
fit
Fitting of the distribution ' gamma ' by maximum likelihood 
Parameters:
      estimate Std. Error
shape 1.059540 0.07212832
rate  1.058007 0.09117620

但是我不知道这样做是否正确......参数非常不同,我需要它们来计算与我的数据相关的返回期!这就是为什么我想到了带有位置参数的伽玛。

附言我没有附上数据,因为它们太多了,但我可以报告它们的摘要:

 summary(mydata)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  3.003   3.282   3.753   4.001   4.444   8.087 

【问题讨论】:

    标签: r threshold gamma-distribution fitdistrplus


    【解决方案1】:

    建立一个可重现的例子;

    library(FAdist); library(fitdistrplus)
    set.seed(101)
    x <- rgamma3(1000,shape=1,scale=1,thres=1)
    

    对于大于数据集中最小值的阈值参数值,可能性是无限的(因为这些值被认为是不可能的/在截断分布下具有零值)。我们可以通过为这个参数设置一个上限来使事情生效:

    fitdist(x,dgamma3,start=list(shape=1,scale=1,thres=0.5),
            upper=c(Inf,Inf,min(x)))
    ## Fitting of the distribution ' gamma3 ' by maximum likelihood 
    ## Parameters:
    ##        estimate Std. Error
    ## shape 0.9321949         NA
    ## scale 1.0586079         NA
    ## thres 1.0000012         NA
    

    注(1)在最大似然下,这种阈值参数总是以它可以取的最大值(即数据集中的最小值)结束; (2) 标准误为NA,因为当参数达到边界时,无法计算 Wald 标准误。

    或者,您可以通过定义包装函数来修复阈值参数:

    dgconstr <- function(x,shape,scale,...) {
        dgamma3(x,shape,scale,thres=0.5,...)
    }
    pgconstr <- function(...) {
        pgamma3(...,thres=0.5)
    }
    
    fitdist(x,dgconstr,start=list(shape=1,scale=1))
    

    【讨论】:

    • 非常感谢本!我明白了,它确实有效。
    最近更新 更多