给定数据集自动确定概率分布


12

给定一个数据集:

x <- c(4.9958942,5.9730174,9.8642732,11.5609671,10.1178216,6.6279774,9.2441754,9.9419299,13.4710469,6.0601435,8.2095239,7.9456672,12.7039825,7.4197810,9.5928275,8.2267352,2.8314614,11.5653497,6.0828073,11.3926117,10.5403929,14.9751607,11.7647580,8.2867261,10.0291522,7.7132033,6.3337642,14.6066222,11.3436587,11.2717791,10.8818323,8.0320657,6.7354041,9.1871676,13.4381778,7.4353197,8.9210043,10.2010750,11.9442048,11.0081195,4.3369520,13.2562675,15.9945674,8.7528248,14.4948086,14.3577443,6.7438382,9.1434984,15.4599419,13.1424011,7.0481925,7.4823108,10.5743730,6.4166006,11.8225244,8.9388744,10.3698150,10.3965596,13.5226492,16.0069239,6.1139247,11.0838351,9.1659242,7.9896031,10.7282936,14.2666492,13.6478802,10.6248561,15.3834373,11.5096033,14.5806570,10.7648690,5.3407430,7.7535042,7.1942866,9.8867927,12.7413156,10.8127809,8.1726772,8.3965665)

..我想通过参数估计来确定最合适的概率分布(伽玛,贝塔,正态,指数,泊松,卡方等)。我已经知道以下链接上的问题,其中使用R提供了解决方案:https : //stackoverflow.com/questions/2661402/given-a-set-of-random-numbers-drawn-from-a-连续单变量分布-f 建议的最佳解决方案如下:

> library(MASS)
> fitdistr(x, 't')$loglik                                                              #$
> fitdistr(x, 'normal')$loglik                                                         #$
> fitdistr(x, 'logistic')$loglik                                                       #$
> fitdistr(x, 'weibull')$loglik                                                        #$
> fitdistr(x, 'gamma')$loglik                                                          #$
> fitdistr(x, 'lognormal')$loglik                                                      #$
> fitdistr(x, 'exponential')$loglik                                                    #$

并选择具有最小loglik值的分布。但是,其他干扰(例如beta分布)需要在fitdistr()函数中指定一些附加参数:

   fitdistr(x, 'beta', list(shape1 = some value, shape2= some value)).

鉴于我正在尝试在没有任何先验信息的情况下确定最佳分布,因此我不知道每种分布的参数值可能是多少。是否有另一种解决方案考虑了这一要求?它不必在R中。

Answers:


18

您如何处理不在列表中的分布的无穷大?

如果列表中没有一个适合您,该怎么办?例如,如果您的分布是强烈双峰的

指数只是gamma的特例,您将如何处理这一事实,因此,gamma必须始终更好地拟合任何数据集,因为它具有附加参数,因此必须具有更好的可能性?

您如何处理这样的事实,即仅在乘数常数之前定义似然,并且除非一致地定义,否则不同分布的似然可能不会自动比较。

并不是说这些不一定是不可解决的,而是以一种明智的方式来做这些事情并不容易。当然,除了通过MLE的计算和可能性的比较来捆绑所有内容外,还需要更多的思考。


3
我只关心列表中的分布,如果没有一个适合的分布,那么我接下来将处理该问题。但就目前而言,对我来说已经足够了。至于关于伽玛分布的最后一个问题,是的,它可以更好地适合某些参数,我的问题恰恰与此有关,是否有一种算法可以让我遍历列表中不同分布的不同参数值?并使用适当的参数返回最合适的分布?

1
好吧,是的,不是。您可以拿出一个“品质因数”来计算哪个参数组最适合您,并编写一个“爬坡”循环以优化品质因数的值。FOM的一个示例是回归拟合的R值。
卡尔·威索夫特

我订阅此+1。

4
@shachem您错过了有关伽玛的知识。即使数据来自具有较少参数的分布,带有附加参数的分布将始终具有更好的可能性。您需要考虑这一点。一些合适的量度会针对此效果进行调整。老实说,我认为您要尝试做的事情可能是“回答错误的问题”,有点像问“我如何找出这些锤子中哪一个最适合敲打此螺钉”
Glen_b -Reinstate莫妮卡

1
如果格伦说:“仅将可能性定义为乘数常数”,那么您如何理解“带有附加参数的分布将总是具有更好的可能性”的说法?确实,怎么可能比较不确定的可能性呢?我怀疑一些重要的想法没有被
阐明

3

我找到了一个使用matlab回答我的问题的函数。可以在以下链接上找到:http : //www.mathworks.com/matlabcentral/fileexchange/34943

我将数据向量作为输入

   allfitdist(data)

并返回以下信息以获得最佳拟合分布:

   DistName- the name of the distribution
   NLogL - Negative of the log likelihood
   BIC - Bayesian information criterion (default)
   AIC - Akaike information criterion
   AICc - AIC with a correction for finite sample sizes 
   ParamNames
   ParamDescription
   Params
   etc.

1
好的,现在您需要做的就是将m文件移植到R文件。:-)
卡尔·维索夫特

甚至不!正如我所提到的,它不必是R文件,因此matlab函数可以完全解决我的问题:-)

AIC,BIC,AICc等可能是决定的一种方式,但是,这是否真的取决于您要执行的操作。例如,如果一个分布在对数L上确实与其他分布非常接近,该怎么办?如果您要做的是预测,那么通常不应该考虑忽略在您的条件方面接近的模型。例如,模型平均是考虑它们的一种方法。
比约恩2015年
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.