我试图使t-分布符合我的数据,但无法做到这一点。我的第一次尝试是
fitdistr(myData, "t")有41个警告,都说NaNs是生产出来的。我不知道怎么会涉及对数。因此,我对数据做了一些调整,使所有数据都大于0,但我仍然存在相同的问题(虽然警告减少了9个.)。sstdFit()也存在同样的问题,会产生NaNs。
因此,我尝试使用我在堆栈溢出和CrossValidated上看到的适配者:
fitdist(myData, "t")然后我得到
Error in mledist(data, distname, start, fix.arg, ...) :
'start' must be defined as a named list for this distribution这是什么意思?我试着查看文件,但没告诉我什么。我只是想符合t-分布,这太令人沮丧了。
谢谢!
发布于 2015-05-27 23:34:00
Start是对发行版参数的初始猜测。其中涉及到日志,因为它使用的是最大似然,因此是日志似然。
library(fitdistrplus)
dat <- rt(100, df=10)
fit <- fitdist(dat, "t", start=list(df=2))发布于 2017-06-25 19:37:23
我认为值得补充的是,在大多数情况下,使用适配包将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的情节则更贴切。
https://stackoverflow.com/questions/30494783
复制相似问题