【问题标题】:Plot normal distribution when parameters themselves are random variables当参数本身是随机变量时绘制正态分布
【发布时间】:2014-10-07 19:30:25
【问题描述】:

我想绘制一个正态 PDF,其中均值本身是一个正态分布的随机变量。

X~N(mu, 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

有没有人知道更好的方法来解决这个问题?是否可以在curve 命令本身内自动将“mean=”设置为(完美分布的)随机变量?

【问题讨论】:

  • “起伏”不是来自rnorm(...)density(...) 使用多个内核生成内核密度估计 - 您看到的是两个(或更多)内核几乎完全重叠。如果增加带宽(例如使用adjust=2),波动就会消失。
  • 啊,好点子。感谢您的提示!

标签: r plot


【解决方案1】:

我不知道这是否有帮助,但您的问题在数学上相当容易解决。您定义混合的方式仅对应于结合两个分布的方差:

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)

【讨论】:

  • 谢谢 Ben,这是一个很好的观点。我知道在这种特殊情况下会出现一个简洁的分析解决方案。不幸的是,这只是一个 MWE,我的实际问题涉及两个参数(mu 和 sigma)都是随机变量......而且也不一定属于同一个分布系列。尽管如此,您的评论还是值得赞赏的!
  • 那么我认为您最好的方法是按照@jlhoward 的建议进行模拟并增加带宽/平滑参数(您或他们可以将其发布为答案)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 2013-08-08
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 2011-03-17
  • 2023-03-05
相关资源
最近更新 更多