问题描述
我正在生成两个分布(例如,均值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,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作为输出,这表明分布在max_threshold之后的可能性为100%。取而代之的是,输出在1570之后急剧下降,直到达到0。有人能理解这种行为吗?我在这里想念东西吗?
我的机器具有Windows 10、64,R版本4.0.3和库distr 2.8.0。
此代码基于此处提供的代码: integrate() in R gives terribly wrong answer
非常感谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)