R 如何生成平均值和标准偏差预先固定的成对概率矩阵?

R 如何生成平均值和标准偏差预先固定的成对概率矩阵?,r,function,matrix,probability,pairwise,R,Function,Matrix,Probability,Pairwise,我需要用R生成一个联合概率矩阵(80*80),这样这个矩阵的平均值和标准偏差是预先固定的。这是一个对称矩阵。主要对角线元素被解释为二元变量ai等于1的概率p(ai)。非对角元素是A i和A j均为1的概率p(A i A j)。该矩阵应响应以下条件: 0 ≤ p A i ≤ 1 max ( 0 , p A i + p A j − 1 ) ≤ p A i A j ≤ min ( p A i , p A j ) , i ≠ j p A i + p A j + p A k − p A i A j −

我需要用R生成一个联合概率矩阵(80*80),这样这个矩阵的平均值和标准偏差是预先固定的。这是一个对称矩阵。主要对角线元素被解释为二元变量ai等于1的概率p(ai)。非对角元素是A i和A j均为1的概率p(A i A j)。该矩阵应响应以下条件:

0 ≤ p A i ≤ 1

max ( 0 , p A i + p A j − 1 ) ≤ p A i A j ≤ min ( p A i , p A j ) , i ≠ j

p A i + p A j + p A k − p A i A j − p A i A k − p A j A k ≤ 1 , i ≠ j , i ≠ k , j ≠ k
使用check.commonprob检查这些条件

这是我试过的

# First I need another function to make the matrix symmetric 


makeSymm <- function(m) {
    m[upper.tri(m)] <- t(m)[upper.tri(m)]
    return(m)
}



install.packages("bindata")
library (bindata)

# Function to create the joint probabilites matrix:

joint <- function(b, x, y, k) {
    repeat {
        b[lower.tri(b, diag=TRUE)] <- rnorm(k*(k+1)/2, mean=x,sd=y)
        b <- makeSymm(b)
        if (check.commonprob(b)==TRUE) break
    }
    return(b)
}

c <- matrix(0, 4, 4)
c <- joint(c, 0.5, 0.25, 4)
c
              [,1]      [,2]      [,3]      [,4]
    [1,] 0.3956524 0.3156023 0.3007369 0.2837493
    [2,] 0.3156023 0.4330955 0.2920143 0.4145124
    [3,] 0.3007369 0.2920143 0.7921709 0.3616905
    [4,] 0.2837493 0.4145124 0.3616905 0.4318048
#首先,我需要另一个函数使矩阵对称

makeSymm您是否正在使用
bindata
软件包中的
check.commonprob
功能?如果是这样,请明确说明,因为它不是基本软件包的一部分&这里不是每个人都安装了它。谢谢。完成了!