用R拟合稳定分布参数的误差

用R拟合稳定分布参数的误差,r,R,基于 基于同样的论点,我正试图根据以下脚本,用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"

基于 基于同样的论点,我正试图根据以下脚本,用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)))
xx第三个参数(
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)))
f第三个参数(
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)))

f我已经按照你的建议修复了x[neg]中的错误,但是我得到了:1 03.325732 0.001 1 03.325732-0.001 96.79954 0-811.9322 0没有你的数据,这个问题是不可再现的。我发现了两种类型的错误:如果c太大,那么gamma=inf给了我一个错误。如果c太小,那么gamma=0会给我一个错误。有什么提示吗?同样地,您可以使用
abs(c)
。如果有效,您可能还希望将初始值从
log(mad(x))
更改为
mad(x)
。我已按照您的建议进行了修复,但我得到:1 0 3.325732 0.001 1 0 3.325732-0.001 96.79954 0-811.9322 0 x[neg]中的错误,没有您的数据,这个问题是不可再现的。我发现了两种类型的错误:如果c太大,那么gamma=inf给了我一个错误。如果c太小,那么gamma=0会给我一个错误。有什么提示吗?同样地,您可以使用
abs(c)
。如果有效,您可能还需要将初始值从
log(mad(x))
更改为
mad(x)