0

我正在对一些数据进行帕累托分布拟合,并且已经估计了数据的最大似然估计。现在我需要从中创建一个 fitdist(fitdistrplus 库)对象,但我不知道该怎么做。我需要一个 fitdist 对象,因为我想使用 denscomp 等函数创建 qq、密度等图。有人可以帮忙吗?

我首先计算 MLE 的原因是因为 fitdist 没有正确执行此操作 - 即使我将正确的 MLE 作为起始值(见下文),估计值总是会膨胀到无穷大。如果早期手动给 fitdist 我的参数的选项是不可能的,fitdist 中是否有一种优化方法可以正确估计帕累托参数?

我无权发布原始数据,但这是使用 MLE 估计原始数据的伽马分布/帕累托分布的模拟。

library(fitdistrplus)
library(actuar)

sim <- rgamma(1000, shape = 4.69, rate = 0.482)
fit.pareto <- fit.dist(sim, distr = "pareto", method = "mle", 
                       start = list(scale = 0.862, shape = 0.00665))
#Estimates blow up to infinity
fit.pareto$estimate
4

1 回答 1

1

如果您查看?fitdist帮助主题,它会描述fitdist对象的外观:它们是包含许多组件的列表。如果您可以计算所有这些组件的替代品,您应该能够fitdist使用类似的代码创建一个假对象

fake <- structure(list(estimate = ..., method = ..., ...),
                  class = "fitdist")

对于问题的第二部分,您需要发布一些代码和数据以供人们改进。

编辑添加:

set.seed(123)在您模拟随机数据之前添加了。然后我得到fitdistMLE

   scale    shape 
87220272  9244012

如果我在附近绘制对数似然函数,我会得到:

loglik <- Vectorize(function(shape, scale) sum(dpareto(sim, shape, scale, log = TRUE)))
shape <- seq(1000000, 10000000, len=30)
scale <- seq(10000000, 100000000, len=30)
surface <- outer(shape, scale, loglik)
contour(shape, scale, surface)
points(9244012, 87220272, pch=16)

截屏

这看起来好像fitdist做出了一个合理的选择,尽管实际上可能没有有限的 MLE。您如何发现 MLE 的值如此之小?您确定使用与使用相同的参数dpareto吗?

于 2020-10-20T12:18:27.083 回答