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