我已使用stableFit
包中的fBasics
函数为稳定分布提供参数(alpha,beta,gamma和delta),如下所示:
stableFit(x)
然后我做了以下操作来提出对数似然值,出于某种原因,它似乎不起作用:
stable.fit <- function(alpha=1.387,beta=0.279,
gamma=0.006948893,delta=-0.0017933) {
-sum(dstable(x,1.387,0.279,0.006948893,-0.0017933,pm=0,log=TRUE))
}
mle.results<-mle2(stable.fit,
start=list(alpha=1.387,beta=0.279,
gamma=0.006948893,delta=-0.0017933),
data=list(x)) #max likelihood using bbmle package
mle.results #produces the log-likelihood values
似乎当我运行mle.results<- mle2(..
行时,R会持续运行,直到我按下&#34; STOP&#34;按钮。因此,我无法要求&#34; mle.results&#34;。为什么会这样?这个过程似乎适用于Normal,logistic,Cauchy,Student t,skew Student t,Gumbell和广义极值分布。
请让我知道我错过了什么。谢谢!
答案 0 :(得分:2)
我创建了一个基于Lambert和Lindsey的旧包 stable 的新包,但它并没有真正起作用。但是它使用特征函数的FFT并且在C中具有核心代码。我打磨它并在它周围写了一些包装器。所以密度和概率是基于那个,然后在我的包中,随机抽取和分位数来自 stabledist 包,因为它们的工作速度足够快。
因此它提供了更快的 fBasics :: stableFit 替代品,与它们相比精度损失最小,速度提高了约140倍。它可用here。我很快就会完成它。
与此同时:数据集:
require(tawny)
data("sp500.subset")
rnorm<-rnorm(200)
rt<-rt(200,4)
cauch<-rcauchy(200)
testingData<-matrix(cbind(rnorm,rt,cauch,as.matrix(sp500.subset,nrow=200)),nrow=200)
这些是我的系数与 fBasics 的系数的差异。您可以看到,只有beta估计与 fBasics :: stableFit 之间存在很大差异(beta介于 - 1和1)但它确实没有很大的影响。我也会尝试挖掘一些文献。
这是具有16个最大β差异的系列的密度。蓝色是我的密度使用和红色是 stabledist :: dstable 密度,fBasics用于MLE优化。圆圈基于fBasics优化的系数,而十字架是我的。
我也在depository中包含了测试脚本。 最后但并非最不重要的是速度比较:
答案 1 :(得分:1)
看起来我能够回答我自己的问题。问题是R花费了很长时间来完成mle2
计算以及dstable
函数的集成。对于其他发行版,对数似然结果花费不到10秒,但由于某种原因,它花了超过45分钟!为了稳定的分配。我决定让它在我做其他事情的时候让它运行并且在45-50分钟之后,我才知道这一点,它结束了。但是,我无法弄清楚为什么稳定分布需要特别长的时间来进行这种计算。无论如何,问题解决了。