繁体   English   中英

“fitdistrplus”包有问题,t-distribution

[英]Trouble with 'fitdistrplus' package, t-distribution

我正在尝试将 t 分布拟合到我的数据中,但无法这样做。 我的第一次尝试是

fitdistr(myData, "t")

有 41 个警告,都说产生了 NaN。 我不知道如何,似乎涉及对数。 所以我稍微调整了我的数据,使所有数据都> 0,但我仍然有同样的问题(尽管警告减少了 9 个......)。 sstdFit() 也有同样的问题,会产生 NaN。

因此,我尝试使用我在 stackoverflow 和 CrossValidated 上看到的 fitdist:

fitdist(myData, "t")

然后我得到

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

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

谢谢!

Start 是对分布参数的初始猜测。 涉及对数,因为它使用最大似然,因此使用对数似然。

library(fitdistrplus)
dat <- rt(100, df=10)
fit <- fitdist(dat, "t", start=list(df=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

尝试将 t 分布拟合到我们从 df 5 的 t 分布中采样的数据会导致拟合不佳!

当您拟合 t 分布时,您不仅要估计自由度,还要估计均值和缩放参数。

metRology 包提供了一个名为 t.scaled 的 t 分布版本,除了 df 参数 [ metRology ] 之外,它还有一个均值和 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

尝试将 t 分布拟合到我们从 df 5 的 t 分布中采样的数据会导致很好的拟合,因为我们可以考虑均值和缩放

好多了:-) 参数非常接近我们最初生成数据的方式! QQ 图显示出更好的拟合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM