Я генерирую два распределения (скажем, среднее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 дает ужасно неправильно ответ
Большое спасибо!
integrate
дает мне[1] 100
. R4.0.3 в Ubuntu 20.04, дистрибутив 2.8.0. - person Rui Barradas   schedule 30.10.2020cubature::hcubature(f.Z, max_threshold, Inf, tol = .Machine$double.eps^0.5)$integral
. Дополнительные примеры решения подобных проблемы. - person Rui Barradas   schedule 30.10.2020