使用 distrplus 拟合 truncnorm 分布会导致致命错误(R 崩溃)

Fitting truncnorm distribution with distrplus causes fatal error (R crashes)

这是让我崩溃的 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 使用 numeric(0)x 参数调用指定的密度函数。这会导致崩溃 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)
}

但到目前为止,它仍在沿线更远的地方崩溃。

需要 community-minded 联系 dtruncnorm 的维护者/提交问题 here ...

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)))