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

R 给出非常奇怪结果的积分函数,r,function,integrate,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)} 结果为0.6773251,绝对误差

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

 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)}
结果为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
integrate(最小f1f2,21,41,mu1=31,mu2=31,sd1=1,sd2=2)
0.6773252,绝对误差<4.8e-05
积分(最小f1f2,20,40,mu1=30,mu2=30,sd1=1,sd2=2)
0.6773252,绝对误差<4.8e-05

数值积分函数选择有限数量的点来计算函数。 当您从-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
integrate(最小f1f2,21,41,mu1=31,mu2=31,sd1=1,sd2=2)
0.6773252,绝对误差<4.8e-05
积分(最小f1f2,20,40,mu1=30,mu2=30,sd1=1,sd2=2)
0.6773252,绝对误差<4.8e-05

本质上是同一个问题,本质上是同一个问题,这很有意义。这当然可以解释我看到的结果。我缩小了最小值和最大值之间的范围,现在它给出了我期望的答案!这很有道理。这当然可以解释我看到的结果。我缩小了最小值和最大值之间的范围,现在它给出了我期望的答案!