如何知道样本是从 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"
如果您不知道如何使此输出适合您的情况,请告诉我。
我正在使用 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"
如果您不知道如何使此输出适合您的情况,请告诉我。