2014-10-07 49 views
2

我想繪製一個普通的PDF,其中平均值本身是一個正態分佈的隨機變量。當參數本身是隨機變量時繪製正態分佈

X〜N(畝,9),

其中mu〜N(50,4)。

下面的代碼工作不夠好:

set.seed(121) 
mu <- rnorm(100000,mean=50,sd=4) 
X <- rnorm(100000,mean=mu,sd=9) 
plot(density(mu),lty=2,xlim=c(0,100)) #mu 
lines(density(X),lwd=3) #X 

然而,映射到大量的觀測時rnorm總是會產生輕微起伏的曲線,即使;就像這裏的情況一樣。 (這也佔用了不必要的空間。)由於這個原因,我更喜歡用curve命令來繪製正常的PDF。不幸的是,下面第二行產生一個奇怪的眼痛:

curve(dnorm(x, mean=50, sd=4), 
     from=0, to=100, lty=2, yaxt="n") # mu 
curve(dnorm(x, mean=mu, sd=9), 
     from=0, to=100, n = length(mu), lwd=3, lty=1, add=TRUE, yaxt="n") # X 

有誰知道一個更好的方式來進行此事?是否可以自動將「mean =」設置爲curve命令本身內的一個(完全分佈)隨機變量?

+0

的「起伏」是不是從'RNORM(...)'。密度(...)'使用多個kernals生成一個核密度估計 - 你看到的是兩個(或更多)kernals幾乎完全重疊。如果增加帶寬(例如使用'adjust = 2'),波動就會消失。 – jlhoward 2014-10-07 20:02:57

+0

啊,好點。謝謝你的提示! – Grant 2014-10-07 20:25:36

回答

2

我不知道這是否有幫助,但您的問題是相當容易解決數學。您已經定義了混合的方式正好對應於合併兩個分佈的方差:

sd1 <- 4; sd2 <- 9 
set.seed(121) 
mu <- rnorm(100000,mean=50,sd=sd1) 
X <- rnorm(100000,mean=mu,sd=sd2) 
plot(density(mu),lty=2,xlim=c(0,100)) #mu 
lines(density(X),lwd=3) #X 
curve(dnorm(x,50,sd=sqrt(sd1^2+sd2^2)),add=TRUE,col=2,lwd=2) 

enter image description here

+0

謝謝本,這是一個很好的觀點。我知道在這個特殊情況下,一個簡潔的分析解決方案就出現了。不幸的是,這只是一個MWE,而我的實際問題涉及到兩個參數(mu和sigma)都是隨機變量......並且不一定是同一個分佈族。不過,您的意見是讚賞! – Grant 2014-10-07 20:43:03

+0

然後我認爲你最好的方法是隻做模擬並增加帶寬/平滑參數,就像@jlhoward所建議的那樣(你或他們可以將它作爲答案)。 – 2014-10-07 22:08:14

相關問題