如何在R中创建一个概率分布的矩阵

问题描述:

我想在R中创建一个矩阵,元素[-1,0,1]的概率分别为[1/6,2/3,1/6]。运行时可能性会发生变化。对于静态概率,我得到了输出,但问题是概率的动态变化。例如,如果我用[sqrt(3),0,-sqrt(3)]为上述概率创建矩阵,则所需输出为。如何在R中创建一个概率分布的矩阵

注意:如上所述,概率不应该是静态的。在运行时可能会有所不同。

请帮忙解决这个问题。

enter image description here

假如你想有一个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

你可以试试这个生成一个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 –