在R中将逆高斯分布拟合到数据

4

我正在试图使用R中的fitdist函数通过最大似然将数据拟合三个不同的分布以进行比较。对数正态分布和威布尔分布都可以,但是逆高斯分布我遇到了困难。

我需要指定起始值,但是当我这样做时,会收到一个错误消息。

fw<-fitdist(claims,"weibull") WORKS
fln<-fitdist(claims,"lnorm") WORKS
fig<-fitdist(claims,"invgauss",start=list(mu=0,lambda=1)) DOES NOT WORK

错误:'当输入长度为零时,pinvgauss函数应返回零长度向量而不是引发错误'

我的代码有什么问题?


1
你尝试过其他的起始值吗?我不认为mu=0有意义。 - Dason
invgauss 中的两个参数都必须大于零。维基链接:https://en.wikipedia.org/wiki/Inverse_Gaussian_distribution - JacobJacox
我明白了。但是,即使我输入比0更高的值,我仍然会收到相同的错误提示。 - sam
2个回答

3

我曾经遇到类似的问题,发现问题出在如何标记我的起始值上。我使用的Actuar库要求将这些值标记为"mean"和"shape"。以下代码为我提供了解决方案:

library(actuar)
library(fitdistrplus)
fig <- fitdist(claims, "invgauss", start = list(mean = 5, shape = 1))

你是怎么确定起始参数的? - undefined

0
fitdistrplus依赖于预加载的统计函数。例如,我想要拟合一个反正态分布,并从其多个实现中选择SuppDists。然后我首先加载library(SuppDists),然后拟合fitdistrplus::fitdist。完整的代码片段如下:

install.packages("fitdistrplus")
install.packages("SuppDists")

library(fitdistrplus)
library(SuppDists)

# shelf-live data
X = c(24, 24, 26, 26, 32, 32, 33, 33, 33, 35, 41, 42, 43, 47, 48, 48, 48, 50, 52, 54, 55, 57, 57, 57, 57, 61)

fit <- fitdist(X, "invGauss", start = list( nu = 30, lambda = 10.5))
fit
# Parameters:
#         estimate Std. Error
# nu      42.88774    2.50325
# lambda 484.29802  134.32093

反高斯分布及其统计应用-综述中复制了保质期数据示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接