【问题标题】:Duplicate permutation order for two separate matrices两个独立矩阵的重复排列顺序
【发布时间】:2015-09-13 19:38:51
【问题描述】:

我有两个向量,一个用于协方差,一个用于方差。我希望对这两个向量进行排列测试,但我想复制两个向量的随机化。所以说我的协方差向量Cov

给出
Cov <- c(1, 2, 3, 4, 5, 6, 7, 8)

我的方差向量 Var

给出
Var <- c(20, 25, 30, 35, 40, 45, 50, 55)

我可以使用以下方法为 Cov 做 1000 次排列:

P1000C <-c()
for (i in 1:1000){
  perm <- sample(Cov, replace=F)
  P1000C <- rbind(P1000C, perm)
}
rownames(P1000C) <- paste("Perm", 1:1000, sep = " ")

这将为我提供矩阵P1000,具有 1000 个随机排列,如下所示:

Perm 1       7  1  6  4  8  2  5  3
Perm 2       8  6  3  7  4  2  5  1
Perm 3       8  6  4  7  3  5  2  1
...
Perm 1000    5  7  2  6  4  1  8  3

现在我的问题是我想为Var 创建一个排列矩阵,它以与P1000C 完全相同的顺序给出 1000 个排列。我将把这个矩阵称为P1000V,我希望它看起来像这样:

Perm 1       50  20  45  35  55  25  40  30
Perm 2       55  45  30  50  35  25  40  20
Perm 3       55  45  35  50  30  40  25  20
...
Perm 1000    40  50  25  45  35  20  55  30

所以P1000V 中的所有排列将与P1000C.中的排列顺序相同。有没有办法“模仿”R 中的排列?

【问题讨论】:

标签: r permutation


【解决方案1】:

我只是构建一个索引排序矩阵(在这种情况下我将只抽取 10 个样本):

set.seed(144)
(perms <- t(replicate(10, sample(seq_along(Cov), replace=FALSE))))
#       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
#  [1,]    2    1    7    6    4    8    3    5
#  [2,]    3    6    7    2    4    5    8    1
#  [3,]    1    6    8    7    4    2    3    5
#  [4,]    8    6    3    4    2    7    1    5
#  [5,]    1    8    2    5    3    4    7    6
#  [6,]    4    5    1    6    7    3    8    2
#  [7,]    6    2    7    1    8    5    4    3
#  [8,]    8    3    5    6    1    4    2    7
#  [9,]    3    2    1    5    8    6    7    4
# [10,]    5    6    1    3    8    2    7    4

请注意,这应该比使用for 循环并调用rbind 一次添加一行要高效得多。要了解为什么会这样,请查看the R Inferno 的第二个圈子。

现在您可以通过以下方式获得CovVar 的相关排列:

matrix(Cov[perms], nrow=nrow(perms))
#       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
#  [1,]    2    1    7    6    4    8    3    5
#  [2,]    3    6    7    2    4    5    8    1
#  [3,]    1    6    8    7    4    2    3    5
#  [4,]    8    6    3    4    2    7    1    5
#  [5,]    1    8    2    5    3    4    7    6
#  [6,]    4    5    1    6    7    3    8    2
#  [7,]    6    2    7    1    8    5    4    3
#  [8,]    8    3    5    6    1    4    2    7
#  [9,]    3    2    1    5    8    6    7    4
# [10,]    5    6    1    3    8    2    7    4

matrix(Var[perms], nrow=nrow(perms))
#       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
#  [1,]   25   20   50   45   35   55   30   40
#  [2,]   30   45   50   25   35   40   55   20
#  [3,]   20   45   55   50   35   25   30   40
#  [4,]   55   45   30   35   25   50   20   40
#  [5,]   20   55   25   40   30   35   50   45
#  [6,]   35   40   20   45   50   30   55   25
#  [7,]   45   25   50   20   55   40   35   30
#  [8,]   55   30   40   45   20   35   25   50
#  [9,]   30   25   20   40   55   45   50   35
# [10,]   40   45   20   30   55   25   50   35

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    相关资源
    最近更新 更多