Функция интегрировать() в R выдает аномальный вывод

Я генерирую два распределения (скажем, среднее1, sd1 и среднее2, sd2), использую для них свертки, а затем вычисляю интеграл для вновь сгенерированного распределения от заданного порога (заданного максимального значения) до Inf. Здесь я использую функции из библиотеки distr.

Интересно, что при интегрировании, если мои исходные распределения представляют значения, значительно превышающие пороговое значение, вывод интеграла = 0 (должен быть = 100, что указывает на то, что все распределение падает после порогового значения)

MWE

library(distr)

# Two distributions
mean1 <- 560 
sd1   <- 4.1

mean2 <- 1570  # values to be tested: # 1570 # 1571 # 1970
sd2   <- 3.219

# Getting Normal Distribution for both groups
Np1  <- Norm(mean = mean1, sd = sd1)  
Np2  <- Norm(mean = mean2, sd = sd2) 

# Convolution of distributions
conv <- convpow(Np1 + Np2, 1) 

# Sanity check
plot(conv)

# Distribution function
f.Z  <- d(conv) 

# This works well with any values. 
min_threshold <- 1925.3
integrate(f.Z, 0, min_threshold, abs.tol = 0L)$value * 100   

# The statement below provides abnormal output depending on the tested value presented above for mean2:
max_threshold <- 1968.9
integrate(f.Z, max_threshold, Inf, abs.tol = 0L)$value * 100   

Здесь я ожидал бы, что любое значение для mean2 > 1570 будет иметь 100 в качестве вывода, что указывает на 100% вероятность того, что распределение будет после max_threshold. Вместо этого выход резко снижается после 1570, пока не достигнет 0. Кто-нибудь поймет такое поведение? Я что-то упустил здесь?

На моей машине установлена ​​Windows 10, 64, R версии 4.0.3 и дистрибутив библиотеки 2.8.0.

Этот код основан на приведенном здесь коде: integrate() в R дает ужасно неправильно ответ

Большое спасибо!


person MRC    schedule 30.10.2020    source источник
comment
Второй звонок integrate дает мне [1] 100. R4.0.3 в Ubuntu 20.04, дистрибутив 2.8.0.   -  person Rui Barradas    schedule 30.10.2020
comment
Не могли бы вы подтвердить, что когда вы работаете со средним значением2 = 1970, второе значение интеграции: max_threshold ‹- 1968,9 значение интеграции (f.Z, max_threshold, Inf, abs.tol = 0L)$ дает результат = 1? Для меня в упомянутой машине выход = 0. Спасибо за отзыв!!   -  person MRC    schedule 30.10.2020
comment
Вы правы, это не удается. Но этот возвращает 1: cubature::hcubature(f.Z, max_threshold, Inf, tol = .Machine$double.eps^0.5)$integral. Дополнительные примеры решения подобных проблемы.   -  person Rui Barradas    schedule 30.10.2020