根据R中的条件,将值随机分配给两个矩阵

时间:2017-07-17 04:15:35

标签: r matrix random

我有两个矩阵:old1和gl1,我想将两个矩阵中的值分配给另外两个新矩阵。我使用的方法:1)rbind两个矩阵; 2)使用样本函数随机分配值; 3)将大矩阵分成两个新矩阵。以下是代码:

 library(ms.sev)

    ### old Global MSSS matrix
    data(oldMsss)

    old <- data.matrix(oldMsss)

    old1 <- old[-1,-1]

    ## use the global MSSS
    data(globalMsss)

    gl <- data.matrix(globalMsss)

    gl1 <- gl[,-1]

    ## combine
    tc <- rbind(gl1,old1)

    set.seed(1)

    n.permutations = 5
    sum.table = rep(1,n.permutations)

    for(j in 1:n.permutations) {
        print(j)

        t1 <- matrix(sample(tc),nrow=60)
        tf <- t1[1:30,]
        tf1 <- t1[31:60,]
        sum.table[j] <- sum(tf1-tf)

    }

通过详细检查矩阵,我注意到对于old1和gl1,从EDSS.0.0到EDSS.9.5,值应该增加(例如,gl1从0.91到10),对于y,值应该减少(例如,gl1从0.91到0.07)。

但是,我的上述方法不正确,因为在分配值时没有考虑相关性。知道如何将值分配给新矩阵但是遵循类似的模式吗?

非常感谢......

1 个答案:

答案 0 :(得分:1)

如果您认为您的数据是多变量高斯,那么您可以

sample_similar_patern <- function(mat) {
  MASS::mvrnorm(n = nrow(mat), mu = colMeans(mat), Sigma = cov(mat))
}

for(j in 1:n.permutations) {
  print(j)

  tf <- sample_similar_patern(gl1)
  tf1 <- sample_similar_patern(old1)

  sum.table[j] <- sum(tf1-tf)
}