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