R和概率

3

我正在尝试编写一段代码来获取特定情况的概率。有52张牌分为4个花色堆。从每个堆中随机抽取1张牌,组成4张牌的组合,然后将牌放回各自的堆中。如何计算组合只有1个国王的概率? 我已经尝试了以下方法,但我认为我做错了什么。

cards <- c(2:10,'J','Q', 'K','A') 
v <- sample(rep(cards,1:13),1000,replace=T)
cat('The probability of getting a King is approximately:',sum(v=='K')/length(v),'\n')

1
首先,你的rep是错误的,请查看rep(1:4, 1:4)以了解如何修正;相反,请尝试rep(cars,4)。其次,你正在测试单张牌,而不是四张一组的牌。第三,你正在进行替换的抽样,这意味着可能会得到四张黑桃A。 - r2evans
1
尝试运行 table(replicate(1000, any(sample(rep(cards, 4), size=4) == 'K'))) - r2evans
如果每次抽取4张牌后都会替换掉这些牌,那么我是否应该使用替换进行测试? - user208513
1
但是,@r2evans,你没有52张牌。你有13张牌,其中选择一张牌并在牌组中替换。这样做4次,相当于从一副牌中选择4张牌。 - Edward Carney
@EdwardCarney,length(rep(cards,4))会给你什么结果?table(rep(cards,4))呢?第一个不是应该得到52,第二个是得到4的计数吗?如果是这样的话,请再次向我解释问题,我可能漏掉了什么。(如果不是这样的话,那么我还是漏掉了什么。) - r2evans
显示剩余4条评论
1个回答

2

根据我的理解,您可以使用此代码解决问题。这适用于从每个堆中单独给定1张牌的情况,或者在替换后进行的后续给定抽取。如果您对多次抽取的概率或在没有替换的情况下进行的后续抽取感兴趣,则不起作用。它不是一种基于重复抽样的计算方法。

所有可能的抽取组合,即从每个堆中是否为King:

Hearts <- rep(c((rep("k",1)),(rep("n",1))),8)
Spades <- rep(c((rep("k",2)),(rep("n",2))),4)
Clubs <- rep(c((rep("k",4)),(rep("n",4))),2)
Diamonds <- rep(c((rep("k",8)),(rep("n",8))),1)

pile.possibilities <- data.frame(Hearts,Spades,Clubs,Diamonds)

并绘制每堆的概率:

pile.possibilities$H.prob <- ifelse (pile.possibilities$Hearts == "k", (1/13), (12/13))
pile.possibilities$S.prob <- ifelse (pile.possibilities$Spades == "k", (1/13), (12/13))
pile.possibilities$C.prob <- ifelse (pile.possibilities$Clubs == "k", (1/13), (12/13))
pile.possibilities$D.prob <- ifelse (pile.possibilities$Diamonds == "k", (1/13), (12/13))

每个组合的综合概率:

pile.possibilities$Combo.prob <- pile.possibilities$H.prob *  
                                 pile.possibilities$S.prob *   
                                 pile.possibilities$C.prob *   
                                 pile.possibilities$D.prob

您将肯定拥有其中一种组合。
> sum(Pile.combo.prob)
[1] 1

筛选您感兴趣的组合:

pile.possibilities$one.king.combo <- paste(pile.possibilities$Hearts,pile.possibilities$Spades,pile.possibilities$Clubs,pile.possibilities$Diamonds,sep = "")
pile.possibilities$one.king.combo <- sapply(strsplit(pile.possibilities$one.king, NULL), function(x) paste(sort(x), collapse = ''))

one.king.probability<- sum(subset(pile.possibilities, one.king.combo == "knnn")$Combo.prob)
one.king.probability
[1] 0.2420083

#Final data frame used
> pile.possibilities
   Hearts Spades Clubs Diamonds     H.prob     S.prob     C.prob     D.prob Combo.prob one.king.combo
1       k      k     k        k 0.07692308 0.07692308 0.07692308 0.07692308 3.501278e-05           kkkk
2       n      k     k        k 0.92307692 0.07692308 0.07692308 0.07692308 4.201534e-04           kkkn
3       k      n     k        k 0.07692308 0.92307692 0.07692308 0.07692308 4.201534e-04           kkkn
4       n      n     k        k 0.92307692 0.92307692 0.07692308 0.07692308 5.041840e-03           kknn
5       k      k     n        k 0.07692308 0.07692308 0.92307692 0.07692308 4.201534e-04           kkkn
6       n      k     n        k 0.92307692 0.07692308 0.92307692 0.07692308 5.041840e-03           kknn
7       k      n     n        k 0.07692308 0.92307692 0.92307692 0.07692308 5.041840e-03           kknn
8       n      n     n        k 0.92307692 0.92307692 0.92307692 0.07692308 6.050208e-02           knnn
9       k      k     k        n 0.07692308 0.07692308 0.07692308 0.92307692 4.201534e-04           kkkn
10      n      k     k        n 0.92307692 0.07692308 0.07692308 0.92307692 5.041840e-03           kknn
11      k      n     k        n 0.07692308 0.92307692 0.07692308 0.92307692 5.041840e-03           kknn
12      n      n     k        n 0.92307692 0.92307692 0.07692308 0.92307692 6.050208e-02           knnn
13      k      k     n        n 0.07692308 0.07692308 0.92307692 0.92307692 5.041840e-03           kknn
14      n      k     n        n 0.92307692 0.07692308 0.92307692 0.92307692 6.050208e-02           knnn
15      k      n     n        n 0.07692308 0.92307692 0.92307692 0.92307692 6.050208e-02           knnn
16      n      n     n        n 0.92307692 0.92307692 0.92307692 0.92307692 7.260250e-01           nnnn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接