【发布时间】:2016-01-14 04:33:28
【问题描述】:
这个问题是对原始线程 (https://stats.stackexchange.com/questions/12209/percentage-of-overlapping-regions-of-two-normal-distributions) 的跟进
我已经修改了上面线程中的原始代码来标记地块,但仅此而已。我遇到了与一组输入一起工作的代码问题,但不是另一组。作为一个 R 初学者,我只是在寻求帮助。
mu1 <- 5
sd1 <- 1
mu2 <- 3
sd2 <- .75
此数据集有效。
当我更改数字时,我遇到了一个问题:
mu1 <- .3439
sd1 <- .0005
mu2 <- .3420
sd2 <- .00075
显然有重叠,但积分不是计算。
当数字改变时,积分如何失败?我该如何补救?我在 xs 中没有足够的 x 点来计算积分吗?
完整代码如下:
min.f1f2 <- function(x, mu1, mu2, sd1, sd2) {
f1 <- dnorm(x, mean=mu1, sd=sd1)
f2 <- dnorm(x, mean=mu2, sd=sd2)
pmin(f1, f2)
}
mu1 <- .3439
sd1 <- .0005
mu2 <- .3420
sd2 <- .00075
xs <- seq(min(mu1 - 3*sd1, mu2 - 3*sd2), max(mu1 + 3*sd1, mu2 + 3*sd2), .00001)
f1 <- dnorm(xs, mean=mu1, sd=sd1)
f2 <- dnorm(xs, mean=mu2, sd=sd2)
plot(xs, f1, type="l", ylim=c(0, max(f1,f2)), ylab="density")
lines(xs, f2, lty="dotted")
ys <- min.f1f2(xs, mu1=mu1, mu2=mu2, sd1=sd1, sd2=sd2)
xs <- c(xs, xs[1])
ys <- c(ys, ys[1])
polygon(xs, ys, col="red")
### integrate to find % overlap
iP <- integrate(min.f1f2, -Inf, Inf, mu1=mu1, mu2=mu2, sd1=sd1, sd2=sd2)
VaLue <- iP$value
VaLue <- sprintf("%.1f %%", 100*VaLue)
#percentage on plot (in middle of overlap.. half of ys height )
text(((mu2 + 3*sd2)+(mu1 - 3*sd1))/2, max(ys)/2, VaLue)
#label f1
text(mu1+sd1,max(f1),"HOLE")
#label f2
text(mu2+sd2,max(f2),"PEG")
【问题讨论】:
-
您在断言“孔”和“针”可以具有“正态分布”的地方迷失了方向。从理论上讲,这是不可能的——两者都不能有负半径——所以显然你正在做一些近似。您能否编辑此问题以明确说明您如何参数化这些几何对象以及如何使用正态分布对这些参数进行建模?
-
公平。目的是说孔的内径具有平均值和公差。销的外径也是如此。因此,如果我的孔的公差为 0.3439±0.0015,我假设公差基于 3 sigma,因此标准偏差为 0.0005。我已经更新了我的第一个示例,这样孔或销就不会变成负数(很好!)。还添加了 cmets 以显示从库存中提取“可接受”零件的意图 - 目标是查看任何仅根据规格不适合的可接受零件的可能性。
-
这可能有助于认识到这种重叠积分与销是否足够小以适合孔的问题无关。如果您要消除问题中的这种转移,我怀疑大多数读者会立即意识到您需要做什么。
-
谢谢。我会清理我的问题以匹配。
-
您似乎已经抛出了问题的所有统计元素。它现在询问“为什么这段代码似乎不起作用”。如果这确实是您想问的——知道它不能正确回答早期版本和 cmets 中提出的统计问题——那么请将其标记为迁移到 SO。
标签: r statistics normal-distribution integral