如何实现以下内容:创建高斯混合模型采样器。在这个采样器中,一个数据有 40% 的机会从 N(-1,1) 分布中采样,并且有 60% 的机会从 N(2,1/9) 分布中采样。采样 100,000 个数据并创建结果的密度直方图。在 R。
我应该使用 sample(),但我不确定在 prob = "" 中使用哪个向量。非常感谢任何帮助/指导,谢谢!
n <- 100000L
sims <- numeric(n)
for(i in 1L:n){
choice <- sample(c(1L, 2L), size = 1L, prob = c(0.4, 0.6))
if(choice == 1L){
sims[i] <- rnorm(1L, mean = -1, sd = 1)
}else{
sims[i] <- rnorm(1L, mean = 2, sd = 1/9)
}
}
hist(sims)
或者,更有效:
n <- 100000L
sims <- numeric(n)
choices <- sample(c(1L,2L), size = n, prob = c(0.4, 0.6), replace = TRUE)
ones <- choices == 1L
n_ones <- sum(ones)
sims[ones] <- rnorm(n_ones, mean = -1, sd = 1)
sims[!ones] <- rnorm(n - n_ones, mean = 2, sd = 1/9)
hist(sims)
小心正态分布。也许 1/9 是方差 (sd²)。