2016-12-23 112 views
0

我想在R中創建一個矩陣,元素[-1,0,1]的概率分別爲[1/6,2/3,1/6]。運行時可能性會發生變化。對於靜態概率,我得到了輸出,但問題是概率的動態變化。例如,如果我用[sqrt(3),0,-sqrt(3)]爲上述概率創建矩陣,則所需輸出爲。如何在R中創建一個概率分佈的矩陣

注意:如上所述,概率不應該是靜態的。在運行時可能會有所不同。

請幫忙解決這個問題。

enter image description here

回答

3

假如你想有一個2×3矩陣:

matrix(sample(c(-1,0,1), size=6, replace=TRUE, prob=c(1/6,2/3,1/6)), nrow=2) 

所以,如果你想要的值採樣,在prob定義的概率。這只是一個向量,但是您可以使用matrix之後將其製作爲所需形狀的矩陣。用一個變量而不是值來替換概率,使其不變爲靜態。

如果數字應該按一定的方案,而不是隨機抽取根據概率分佈,複製向量元素和洗牌他們:

matrix(sample(rep(c(-1,0,1), times=c(1,4,1))), nrow=2) 
+0

謝謝@mpjdem,但輸出給出了3個零,2(-1)和1(+1)。根據條件,我需要4個零 – Siddhu

+2

這是一個概率,所以它不是確定性的。對於你想要的,你需要帶'times'參數的'rep'函數,然後用'sample'來混洗它。我會很快寫出來的。 – mpjdem

+0

是的,我明白,謝謝 – Siddhu

1

你可以試試這個生成一個m×n矩陣:

sample.dynamic.matrix <- function(pop.symbols, probs, m, n) { 
    samples <- sample(pop.symbols, m*n, prob = probs, replace=TRUE) 
    return(matrix(samples, nrow=m)) 
} 

set.seed(123) 
sample.dynamic.matrix(-1:1, c(1/6,2/3,1/6), 2, 3) 
#  [,1] [,2] [,3] 
#[1,] 0 0 -1 
#[2,] 1 -1 0 
+0

謝謝@sandipan的詳細答案。 – Siddhu

+0

最受歡迎@Siddhu –