JD *_*ong 6 r probability stochastic
我有一个像这样创建的密度对象dd:
x1 <- rnorm(1000)
x2 <- rnorm(1000, 3, 2)
x <- rbind(x1, x2)
dd <- density(x)
plot(dd)
Run Code Online (Sandbox Code Playgroud)
这产生了这种非高斯分布:
alt text http://www.cerebralmastication.com/wp-content/uploads/2009/09/nongaus.png
我最终希望得到这种分布的随机偏差,类似于rnorm如何偏离正态分布.
我试图解决这个问题的方法是获取我的内核的CDF,然后让它告诉我variate,如果我传递它的累积概率(反向CDF).这样我可以将均匀随机变量的矢量转换为密度的绘制.
看起来我想做的事情应该是其他人在我面前做的基本事情.这样做有简单的方法或简单的功能吗?我讨厌重新发明轮子.
我找到了这篇R帮助文章,但我无法理解他们正在做什么,最终的输出似乎没有产生我所追求的.但它可能是我不明白的一步.
我已经考虑过从供应商套餐中选择Johnson发行版,但约翰逊不会给我一些我的数据所具有的漂亮的双峰驼峰.
替代方法:
sample(x, n, replace = TRUE)
Run Code Online (Sandbox Code Playgroud)
这只是法线的混合。那么为什么不类似:
rmnorm <- function(n,mean, sd,prob) {
nmix <- length(mean)
if (length(sd)!=nmix) stop("lengths should be the same.")
y <- sample(1:nmix,n,prob=prob, replace=TRUE)
mean.mix <- mean[y]
sd.mix <- sd[y]
rnorm(n,mean.mix,sd.mix)
}
plot(density(rmnorm(10000,mean=c(0,3), sd=c(1,2), prob=c(.5,.5))))
Run Code Online (Sandbox Code Playgroud)
如果您只需要来自该混合分布的样本,这应该没问题。