在给定概率的情况下,通过替换对抽样进行建模
Modelling a sampling with replacement, given probabilities
我想在 R 中模拟一个带替换的采样(比如 urn 模型)。也就是说,我有三个不同的事件(比如:1,2 和 3(实际上它们是绝对的,但我认为目前这并不重要))并且我知道每个事件的概率:
1 --> 0.5
2 --> 0.2
3 --> 0.3
现在我想以 50 个替换样本为例,我想知道三个不同事件的每种可能组合的概率。
我的想法是使用 rmultinom
生成这些样本。
rmultinom(n=50,size=3,prob=c(0.5,0.2,0.3))
现在我得到 50 个随机(?)选择的样本,但是当我取 50 个样本并进行替换时,我需要所有可能的组合。
如果我没理解错的话,你所求的概率可以通过分析计算出来。
我的感觉是,您希望将所有具有相同数量的 1、2 和 3 的抽奖视为等同的(如果不是,请参见下文)。也就是说,49 个连续 1 后跟 2 与 2 后跟 49 个连续 1 一样算作 50 次平局 "outcome"。
在这种情况下,您要查找的是针对 (p1 = 0.5,p2 = 0.2,p3 = 0.3) 和计数 c1、c2 和 c3 计算的多项式概率质量函数的值, 1s、2s 和 3s(这些总和应为 50)。您可以将 R 中的多项式 PMF 计算为:
counts = c(c1, c2, c3)
myProbs = c(0.5, 0.2, 0.3)
dmultinom(x = counts, prob = myProbs)
现在剩下的就是枚举50次抽奖中可能出现的1、2、3的所有可能组合。调用函数 nsimplex(3,50)
(来自 combinat
包)告诉我们有 1326 个这样的函数,调用函数 xsimplex(3,50)
(在同一个包中找到)会在矩阵中为我们生成它们形式。以下是 1326 列中的前五列:
[,1] [,2] [,3] [,4] [,5]
[1,] 50 49 49 48 48
[2,] 0 1 0 2 1
[3,] 0 0 1 0 1
然后我们只需要使用 apply
按列计算 dmultinom 对每一列的计算:
mySimplex = xsimplex(3, 50)
myProbs = c(0.5, 0.2, 0.3)
results = apply(mySimplex, 2, dmultinom, prob = myProbs)
向量 results
中的第 n 个条目将是矩阵 mySimplex
.
第 n 列中计数的概率
这是你想要的吗?
不同的排列:
如果你想以不同的方式计算不同的排列,那么任何单个排列的概率就是:
0.5^(c_1) * 0.2^(c_2) * 0.3^(c_3)
其中 c_1
是 1 的数量,c_2
是 2 的数量,c_3
是平局中的 3 的数量。但是,如果您想列举所有这些,您可能需要再考虑一下!每个字符为 1、2 或 3 的可能的唯一长度 50 序列的数量是 3^50 > 10^23.
我想在 R 中模拟一个带替换的采样(比如 urn 模型)。也就是说,我有三个不同的事件(比如:1,2 和 3(实际上它们是绝对的,但我认为目前这并不重要))并且我知道每个事件的概率:
1 --> 0.5
2 --> 0.2
3 --> 0.3
现在我想以 50 个替换样本为例,我想知道三个不同事件的每种可能组合的概率。
我的想法是使用 rmultinom
生成这些样本。
rmultinom(n=50,size=3,prob=c(0.5,0.2,0.3))
现在我得到 50 个随机(?)选择的样本,但是当我取 50 个样本并进行替换时,我需要所有可能的组合。
如果我没理解错的话,你所求的概率可以通过分析计算出来。
我的感觉是,您希望将所有具有相同数量的 1、2 和 3 的抽奖视为等同的(如果不是,请参见下文)。也就是说,49 个连续 1 后跟 2 与 2 后跟 49 个连续 1 一样算作 50 次平局 "outcome"。
在这种情况下,您要查找的是针对 (p1 = 0.5,p2 = 0.2,p3 = 0.3) 和计数 c1、c2 和 c3 计算的多项式概率质量函数的值, 1s、2s 和 3s(这些总和应为 50)。您可以将 R 中的多项式 PMF 计算为:
counts = c(c1, c2, c3)
myProbs = c(0.5, 0.2, 0.3)
dmultinom(x = counts, prob = myProbs)
现在剩下的就是枚举50次抽奖中可能出现的1、2、3的所有可能组合。调用函数 nsimplex(3,50)
(来自 combinat
包)告诉我们有 1326 个这样的函数,调用函数 xsimplex(3,50)
(在同一个包中找到)会在矩阵中为我们生成它们形式。以下是 1326 列中的前五列:
[,1] [,2] [,3] [,4] [,5]
[1,] 50 49 49 48 48
[2,] 0 1 0 2 1
[3,] 0 0 1 0 1
然后我们只需要使用 apply
按列计算 dmultinom 对每一列的计算:
mySimplex = xsimplex(3, 50)
myProbs = c(0.5, 0.2, 0.3)
results = apply(mySimplex, 2, dmultinom, prob = myProbs)
向量 results
中的第 n 个条目将是矩阵 mySimplex
.
这是你想要的吗?
不同的排列: 如果你想以不同的方式计算不同的排列,那么任何单个排列的概率就是:
0.5^(c_1) * 0.2^(c_2) * 0.3^(c_3)
其中 c_1
是 1 的数量,c_2
是 2 的数量,c_3
是平局中的 3 的数量。但是,如果您想列举所有这些,您可能需要再考虑一下!每个字符为 1、2 或 3 的可能的唯一长度 50 序列的数量是 3^50 > 10^23.