积分函数给出非常奇怪的结果

Integrate function giving very odd result

我试图找到由两个正态分布重叠定义的曲线下的面积,每个正态分布都有自己的均值和标准差。开发者这是我到目前为止设置的代码的样子。

 min.f1f2 <- function(x, mu1, mu2, sd1, sd2)
 {f1 <- dnorm(x, mean=mu1, sd=sd1)
 f2 <- dnorm(x, mean=mu2, sd=sd2)
 pmin(f1, f2)}

当我尝试将该函数从 -Inf 集成到 +Inf 时,mu1=30、mu2=30、sd1=1 和 sd2=2,它看起来像这样:

integrate(min.f1f2, -Inf, Inf, mu1=30, mu2=30, sd1=1, sd2=2)

这给出了 0.6773251 的结果,绝对误差 < 7.6e-05。这似乎都是正确和好的。但是,当我将分配方式转换为 31:

integrate(min.f1f2, -Inf, Inf, mu1=31, mu2=31, sd1=1, sd2=2)

我得到的结果是:8.972702e-06,绝对误差 < 1.6e-05。

考虑到这是直接翻译,我的想法是这个积分应该在两个分布之间的重叠曲线下找到相同的区域。然而,R似乎并不同意。这是我造成的,还是我 运行 与集成功能有冲突?

感谢您提供的任何信息。

数值积分函数选择有限 个点来计算函数。 当您从 -Inf 变为 Inf 时,连续块之间的距离可能非常大且粗糙。当您移动分布时,它会被分成不同的块并产生不同的答案。 相反,如果您将下限 min(mu1-5*sd1, mu2-5*sd2) 和上限设为 max(mu1+5*sd1, mu2+5*sd2) 你会得到更具可比性的答案。

integrate(min.f1f2, 21,41,mu1=31, mu2=31, sd1=1, sd2=2)
0.6773252 with absolute error < 4.8e-05
integrate(min.f1f2, 20,40,mu1=30, mu2=30, sd1=1, sd2=2)
0.6773252 with absolute error < 4.8e-05