计算两个重叠分布下的面积
机器算法验证
分布
密度估计
小面积估计
2022-03-30 13:28:50
2个回答
分布和重叠,如图所示。总重叠概率为
图的R代码:
hdr="Densities of NORM(100,15) and NORM(150,15)"
curve(dnorm(x,100,15), 50, 200, ylab="PDF", main=hdr)
curve(dnorm(x,150,15), add=T)
abline(h=0, col = "green2")
abline(v=125, col = "red", lty="dotted")
用于概率计算的 R 代码,其中pnorm
是一个普通的 CDF:
pnorm(125, 150, 15)
[1] 0.04779035
1 - pnorm(125, 100, 15)
[1] 0.04779035
pnorm(125, 150, 15) + 1 - pnorm(125, 100, 15)
[1] 0.0955807
注意:对于假设的检验,这两个概率可能是 I 类错误和 II 类错误。
也许这是一个比@BruceET 更通用的解决方案,它不假定正常或预设参考点P。OP 说他/她有两个分布的 PDF,所以例如这些可能是:
pdf1 <- function(x, mean= 100, sd= 15) {
pdf <- (1 / (sd * sqrt(2 * pi))) * exp(-0.5 * ((x - mean)/sd)^2)
return(pdf)
}
pdf2 <- function(x, mean= 150, sd= 15) {
pdf <- (1 / (sd * sqrt(2 * pi))) * exp(-0.5 * ((x - mean)/sd)^2)
return(pdf)
}
(这些是高斯的,但它们可能是任何 PDF)
在 x 轴上的数据点网格上计算每个 PDF,取两个密度中的最小值,将其加权为网格的步长,然后求和以获得交点(这是一个非常粗略的整合 - 我会希望看到更好的解决方案...):
step <- 0.1
at <- seq(20, 250, by= step)
x1 <- pdf1(at, 100, 15)
x2 <- pdf2(at, 150, 15)
area <- 0
for(i in 1:length(at)) {
area <- area + ifelse(x1[i] > x2[i], x2[i], x1[i]) * step
}
print(area)
0.09558193
其它你可能感兴趣的问题