列出样本空间?
Posted
技术标签:
【中文标题】列出样本空间?【英文标题】:List the sample space? 【发布时间】:2014-10-30 18:54:25 【问题描述】:我遇到了这个无法解决的练习: 一个骨灰盒包含三个红球、两个绿球和一个白球。三个球从瓮中依次抽出,无需更换。他们的颜色被记录下来。使用 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"
【问题讨论】:
【参考方案1】:问题是,如果顺序很重要,那么您需要的是排列而不是组合。排列通常会迅速爆发并变得难以管理。我敢肯定这效率极低,但它似乎有效。
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
【讨论】:
谢谢弗利克先生!请不要担心它效率低下 - 我会花一整天时间弄清楚这个函数是如何做到这一点的。 @KaterinaBakunina 希望弄清楚它是如何工作的并不难。我已经在答案中添加了进一步的描述,希望让它变得更容易。【参考方案2】:你可以这样做:
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"
【讨论】:
这将从正确的分布中提取,但不一定会按要求生成样本空间。 (除非您多次运行它并获取观察到的唯一值,但在无穷大之前停止,您可能会错过一个)。 @MrFlick - 哦,好点 - 没完全明白这个问题。不幸的是,现在没有时间尝试一下 - 期待其他答案【参考方案3】:您也可以像这样使用prob
包中的函数urnsamples
:
unique(urnsamples(x, size = 3, replace = F, ordered = T))
“prob”包中有几个样本空间和概率函数:
https://cran.r-project.org/web/packages/prob/vignettes/prob.pdf
您可以使用以下代码调出此包的 pdf 文件:
小插图(“概率”)
【讨论】:
以上是关于列出样本空间?的主要内容,如果未能解决你的问题,请参考以下文章