R中的Permute包

时间:2012-03-16 04:56:55

标签: r package permutation

我从StackOverflow论坛看到了包Permute。我试图将排列作为我项目的一部分。我试图使用包mt.sample.rawp()中的multtest。但是有一些我要求的规格,我无法用上述功能。我想知道我是否可以使用你的包裹。我会解释我的问题。如果我的R cmd知识很弱,我是R的新手,所以道歉。

我有一个数据集,我想在类标签(CL)上执行排列并计算原始p值。我有我自己的t检验,这是一个修改过的t检验我的项目需要。我应该能够使用我的这个修改过的t检验来执行排列。

此外,这与使用您的软件包解决的一个问题有点类似。我有2个类标签,但是当我置换时,我的数据中的每个样本都有一个索引值,因此不应对数据中的每一行进行排列,而是对数据中的每个索引置换类标签(CL)。

例如我的数据:

Sample  1 2 3 4 5 6 7 8 
Index   1 1 2 2 3 3 4 4 
CL      0 0 1 1 1 1 0 0 

我无法在此处以矩阵格式显示它。每个标题都是我数据集中的一列。我可以使用的任何片段或参考代码。在此先感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:2)

require(permute) ## load package

## data
dat <- data.frame(Sample = 1:8, Index = rep(1:4, each = 2),
                  CL = c(0,0,1,1,1,1,0,0))

现在我们需要一个控制对象来定义如何对排列进行分层。使用permControl()

> ctrl <- with(dat, permControl(strata = Index))
> ctrl

No. of permutations: 199  

**** STRATA ****
Permutations are stratified within: Index 
Strata unpermuted

**** SAMPLES ****
Permutation type: free 
Mirrored permutations for Samples?: No 
Use same permutation within strata?: No

接下来我们生成排列,这里我产生一组10个行索引的排列

> set.seed(10)
> perms <- shuffleSet(nrow(dat), nset = 10, control = ctrl)
> perms
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
 [1,]    2    1    3    4    5    6    7    8
 [2,]    2    1    4    3    5    6    7    8
 [3,]    1    2    3    4    6    5    8    7
 [4,]    1    2    4    3    6    5    8    7
 [5,]    1    2    3    4    6    5    8    7
 [6,]    1    2    3    4    5    6    7    8
 [7,]    1    2    3    4    5    6    7    8
 [8,]    1    2    3    4    5    6    7    8
 [9,]    2    1    4    3    5    6    7    8
[10,]    2    1    3    4    5    6    7    8

perms行是排列,列是指原始数据的行。

如果您只想一次进行一次排列,例如当您使用循环进行排列测试时,请使用shuffle()代替shuffleSet(),例如:

> set.seed(10)
> perm <- shuffle(nrow(dat), control = ctrl)
> perm
[1] 2 1 3 4 5 6 7 8

要使用perms的随机播放集,只需将dat编入索引:

> dat[perms[1, ], ]
  Sample Index CL
1      1     1  0
2      2     1  0
4      4     2  1
3      3     2  1
5      5     3  1
6      6     3  1
8      8     4  0
7      7     4  0
> dat[perms[2, ], ]
  Sample Index CL
1      1     1  0
2      2     1  0
3      3     2  1
4      4     2  1
5      5     3  1
6      6     3  1
7      7     4  0
8      8     4  0
> dat[perms[3, ], ]
  Sample Index CL
2      2     1  0
1      1     1  0
3      3     2  1
4      4     2  1
6      6     3  1
5      5     3  1
7      7     4  0
8      8     4  0