![](/img/trans.png)
[英]How to fit a t-distribution with scale and location parameters in fitdistrplus
[英]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 分布时,您不仅要估计自由度,还要估计均值和缩放参数。
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
好多了:-) 参数非常接近我们最初生成数据的方式! QQ 图显示出更好的拟合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.