参数已知时如何使用 fitdist(帕累托分布)

How to use fitdist when the paramters are already known (Pareto distribution)

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

我首先计算 MLE 的原因是因为 fitdist 没有正确地做到这一点 - 即使我给出正确的 MLE 作为起始值(见下文),估计值总是膨胀到无穷大。如果手动给 fitdist 我的参数的早期选项不可行,fitdist 中是否有优化方法可以正确估计 pareto 参数?

我无权使用 post 原始数据,但这是使用 MLE 估计原始数据的伽玛 distribution/pareto 分布的模拟。

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

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

的代码创建一个伪造的 fitdist 对象
fake <- structure(list(estimate = ..., method = ..., ...),
                  class = "fitdist")

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

编辑添加:

我在你模拟随机数据之前添加了set.seed(123)。然后我从 fitdist 得到 MLE 为

   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 使用的参数相同吗?