'fitdistrplus'软件包问题,t-distribution

时间:2015-05-27 23:24:13

标签: r distribution

我正在尝试将t-distribution分配给我的数据,但我无法这样做。我的第一次尝试是

fitdistr(myData, "t")

有41个警告,都说NaN是产生的。我不知道如何,对数似乎参与其中。所以我稍微调整了我的数据,以便所有数据都是> 0,但我仍然遇到同样的问题(虽然...减少了9次警告)。与sstdFit()相同的问题是,产生NaN。

所以我尝试使用fitdist,我在stackoverflow和CrossValidated上看过:

fitdist(myData, "t")
然后我得到

Error in mledist(data, distname, start, fix.arg, ...) :
'start' must be defined as a named list for this distribution

这是什么意思?我试着查看文档,但没有告诉我什么。我只是想要适合t分布,这太令人沮丧了:P

谢谢!

2 个答案:

答案 0 :(得分:4)

开始是您的分发参数的初始猜测。涉及到日志,因为它使用最大可能性,因此使用了对数似然性。

library(fitdistrplus)
dat <- rt(100, df=10)
fit <- fitdist(dat, "t", start=list(df=2))

答案 1 :(得分:2)

我认为值得补充的是,在大多数情况下,使用fitdistrplus软件包将t分布拟合到实际数据会导致非常不合适,这实际上是非常误导的。这是因为使用了R中的默认t分布函数,它们不支持移位或缩放。也就是说,如果您的数据的平均值不是0,或者以某种方式缩放,那么fitdist函数只会导致不合适。

在现实生活中,如果数据符合t分布,则通常移位(即具有0以外的平均值)和/或缩放。让我们生成一些类似的数据:

data = 1.5*rt(10000,df=5) + 0.5

鉴于这些数据是从具有5个自由度的t分布中采样的,您认为尝试将t分布拟合到此应该可以很好地工作。但实际上,这是结果。它估计df为2,并且如qq图所示提供了不合适的拟合。

> fit_bad <- fitdist(data,"t",start=list(df=3))
> fit_bad

Fitting of the distribution ' t ' by maximum likelihood 
Parameters:
   estimate Std. Error
df 2.050967 0.04301357

> qqcomp(list(fit_bad)) # generates plot to show fit

Trying to fit a t-distribution to the data we sampled from a t-distribution with df 5 leads to a bad fit!

当你适合t分布时,你不仅要估计自由度,还要估计平均和缩放参数。

metRology包提供了一个名为t.scaled的t分布版本,除了df参数[metRology]之外,还有一个mean和sd参数。现在让我们再次适应它:

> library("metRology")
> fit_good <- fitdist(data,"t.scaled",
                      start=list(df=3,mean=mean(data),sd=sd(data)))
> fit_good
Fitting of the distribution ' t.scaled ' by maximum likelihood 
Parameters:
     estimate Std. Error
df   4.9732159 0.24849246
mean 0.4945922 0.01716461
sd   1.4860637 0.01828821

> qqcomp(list(fit_good)) # generates plot to show fit

Trying to fit a t-distribution to the data we sampled from a t-distribution with df 5 leads to a good fit now that we can take the mean and scaling into account

好多了:-)这些参数与我们首先生成数据的方式非常接近!而QQ的情节显示出更合适的效果。