2016-11-20 74 views
0

我真的希望你能幫我解決一個我自己無法解決的問題。 我正在嘗試爲Web應用程序編寫基本的骨灰盒模型。我想根據不同繪製方法在具有2種不同顏色的模型中計算特定隨機事件的概率。R中的模型(試圖計算隨機事件的概率)

甕(紅色和黑色球)的組合物,在載體 一個< -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正確的結果,但我真的不知道如何將其應用到其他的問題,因爲我必須找到一種方法根據改變向量c每次運行循環時向量b的組成。

當然,我嘗試了不同的想法,但沒有一個真的似乎工作。如果有人能幫我解決我的問題,我會非常感激。

最佳, 亨利

+0

在第二個代碼塊中,'c'是球的比例,而在你的文本中'c'是球的數量,你能說清楚嗎?而'c'也是內部函數的名字,你最好選擇其他的名字。 – mt1022

+0

我使用了比例,因爲它們代表了繪製一個球的概率。因此,每次循環運行時,根據b的合併,向vec添加繪製紅球或繪製黑球的概率。最後,所有的單個概率相乘,以獲得b的總體概率。對不起,我不清楚 –

回答

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; 
+0

非常感謝。很有幫助。 #1,2和3的解決方案對我來說似乎是正確的。然而,#4與#1並不相同,因爲拉球的順序並不重要。所以事件發生的概率應該高於場景#1。我認爲計算它的一種方法是將#1的結果乘以可能的排列或b的次數。在我們的例子中,有4種不同的可能安排(我將它們計算在內)......但是如果正在改變,我怎樣才能計算出可能的安排數量?我在尋找一個抽象的解決方案。 –

+0

我試過的一個是這個,但它沒有給出正確的結果(它可能是非常錯誤的,因爲我試圖改變問題#3的解決方案)komb2 = function(n,x){return(factorial(n + x -1)/(階乘(N-1)*階乘(X)))} ñ< - 表(b)中 PROD( sapply(名稱(n)時,功能(I){ komb2(A [ i],n [i]) }) )/ komb2(sum(a),sum(n)) –

+0

相信我,和1一樣。 – mt1022