在已知参数帕累托分布的情况下如何使用fitdist

问题描述

我正在为某些数据拟合Pareto分布,并且已经对数据进行了最大似然估计。现在,我需要从中创建一个fitdist(fitdistrplus库)对象,但是我不确定如何执行此操作。我需要一个fitdist对象,因为我想使用诸如denscomp之类的功能来创建qq,密度等图。有人可以帮忙吗?

我首先计算MLE的原因是因为fitdist无法正确执行此操作-即使我给出正确的MLE作为起始值,估计值始终会达到无穷大(见下文)。如果以前无法手动为我的参数赋予fitdist的选项是不可能的,那么fitdist中是否存在一种优化方法,可以正确估计pareto参数?

我无权发布原始数据,但这是使用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

解决方法

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

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

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

编辑后添加:

我在模拟随机数据之前添加了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,loglik)
contour(shape,surface)
points(9244012,87220272,pch=16)

screenshot

fitdist似乎做出了某种合理的选择,尽管实际上可能没有有限的MLE。您如何发现MLE值这么小?您确定使用的参数与dpareto使用的参数相同吗?