根据数据估算分布


12

我有一个R由生成的数据样本rnorm(50,0,1),因此该数据显然呈正态分布。但是,R不“知道”有关数据的分布信息。

有没有一种方法R可以估算我的样本来自哪种分布?如果没有,我将使用该shapiro.test功能并继续进行操作。


我不确定我是否知道这个问题的结果。的确,如果您在R中只有一个数字向量,则没有很多与之相关的元数据,但是为什么会打扰您呢?您为什么需要那个/您想怎么做?假设它确实具有这样的功能,那么只有在将向量传递给具有针对高斯数据或其他方法的特定方法的函数的情况下,这种方法才有用。我一无所知(尽管我并不是世界上最专业的R用户)。
gung-恢复莫妮卡

如果您只想测试给定的样本是否正常,Shapiro-Wilk检验是一个不错的选择(尽管您有时间阅读此问题和给出的答案)。我可以看到如何在模拟研究中得出结论,但是如果没有有关研究的更多细节,很难给出有用的答案。
gung-恢复莫妮卡

为什么需要确定数据的分布?自动分配选择通常是一个有吸引力的主意,但这并不是一个好主意。
Glen_b-恢复莫妮卡

Answers:


21

MASS软件包中有此fitdistr功能,或者fitdistrplus软件包中有一些功能。这是后者的一些例子。

require(fitdistrplus)

set.seed(1)
dat <- rnorm(50,0,1)
f1 <- fitdist(dat,"norm")
f2 <- fitdist(dat,"logis")
f3 <- fitdist(dat,"cauchy")

例如

> f1
Fitting of the distribution ' norm ' by maximum likelihood 
Parameters:
      estimate Std. Error
mean 0.1004483 0.11639515
sd   0.8230380 0.08230325

你可以看到的情节

plotdist(dat,"norm",para=list(mean=f1$estimate[1],sd=f1$estimate[2]))
plotdist(dat,"logis",para=list(location=f2$estimate[1],scale=f2$estimate[2]))
plotdist(dat,"cauchy",para=list(location=f3$estimate[1],scale=f3$estimate[2]))

所以看起来像是正态分布

在此处输入图片说明

但也可能是逻辑分布(您将需要更大的样本来区分尾巴)

在此处输入图片说明

尽管使用qqplot并查看CDF,您可以知道这可能不是柯西分布

在此处输入图片说明


1
谢谢亨利的精彩介绍。我被问到是否有任何软件包可以接收数据并吐出哪种分布(和参数)吐出的最好。您是否知道任何软件包中的任何此类功能?
RomanLuštrik2012年

3
fitdist提供参数估计。有一些暗示可能表明诸如函数之类的分布,descdist(dat, boot = 1000)但它们也将从更大的样本中受益。
亨利

当样本不具有代表性时,这些功能都无法解决您在上一个问题中提出的问题
约翰

1
@斯科特·凯泽:我不这么认为。 fitdist()是fitdistrplus软件包中的一个函数,这就是我所使用的。同时,它fitdistr()是MASS软件包中的一个函数,在这里不能以这种形式工作。
亨利

1
我没有足够的要点将其添加为注释,但是正如对上面线程中提供的信息的补充说明一样,也可以简单地调用plot(f1)而不是更加费解plotdist(dat,"norm",para=list(mean=f1$estimate[1],sd=f1$estimate[2]))
swestenb
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.