'Strange' 在 R 中使用 truncdist 集成函数的行为

'Strange' behavior of integrate function with truncdist in R

从数学上讲,以下是不可能的

library(truncdist)
q = function(x, L, R ) dtrunc(x, "exp", rate=0.1, a=L,b=R) 
integrate(q, L=2, R=3, lower  =0, upper = 27 )
integrate(q, L=2, R=3, lower  =0, upper = 29 )
integrate(q, L=2, R=3, lower  =27, upper = 29 )
integrate(q, L=2, R=3, lower  =0, upper = 30 )

我们发现第一个积分给出了一个正数,第二个积分通过添加第三个区间将自身积分为零来评估为零。这是 integratetruncdist 中的问题吗?

我们可以通过以下方式发现更多此类问题

z=numeric()
for(i in 1:50){
  z[i]=integrate(q, L=2, R=3, lower  =0, upper = i)$value
}

我需要做什么才能找到正确的积分(从 0 积分到 i>=3 时都是 1)?

来自help("integrate")

Like all numerical integration routines, these evaluate the function on a finite set of points. If the function is approximately constant (in particular, zero) over nearly all its range it is possible that the result and error estimate may be seriously wrong.

您找到了这样的示例:

curve(q(x, 2, 3), from = -1, to = 30)

您不应该对分布密度函数进行数值积分。使用累积分布函数:

diff(ptrunc(c(0, 29), "exp", rate = 0.1, a = 2, b = 3))
#[1] 1

我在这个 post 中找到了另一个答案:

使用hcubature问题可以数值求解,这更接近我原来的问题。