是否列出样本空间?

问题描述 投票:2回答:3

我面对的这项练习无法解决:包含三个红球,两个绿球和一个白球。依次抽出三个球,无需更换the。记录其颜色。使用R列出样本空间。

我尝试过:

combn(c(rep("R",3), rep("G",2),"W"),3)

但是此函数不考虑元素的顺序,而是读取三个R,如R1,R2和R3。结果,输出中有重复的行。

我需要产生此序列的功能:

Ω = {"GGR" "GGW" "GRG" "GRR" "GRW" "GWG" "GWR" "RGG" "RGR" "RGW" "RRG" "RRR" "RRW" "RWG" "RWR" "WGG" "WGR" "WRG" "WRR"}
r space sample urn
3个回答
3
投票

问题是,如果顺序很重要,那么您需要排列而不是组合。排列通常会迅速爆炸,变得难以管理。我敢肯定这种效率极低的方法,但似乎可行。

balls<-c(rep("R",3), rep("G",2),"W")

permn <- function(x, n) {
    if (n<1) return(vector(class(x)))
    do.call(rbind, lapply(1:length(x), function(i) {
         cbind(x[i], permn(x[-i], n-1))
    })
    )
}
x <- permn(balls, 3)
unique(sort(apply(x, 1, paste, collapse="")))

它返回

 [1] "GGR" "GGW" "GRG" "GRR" "GRW" "GWG" "GWR" "RGG" "RGR" "RGW" "RRG"
[12] "RRR" "RRW" "RWG" "RWR" "WGG" "WGR" "WRG" "WRR"

根据需要。

permn函数以递归方式工作。您传入值列表(x)以及要从该列表中选择多少项(n)。如果您选择至少一个值,那么我们将建立一个循环,从而选择每个元素。然后,在选择一个值之后,我们需要从其余项目中选择n-1更多。因此,我们再次调用该函数,这次删除了我们刚刚选择的值并减少了我们需要选择的项目数。

到目前为止,我们实际上一直忽略集合中的值(我们假设它们都是唯一的)。但是由于在这种情况下,所有特定颜色的球都无法区分,因此我们需要折叠结果。由于permn实际上返回一个矩阵,因此我们将折叠从c("G","G","R")之类的向量到字符串"GGR"的行,然后仅采用唯一值。

当然,并非每个结果都有同等的可能性。如果我们想看看它们发生的频率,可以执行

sort(prop.table(table(apply(x, 1, paste, collapse=""))))

这还将计算样本空间中每个元素的概率

       GGW        GWG        WGG        GGR        GRG        GRW 
0.01666667 0.01666667 0.01666667 0.05000000 0.05000000 0.05000000 
       GWR        RGG        RGW        RRR        RRW        RWG 
0.05000000 0.05000000 0.05000000 0.05000000 0.05000000 0.05000000 
       RWR        WGR        WRG        WRR        GRR        RGR 
0.05000000 0.05000000 0.05000000 0.05000000 0.10000000 0.10000000 
       RRG 
0.10000000 

0
投票

您可以做这样的事情:

balls<-c(rep("R",3), rep("G",2),"W")
paste(sample(balls,3), collapse="")  #this collapses your output so rather
                                     # than "G" "G" "W", it comes back as:

#[1] "GGW"

为此,例如10次​​

replicate(10, (paste(sample(balls,3), collapse="") ))

# [1] "RGW" "RWR" "RGR" "WRG" "RRW" "RRW" "RWR" "RGG" "GRR" "RRR"

0
投票

您也可以像这样使用urnsamples包中的prob功能:

unique(urnsamples(x, size = 3, replace = F, ordered = T))
© www.soinside.com 2019 - 2024. All rights reserved.