整合函数给出非常奇怪的结果

时间:2017-07-20 20:08:21

标签: r function integrate

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

 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的结果,绝对误差<1。 7.6E-05。这似乎都是正确和好的。但是,当我将分配方式翻译为31时:

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

我得到的结果是:8.972702e-06,绝对误差&lt; 1.6E-05

鉴于这是一种直接翻译,我的想法是这种整合应该在两个分布之间的重叠曲线下找到相同的区域。但是,R似乎并不同意。这是我所造成的,或者这是我与之相撞的整合功能的一些怪癖?

感谢您对此有所了解。

1 个答案:

答案 0 :(得分:2)

数值积分函数选择有限个点来评估函数。 当您从-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