参数已知时如何使用 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
使用的参数相同吗?
我正在为一些数据拟合帕累托分布,并且已经估计了数据的最大似然估计。现在我需要从中创建一个 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
使用的参数相同吗?