我想从混合正态分布中采样,第一个是,第二个是。我用过。这个对吗?rnorm(100, c(mean=c(1,5), sd=c(2,4)))
我要解决的问题是从上面的 2 个分布中抽样,第一个占 75%,第二个占 25%。我在正确的轨道上吗?
编辑: 我将用更简单的数字重写问题以解决问题。:)
我想以70% 的概率中抽样,以 30% 的概率当然,这只是为了讨论,我正在使用的实际分布是 n(21, 3.3), n(26,4)。
我想从混合正态分布中采样,第一个是,第二个是。我用过。这个对吗?rnorm(100, c(mean=c(1,5), sd=c(2,4)))
我要解决的问题是从上面的 2 个分布中抽样,第一个占 75%,第二个占 25%。我在正确的轨道上吗?
编辑: 我将用更简单的数字重写问题以解决问题。:)
我想以70% 的概率中抽样,以 30% 的概率当然,这只是为了讨论,我正在使用的实际分布是 n(21, 3.3), n(26,4)。
如果您想从具有参数和的两个高斯中进行不相等的采样(概率为 0.7 和 0.3) ,那么您可以尝试这样的事情:
n <- 100
yn <- rbinom(n, 1, .7)
# draw n units from a mixture of N(0,1) and N(100,3^2)
s <- rnorm(n, 0 + 100*yn, 1 + 2*yn)
事实上,这是 Venables 和 Ripley 在Modern Applied Statistics with S中提供的插图之一(Springer,2002;§5.2,第 110-111 页)。
使用不同的参数,您可以使用ifelse表达式根据 中给出的二项式序列选择均值和 SD yn,例如rnorm(n, mean=ifelse(yn, 21, 26), sd=ifelse(yn, 3.3, 4))。(无需使用yn进行逻辑转换as.logical。)
为了实现从分布的不均匀混合中采样的目标,最直接的方法是按所需比例分别采样:
p <- 0.70 #P(from N(mu1, sd1))
n.samps <- 10000
mu1 <- 0
sd1 <- 1
mu2 <- 100
sd2 <- 10
x <- vector()
for(i in 1:n.samps){
b <- runif(1, 0, 1)
if(b < p){
x[i] <- rnorm(1, mu1, sd1)
} else {
x[i] <- rnorm(1, mu2, sd2)
}
}
这可以快 50 倍左右完成:
binary <- runif(n.samps, 0, 1) > p
x <- c(rnorm(sum(binary), 1, 2), rnorm(sum(!binary), 5, 4)
然后抽取样本:
sample(x, 1)
或重新洗牌:
x <- sample(x, n.samp)