簡體   English   中英

繪制兩種正態分布混合的密度曲線

[英]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))
}

幾個問題:

  1. 有沒有更好的方法來做到這一點?
  2. 我的情節只有一個 PDF。 如何將多個 PDF 放在同一個圖上?

先感謝您!

使用基本的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM