使用R拟合稳定分布的参数时出错

时间:2012-03-26 08:48:29

标签: r

基于 earlier thread 我使用相同的参数尝试使用基于此脚本的R进行稳定分布:

  xx <- read.table('dati.era.anno.dat',head=F)
  x<-xx$V1
  # Density (I reparametrize it to remove the constraints
  # on the parameters) 
  library(fBasics)
  f <- function(u,a,b,c,d) {
  cat(a,b,c,d,"\n")  # Some logging (it is very slow)
  stabledist::dstable(u, 2*exp(a)/(1+exp(a)), 2*exp(b)/(1+exp(b))-1, c,d)
  }
  # Fit the distribution
  library(MASS)
  r <- fitdistr(x, f, list(a=1,b=0,c=mad(x),d=median(x)))

但我总是得到这个错误:

1 0 27.81936 0 
1.001 0 27.81936 0 
0.999 0 27.81936 0 
1 0.001 27.81936 0 
1 -0.001 27.81936 0 
1 0 27.82036 0 
1 0 27.81836 0 
1 0 27.81936 0.001 
1 0 27.81936 -0.001 
96.79954 0 -1.486068 0 
Error: 0 <= gamma is not TRUE

为什么?

1 个答案:

答案 0 :(得分:1)

错误消息中的第三个参数(gamma,代码中的c)是衡量标准的尺度:它应该是正数。 您可以重新调整密度函数的参数以强制执行此约束。

f <- function(u,a,b,c,d) {
  cat(a,b,c,d,"\n")
  dstable(u, 
    2*exp(a)/(1+exp(a)), 2*exp(b)/(1+exp(b))-1, 
    exp(c), d
  )
}
r <- fitdistr(x, f, list(a=1, b=0, c=log(mad(x)), d=median(x)))