如何在R中创建一个概率分布的矩阵
问题描述:
我想在R中创建一个矩阵,元素[-1,0,1]的概率分别为[1/6,2/3,1/6]。运行时可能性会发生变化。对于静态概率,我得到了输出,但问题是概率的动态变化。例如,如果我用[sqrt(3),0,-sqrt(3)]为上述概率创建矩阵,则所需输出为。如何在R中创建一个概率分布的矩阵
注意:如上所述,概率不应该是静态的。在运行时可能会有所不同。
请帮忙解决这个问题。
答
假如你想有一个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)
答
你可以试试这个生成一个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 –
谢谢@mpjdem,但输出给出了3个零,2(-1)和1(+1)。根据条件,我需要4个零 – Siddhu
这是一个概率,所以它不是确定性的。对于你想要的,你需要带'times'参数的'rep'函数,然后用'sample'来混洗它。我会很快写出来的。 – mpjdem
是的,我明白,谢谢 – Siddhu