[R集成:返回错误的解决方法(使用错误的积分点?)(R integrate: returns wro

2019-10-31 04:11发布

我在为r的功能,我想整合,但对功能参数的一些(极端)值, integrate回报不正确的解决方案。 我认为这个问题可能是integrate选择的一些极端值不当正交点,但首先我会提供证明的问题。

我希望集成的功能如下。

integrandFunc_F <- function(x, func_u, func_u_lowerBar, 
  func_u_upperBar, func_mean_v, func_sigma_v, func_sigma_epsilon, 
  func_sigma_y, func_gamma, func_rho) {
#print(x);
p <- 1 - pnorm(func_u_upperBar,x,func_sigma_y);
q <- pnorm(func_u_lowerBar,x,func_sigma_y);
p <- p*(1-func_rho); q <- q*(1-func_rho);
alpha <- ifelse(func_gamma*(p+q) == 0, 0, pmax((func_gamma*p-q)/(func_gamma*(p+q)), 0));
g <- ifelse(x > func_u, dnorm(x,func_mean_v,sqrt(func_sigma_v^2 + func_sigma_epsilon^2))/(1-pnorm(func_u,func_mean_v,sqrt(func_sigma_v^2 + func_sigma_epsilon^2))), 0);
output <- alpha*g;
output
}

当我尝试计算下面,我得到的1正确的解决方案:

integrate(integrandFunc_F, lower=-Inf, upper=Inf, func_u= 8, func_u_lowerBar= 8, 
  func_u_upperBar= 8, func_mean_v= 30, func_sigma_v= .1, func_sigma_epsilon= 2, 
  func_sigma_y= 1, func_gamma= 1/1.1, func_rho= .05)

然而,当我试着计算下面,我得到的0不正确的解决方案:

integrate(integrandFunc_F, lower=-Inf, upper=Inf, func_u= 8, func_u_lowerBar= 8, 
  func_u_upperBar= 8, func_mean_v= 50, func_sigma_v= .1, func_sigma_epsilon= 2, 
  func_sigma_y= 1, func_gamma= 1/1.1, func_rho= .05)

在上面,我表示我相信这个问题可能有与积分点的选择做。 如果取消注释#print(x)在上述函数,可以在看到func_mean_v = 30的情况下, integrate于正交分是相对大的了事/近30。然而,在func_mean_v=50的情况下,经过几次迭代integrate选取并邻近接近0 0正交点是不合适的,以评估该功能,其在包含与平均正态分布正交点func_mean_v.

如何解决这个问题的任何想法? 为什么会integrate迭代接近0在某些情况下,以正交分? 注意,的选择func_mean_v = 30func_mean_v = 50诚然这个函数极值参数,但是我需要能够正确计算这样的情况。

Answer 1:

你可能会改变积分变量,以中心为顶点,

wrapper <- function(x, func_mean_v, ...)
   integrandFunc_F(x+func_mean_v, func_mean_v=func_mean_v, ...)


integrate(wrapper, rel.tol = 1e-8, lower=-Inf, upper=Inf, func_u= 8, func_u_lowerBar= 8, 
          func_u_upperBar= 8, func_mean_v= 50, func_sigma_v= .1, func_sigma_epsilon= 2, 
          func_sigma_y= 1, func_gamma= 1/1.1, func_rho= .05)
# 1 with absolute error < 1.3e-09


文章来源: R integrate: returns wrong solution (is using wrong quadrature points?)