R 中带有 truncdist 的积分函数的“奇怪”行为

问题描述 投票:0回答:2

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

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 )

我们发现第一个积分给出正数,第二个积分通过添加第三个区间来计算为零,第三个区间将自身积分为零。这是

integrate
truncdist
中的问题吗?

我们可以使用以下内容来查找更多此类问题

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

我需要做什么才能找到正确的积分(从 0 积分到

i>=3
时,所有积分均为 1)?

r numerical-integration
2个回答
1
投票

来自

help("integrate")

与所有数值积分例程一样,这些例程在有限的点集上评估函数。如果函数在几乎所有范围内近似恒定(特别是零),则结果和误差估计可能会严重错误。

您找到了这样的示例:

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

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

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

0
投票

我在这篇文章中找到了替代答案:Integration in R withIntegration function

使用

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

© www.soinside.com 2019 - 2024. All rights reserved.