';奇怪';R中带truncdist的积分函数的行为
从数学上来说,以下是不可能的';奇怪';R中带truncdist的积分函数的行为,r,numerical-integration,integrate,R,Numerical Integration,Integrate,从数学上来说,以下是不可能的 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
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?来自帮助(“积分”)
:
与所有数值积分例程一样,这些例程在有限的点集上计算函数。如果函数在几乎所有范围内近似为常数(特别是零),则结果和误差估计可能严重错误
您发现了这样一个示例:
curve(q(x, 2, 3), from = -1, to = 30)
你不应该对分布密度函数进行数值积分。使用累积分布函数:
diff(ptrunc(c(0, 29), "exp", rate = 0.1, a = 2, b = 3))
#[1] 1
我在这篇文章中找到了另一个答案:
使用
hcubature
这个问题可以用数字来解决,这与我原来的问题更接近。我想这样做,但在我的应用程序中,积分是通过密度与另一个函数x和x本身的乘积来定义的。所以我认为我不能这样做?没有细节我不能说。但是,如果您知道截断的界限,您只需要在这些界限内集成乘积。这避免了这个问题。