使用 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)))
这是让我崩溃的 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)))