我真的希望你能解决我自己无法解决的问题。 我正在尝试为网络应用程序编写基本的urn模型。我想在具有2种不同颜色的模型中根据不同的绘图方法计算特定随机事件的概率。
在矢量中指定骨灰盒(红色和黑色球)的组成 a< -c(number_red,number_black)
随机事件在另一个vecotor中指定,让我们说 b< -c("红色","红色","黑色","红色")或任何其他红色和黑色球组合
现在想要计算事件的概率(向量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的方法运行循环。
当然,我已经尝试了不同的想法,但它们似乎都没有真正起作用。如果有人可以帮我解决我的问题,我将非常感激。
最佳, 亨利
答案 0 :(得分:0)
这是对的吗?
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;