R中的Urn模型(尝试计算随机事件的概率)
Posted
技术标签:
【中文标题】R中的Urn模型(尝试计算随机事件的概率)【英文标题】:Urn model in R (trying to calculate probabilities for random events) 【发布时间】:2017-04-04 00:46:18 【问题描述】:我真的希望你能帮助我解决我自己无法解决的问题。 我正在尝试为 Web 应用程序编写一个基本的骨灰盒模型。我想在具有2种不同颜色的模型中根据不同的绘图方法计算特定随机事件的概率。
骨灰盒的组成(红球和黑球)在向量中指定 一个
随机事件在另一个向量中指定,可以说 b
现在要计算事件的概率(向量 b),当球是 1)替换在骨灰盒中,顺序很重要 2) 不在骨灰盒中更换,顺序很重要 3) 不在骨灰盒中更换,顺序无关紧要 4)替换在骨灰盒中,顺序无所谓
我想出了几个不同的想法,但没有一个真正奏效...... 起初,我编写函数是为了确定在每个场景中可以绘制多少种不同的组合。
stan = function(n,x) return(n^x)
perm = function(n, x) return(factorial(n) / factorial(n-x))
komb = function(n, x) return(factorial(n) / (factorial(n-x)*factorial(x)))
komb2 = function(n, x) return(factorial(n+x-1) / (factorial(n-1)*factorial(x)))
但后来我真的不知道如何应用它们来计算最终概率。
我还尝试使用 for 循环来模拟树形图,但它对我来说太复杂了。例如:
c <- c(number_red/(number_red+number_black), number_red/(number_red+number_black))
b <- c("red","black","red")
b[b=="red"]<-1
[b=="black"]<-2
b<-as.numeric(b)
vec<-NULL
for (i in b)
vec<-c(vec, c[i])
prod(vec)
这样的解决方案可以为问题 #1 提供正确的结果,但我真的不知道如何将其应用于其他问题,因为每次我都必须找到一种方法来根据向量 b 的组成来改变向量 c运行循环。
当然,我尝试过不同的想法,但似乎没有一个真正奏效。如果有人可以帮助我解决我的问题,我将非常感激。
最好, 亨利
【问题讨论】:
在第二个代码块中,c
是球的比例,而在你的文字c
是球的数量,你能说清楚吗?而c
也是内部函数的名称,你最好选择其他名称。
我使用了比例,因为它们代表了绘制单个球的概率。因此每次循环运行时,根据 b 的组合,将抽到红球或抽到黑球的概率加到 vec 中。最后将所有单个概率相乘以获得b的整体概率。对不起,我不清楚
【参考方案1】:
这对吗?
a <- c(red = 5, black = 5)
b <- c("red","red","black","red")
# (1)
prod((a/sum(a))[b])
# (2)
p <- c()
n <- a
for(i in b)
p <- c(n[i] / sum(n), p)
n[i] <- n[i] - 1
prod(p)
# (3)
komb <- function(n, x)
return(factorial(n) / (factorial(n-x)*factorial(x)))
n <- table(b)
prod(sapply(names(n), function(i)
komb(a[i], n[i])
)) / komb(sum(a), sum(n))
# (4)
# I think it is the same as (1) as each sample is independent;
【讨论】:
非常感谢。非常有帮助。 #1、2和3的解决方案对我来说似乎是正确的。但是,#4 与#1 不同,因为抽出的球的顺序无关紧要。所以事件的概率应该高于场景#1。我认为计算它的一种方法是将#1的结果与b的可能排列或顺序的数量相乘。在我们的示例中,有 4 种不同的可能排列方式(我计算过它们)......但是如果 be 发生变化,我如何计算可能排列的数量?我正在寻找一个抽象的解决方案。 我尝试过的一个瘦点是这个,但它没有给出正确的结果(而且它可能是非常错误的,因为我试图改变问题 #3 的解决方案) komb2 = function(n, x) 返回(阶乘(n+x-1)/(阶乘(n-1)*阶乘(x))) n 相信我,和1一样。以上是关于R中的Urn模型(尝试计算随机事件的概率)的主要内容,如果未能解决你的问题,请参考以下文章
[机器学习与scikit-learn-36]:算法-分类-一元离散随机变量=>样本空间=>古典概率模型(事件自然数等概率均匀分布)