[英]Plot density curve of mixture of two normal distribution
我對 R 比較陌生,可以使用一些基本的幫助。 我想生成兩個正態隨機變量的總和(每個變量的方差 = 1),因為它們的均值分開並繪制結果。 基本思想:如果均值相距足夠遠,則分布將是雙峰的。 這是我正在嘗試的代碼:
x <- seq(-3, 3, length=500)
for(i in seq(0, 3, 0.25)) {
y <- dnorm(x, mean=0-i, sd=1)
z <- dnorm(x, mean=0+i, sd=1)
plot(x,y+z, type="l", xlim=c(-3,3))
}
幾個問題:
先感謝您!
使用基本的 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)
最后我們使用matplot
進行繪圖:
matplot(x, X, type = "l", lty = 1)
更多解釋
在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
列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.