0

如何实现以下内容:创建高斯混合模型采样器。在这个采样器中,一个数据有 40% 的机会从 N(-1,1) 分布中采样,并且有 60% 的机会从 N(2,1/9) 分布中采样。采样 100,000 个数据并创建结果的密度直方图。在 R。

我应该使用 sample(),但我不确定在 prob = "" 中使用哪个向量。非常感谢任何帮助/指导,谢谢!

4

1 回答 1

1
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²)。

于 2022-02-26T08:23:28.347 回答