问题描述
我正在为某些数据拟合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)
fitdist
似乎做出了某种合理的选择,尽管实际上可能没有有限的MLE。您如何发现MLE值这么小?您确定使用的参数与dpareto
使用的参数相同吗?