【发布时间】:2014-07-01 03:45:12
【问题描述】:
我想在 R 中拟合三参数对数正态分布(参见 here 以供参考)。
我的 MWE 如下:
set.seed(12345)
library(FAdist)
X <- rlnorm3(n=100, shape = 2, scale = 1.5, thres = 1)
# m: Location Parameter
# s: Scale Parameter
# t: Threshold Parameter
LL3 <- function(X, m, s, t)(1/((X-t)*s*(2*pi)^0.5))*exp(((-(log(X-t)-m)^2)/(2*s^2)))
library(MASS)
fitdistr(x=X, densfun=LL3, start=list(m=2, s=1.5, t=1))
但是这段代码会抛出以下错误信息:
Error in stats::optim(x = c(30.9012208754183, 223.738029433835,
46.4287558537441, : non-finite finite-difference value [3] In addition: Warning message: In log(X - t) : NaNs produced
是否有任何 R 包适合三个参数分布,例如三个参数 Log-normal、Gamma、Weibull 和 Log-logistic distributions?
【问题讨论】:
-
错误信息与有
t>=X一致,导致log(X-t)没有被定义。您能否尝试通过在对fitdistr的调用中使用可选参数upper=来为优化设置一些约束?或者,您可以重写您的函数LL3,以便在t>=X时返回 0。 -
感谢@Jealie 的回答。您是否介意建议对代码进行任何更改。谢谢
-
LL3 <- function(X, m, s, t)ifelse(t>=X,0,(1/((X-t)*s*(2*pi)^0.5))*exp(((-(log(X-t)-m)^2)/(2*s^2)))) -
@Jealie 也是,应该有严格大于根据论文。
ifelse(t>X,0...。不幸的是,它仍然是同样的错误。 -
@Csislander:实际上你需要捕捉 t==X 的情况,因为 log(0) 没有定义。否则,我无法自己测试表达式,但我敢打赌警告消失并被其他内容取代?
标签: r distribution