Интеграция R: возвращает неправильное решение (используются неправильные квадратурные точки?)

У меня есть функция в 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 = 30 а такжеfunc_mean_v = 50 по общему признанию крайние параметры для этой функции, однако я должен быть в состоянии правильно рассчитать такие случаи.

Ответы на вопрос(1)

Ваш ответ на вопрос