将截断范分布与 distrplus 拟合会导致致命错误(R 崩溃)



这是为我崩溃R的代码,没有任何有用的错误消息。有什么想法吗?我快疯了。谢谢

library(fitdistrplus)
library(truncnorm)
set.seed(0)
x = rtruncnorm(n=30, a=0, b=Inf, mean=1, sd=0.45)
my_fit = fitdist(x, "truncnorm", method='mle', fix.arg=list(a=0, b=Inf), 
start=list(mean=mean(x), sd=sd(x)))

作为其机制的一部分,fitdist调用指定的密度函数,x参数为numeric(0)。 这会dtruncnorm崩溃,这会调用C++代码

,而代码并不期望...
dtruncnorm(numeric(0))

是一种更快地到达同一崩溃的方法。我试图通过创建自己的dtruncnorm()包装器来解决这个问题:

dtruncnorm <- function(x,a,b,mean,sd) {
if (length(x)==0) numeric(0) else truncnorm::dtruncnorm(x, a,b,mean,sd)
}

但到目前为止,它仍然在更远的地方坠毁。

联系dtruncnorm/在此处提交问题的维护者将是具有社区意识的......

一旦 Ben Bolker 发现 truncnorm - 而不是fitdist - 是问题所在,我决定简单地使用不同的库。以下代码对我来说执行得很好:

library(fitdistrplus)
library(extraDistr)
set.seed(0)
x = rtnorm(n=30, a=0, b=Inf, mean=1, sd=0.45)
my_fit = fitdist(x, "tnorm", method='mle', fix.arg=list(a=0, b=Inf), 
start=list(mean=mean(x), sd=sd(x)))

最新更新