如何将一组数据拟合到R中的帕累托分布?


22

假设有以下数据:

8232302  684531  116857   89724   82267   75988   63871   
  23718    1696     436     439     248     235

想要一种简单的方法来将此(以及其他几个数据集)拟合为Pareto分布。理想情况下,它将输出匹配的理论值,理想情况下将输出参数。



“匹配理论值”是什么意思?给定参数估计值的订单统计的期望值?或者是其他东西?
Glen_b-恢复莫妮卡2015年

Answers:


33

好吧,如果你有一个样本来自参数m > 0α > 0(其中m是下界参数,α是形状参数)的pareto分布,该样本的对数似然为:X1,...,Xnm>0α>0mα

nlog(α)+nαlog(m)(α+1)i=1nlog(Xi)

这是一个单调递增的,因此最大化器是与观察到的数据一致的最大值。由于参数m定义了帕累托分布的支撑的下限,因此最佳值为mm

m^=miniXi

不依赖于。接下来,使用普通演算技巧,α的MLE 必须满足αα

nα+nlog(m^)i=1nlog(Xi)=0

一些简单的代数告诉我们的MLE 是α

α^=ni=1nlog(Xi/m^)

在许多重要的意义上(例如,达到Cramer-Rao下界的最佳渐近效率),这是将数据拟合为Pareto分布的最佳方法。下面的R代码针对给定的数据集计算MLE X

pareto.MLE <- function(X)
{
   n <- length(X)
   m <- min(X)
   a <- n/sum(log(X)-log(m))
   return( c(m,a) ) 
}

# example. 
library(VGAM)
set.seed(1)
z = rpareto(1000, 1, 5) 
pareto.MLE(z)
[1] 1.000014 5.065213

编辑:基于由@cardinal的评论和我在下面,我们也可以注意到,α是的样本均值的倒数日志X / 的,它碰巧有一个指数分布。因此,如果我们可以使用可以拟合指数分布的软件(很有可能,因为它似乎出现在许多统计问题中),那么可以通过以这种方式转换数据集并对其进行拟合来拟合帕累托分布到转换尺度上的指数分布。 α^log(Xi/m^)


3
(+1)通过指出以比率α呈指数分布,我们可以更具启发性地写东西。从这个和极大似然估计的下我们在一旦结束变换不变性α = 1 / ˉ ÿ,在那里我们取代通过在后者的表达。这也暗示了即使没有明确的选项,我们如何使用标准软件来适应帕累托。Yi=log(Xi/m)αα^=1/Y¯mm^
主教

@cardinal -因此是所述的样本均值的倒数日志X / 的,这发生在具有指数分布。这对我们有什么帮助?α^log(Xi/m^)
2012年

2
嗨,宏 我要说明的一点是,可以将估计帕累托参数的问题(基本上)简化为估计指数速率的问题:通过上面的变换,我们可以将数据和问题转换为一个(也许)更熟悉,然后立即提取答案(假设我们或我们的软件已经知道如何处理指数样本)。
主教

我该如何测量这种拟合误差?
emanuele 2012年

@ emanuele,MLE的近似方差是费舍尔信息矩阵的逆,这将要求您计算至少一个对数似然的导数。或者,您可以使用一种引导重采样来估计标准误差。
2012年

8

您可以使用软件包中fitdist提供的功能fitdistrplus

library(MASS)
library(fitdistrplus)
library(actuar)

# suppose data is in dataPar list
fp <- fitdist(dataPar, "pareto", start=list(shape = 1, scale = 500))
#the mle parameters will be stored in fp$estimate

应该这样library(fitdistrplus)吗?
肖恩

1
@Sean是的,请相应地编辑回复
Kevin L Keys

请注意,调用library(actuar)此功能是必需的。
jsta

在这种情况下,fp $ estimate [“ shape”]代表什么?可能是估计的alpha吗?还是Beta?
艾伯特·亨德里克斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.