R中的伽玛分布下限
gamma distribution lower limit in R
我想将伽马分布拟合到由 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
所以我尝试更改起始值,使用通过具有两个参数的伽玛拟合获得的值,结果如下:
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 的 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
但是我不知道这样做是否正确...参数非常不同,我需要它们来计算与我的数据相关的 return 周期!这就是为什么我想到了带有位置参数的伽玛。
p.s。我没有附上数据,因为它们太多了,但我可以报告它们的摘要:
summary(mydata)
Min. 1st Qu. Median Mean 3rd Qu. Max.
3.003 3.282 3.753 4.001 4.444 8.087
建立一个可重现的例子;
library(FAdist); library(fitdistrplus)
set.seed(101)
x <- rgamma3(1000,shape=1,scale=1,thres=1)
对于大于数据集中最小值的阈值参数值,可能性是无限的(因为这些值应该是 impossible/have 截断分布下的零值)。我们可以通过为此参数设置上限来使事情正常进行:
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))
我想将伽马分布拟合到由 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
所以我尝试更改起始值,使用通过具有两个参数的伽玛拟合获得的值,结果如下:
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 的 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
但是我不知道这样做是否正确...参数非常不同,我需要它们来计算与我的数据相关的 return 周期!这就是为什么我想到了带有位置参数的伽玛。
p.s。我没有附上数据,因为它们太多了,但我可以报告它们的摘要:
summary(mydata)
Min. 1st Qu. Median Mean 3rd Qu. Max.
3.003 3.282 3.753 4.001 4.444 8.087
建立一个可重现的例子;
library(FAdist); library(fitdistrplus)
set.seed(101)
x <- rgamma3(1000,shape=1,scale=1,thres=1)
对于大于数据集中最小值的阈值参数值,可能性是无限的(因为这些值应该是 impossible/have 截断分布下的零值)。我们可以通过为此参数设置上限来使事情正常进行:
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))