使用基本的方法来做到这一点并不困难R特征。我们首先定义一个函数f
计算该法线混合物的密度:
## `x` is an evaluation grid
## `dev` is deviation of mean from 0
f <- function (x, dev) {
(dnorm(x, -dev) + dnorm(x, dev)) / 2
}
然后我们使用sapply
循环遍历各种dev
得到相应的密度:
## `dev` sequence to test
dev <- seq(0, 3, 0.25)
## evaluation grid; extending `c(-1, 1) * max(dev)` by 4 standard deviation
x <- seq(-max(dev) -4, max(dev) + 4, by = 0.1)
## density matrix
X <- sapply(dev, f, x = x)
## a comment on 2022-07-31: X <- outer(x, dev, f)
最后我们使用matplot
用于绘图:
matplot(x, X, type = "l", lty = 1)
的解释sapply
:
During sapply
, x
没有改变,而我们选择并尝试其中的一个元素dev
每次迭代。它像是
X <- matrix(0, nrow = length(x), ncol = length(dev))
for (i in 1:length(dev)) X[, i] <- f(x, dev[i])
matplot(x, X)
将绘制列X
一一反对x
.
2022年7月31日评论:只需使用outer
。以下是更多示例: