基于 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
为什么?
答案 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)))