您所描述的不是截断正态分布本身,但是它的概率密度函数和累积分布函数可以很容易地计算出来,就像我们处理截断分布一样,所以你需要将它们除以曲线下的剩余面积。即通过
∫a<x≤b ∪ c<x≤df(x)dx=[F(b)−F(a)]+[F(d)−F(c)]
在哪里f(x)是非截断密度和F(x)是非截断的 cdf。这可以推广到任何数量的此类间隔。
这种分布的密度是
g(x)={f(x)F(b)−F(a)+F(d)−F(c)0for a<x≤b ∪ c<x≤dotherwise
为了说服自己,您可以通过简单的模拟轻松验证此结果(见下文)。
set.seed(123)
m <- 0
s <- 1
a <- -2
b <- -1
c <- 1
d <- 2
x <- rnorm(1e5, m, s)
y <- x[(x > a & x <= b) | (x > c & x <= d)]
g <- function(x, mean = 0, sd = 1, a, b, c, d) {
ifelse((x > a & x <= b) | (x > c & x <= d),
dnorm(x, mean = mean, sd = sd) /
((pnorm(b, mean = mean, sd = sd) - pnorm(a, mean = mean, sd = sd)) +
(pnorm(d, mean = mean, sd = sd) - pnorm(c, mean = mean, sd = sd))),
0)
}
xx <- seq(-4, 4, by = 0.01)
hist(y, 100, xlim = c(-4, 4), freq = FALSE)
lines(xx, g(xx, m, s, a, b, c, d), col = "red")