【问题标题】:Permute package in RR中的置换包
【发布时间】:2012-04-01 16:37:20
【问题描述】:

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

我有一个数据集,我想对类标签 (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 

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

【问题讨论】:

  • 我会出现的。我刚刚忙于日常工作,但如果有人在我之前没有这样做,我会在今天晚些时候或明天(英国时间)回来考虑答案。

标签: r package permutation


【解决方案1】:
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

【讨论】:

  • @Andrie- 非常感谢您帮助我获取矩阵形式的数据。
  • 非常感谢您帮我解决这个问题。它在不更改预先分配给样本的索引的情况下对样本行进行采样。但是有了这个 ctrl,我应该能够为样本排列类别标签。基本上打破了样本和类标签之间的关系。
  • 您要求“...因此,不应对数据中的每一行进行排列,而应为数据中的每个索引排列类标签 (CL)”。我认为这意味着您想在Index 的级别内置换类标签 (CL)。如果你想要一些不同的东西,也许你可以解释一下?
  • 嗨 Gavin,我想我会告诉你这里的标题是什么意思,这样我就可以更清楚地了解我的疑问。索引是样本的生物学重复,每个样本的索引数量取决于时间点的数量。因此,如果一个样本有 3 个观察值,那么它已经被研究了 3 个时间点。因此,当我置换条件 1 和条件 2(此处为 0 和 1)时,样本应在 0 和 1 之间置换,但索引为 1 的样本集应作为一个值,然后将新的 CL 分配给所有具有该指数值的观测值。我更清楚了吗? :)
猜你喜欢
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多