如何知道样本是从 2 个分布中的哪一个分布中抽取的?

How to know from which of 2 distributions the sample is drawn in R?

我正在使用 R 编写弹出模拟。此模拟中的 "growth" 参数是从具有不同平均值和 sd 的两个正态分布中以概率 p 采样的。我使用的代码如下:

R_0 <- sample(c(sample(rnorm(5000, mean = 3.5, sd = 0.7), 1),sample(rnorm(5000, mean = 1.5, sd = 0.3), 1)),1, prob = c(1 - p, p))  

这两个分布对应于良性压力环境(为简单起见,B 和 S)。我的问题是后面的代码我需要根据固定数量修改增长率R_0。这个数量取决于 R_0 系数是从 B 还是 S 环境中采样的。有没有办法知道 R_0 两个分布中的哪一个被采样?

我想我可以使用 if else 语句,但我不太确定如何初始化它。

提前致谢。

先保存第一个采样结果:

set.seed(123)
p <- .5
my_sample <- c(sample(rnorm(5000, mean = 3.5, sd = 0.7), 1),sample(rnorm(5000, mean = 1.5, sd = 0.3), 1))
R_0 <- sample(my_sample,1, prob = c(1 - p, p))

然后你可以检查样本来自哪个(first/A或second/B分布):

my_sample == R_0
[1] FALSE  TRUE

两个样本值相同的可能性很小。所以你也可以使用一个标志来告诉你最终样本来自哪个样本:

p <- .5
set.seed(123)
sample(c(paste("A", sample(rnorm(5000, mean = 3.5, sd = 0.7), 1), sep = " "),
    paste("B", sample(rnorm(5000, mean = 1.5, sd = 0.3), 1), sep = " ")),1, prob = c(1 - p, p)) 
[1] "B 1.45624041440113"

试试这个。我感觉输出并不完全是您想要的形式,但是如果没有更多上下文,我不知道什么最适合您的情况:

set.seed(9087)

R_0 <- function(p){
  pick<- sample(c("B","S"), 1, prob = c(p, 1-p))
  if(pick == "B") samp<-sample(rnorm(5000, mean = 3.5, sd = 0.7), 1)
  if(pick == "S") samp<-sample(rnorm(5000, mean = 1.5, sd = 0.3), 1)
  return(paste("Value of", samp, "drawn from", pick, sep = " "))
}

R_0(.5)

[1] "Value of 5.31171245776231 drawn from B"

如果您不知道如何使此输出适合您的情况,请告诉我。