等效积分在单积分和双积分下不给出相同的数值结果

Equivalent integrals not giving same numerical result with single and double integration

提问人:stats134711 提问时间:9/28/2023 更新时间:9/28/2023 访问量:42

问:

我有以下等效积分,涉及标准正态分布的 pdf 和 cdf,分别用 $\phi(x)$ 和 $\Phi(x)$ 表示。对于背景,积分表示三个观测值的样本范围的概率分布,这三个观测值是独立的,并且作为标准正态分布相同。

range_distribution

我使用以下中的包对第一个双积分和最后一个单积分进行编码:pracmaR

library(pracma)

t = 0.2
single_int <- function(x) 3*dnorm(x)*(pnorm(x+t)-pnorm(x))^2
I1 = integral(single_int,-999,999)       

double_int <- function(x,y) 6*dnorm(x)*dnorm(x+y)*(pnorm(x+y)-pnorm(x))
I2 = integral2(double_int,-999,999,-999,t)$Q

输出为:

> I1
[1] 0.01096555
> I2
[1] 0 

当基础积分相同时,为什么这些会给出不同的结果吗?

r 正态分布 数值积分

评论

3赞 Rui Barradas 9/28/2023
在下限应该是 0,而不是 -999。仍然存在差异,但结果现在是 0.0006524532。integral2t
0赞 stats134711 9/28/2023
谢谢!我在深夜这样做,没有在代码中发现......只有推导。

答:

5赞 Stéphane Laurent 9/28/2023 #1

你的积分对你用来替换无穷大的边界的选择是明智的。在 中,可以使用 和 。在 中,你不能。我会改用 cubature 包。当积分边界为无限时,它会自动执行变量更改以归结为有限边界。integral-InfInfintegral2

library(cubature)

f <- function(xy) {
  x <- xy[1]; y <- xy[2]
  6 * dnorm(x) * dnorm(x+y) * (pnorm(x+y) - pnorm(x))
}

hcubature(
  f, lowerLimit = c(-Inf, 0), upperLimit = c(Inf, 0.2)
)

# 0.01096558